151 lines
3.3 KiB
Mathematica
151 lines
3.3 KiB
Mathematica
|
% Copyright David Rowe 2012
|
||
|
% This program is distributed under the terms of the GNU General Public License
|
||
|
% Version 2
|
||
|
%
|
||
|
% Plot amplitude modelling information from dump files to test and develop
|
||
|
% LPC post filter.
|
||
|
|
||
|
function pllpcpf(samname, f)
|
||
|
|
||
|
% switch some stuff off to unclutter display
|
||
|
|
||
|
plot_Am = 0;
|
||
|
plot_Amq = 0;
|
||
|
plot_err = 0;
|
||
|
plot_lsp = 0;
|
||
|
plot_snr = 0;
|
||
|
plot_vsnr = 0;
|
||
|
plot_sw = 0;
|
||
|
plot_pw = 1;
|
||
|
plot_pwb = 1;
|
||
|
plot_rw = 1;
|
||
|
|
||
|
sn_name = strcat(samname,"_sn.txt");
|
||
|
Sn = load(sn_name);
|
||
|
|
||
|
sw_name = strcat(samname,"_sw.txt");
|
||
|
Sw = load(sw_name);
|
||
|
|
||
|
sw__name = strcat(samname,"_sw_.txt");
|
||
|
if (file_in_path(".",sw__name))
|
||
|
Sw_ = load(sw__name);
|
||
|
endif
|
||
|
|
||
|
model_name = strcat(samname,"_model.txt");
|
||
|
model = load(model_name);
|
||
|
|
||
|
modelq_name = strcat(samname,"_qmodel.txt");
|
||
|
if (file_in_path(".",modelq_name))
|
||
|
modelq = load(modelq_name);
|
||
|
endif
|
||
|
|
||
|
% Pw (LPC synth filter spectrum) before post filter
|
||
|
|
||
|
pwb_name = strcat(samname,"_pwb.txt");
|
||
|
if (file_in_path(".",pwb_name))
|
||
|
Pwb = load(pwb_name);
|
||
|
endif
|
||
|
|
||
|
% Rw (Post filter spectrum)
|
||
|
|
||
|
rw_name = strcat(samname,"_rw.txt");
|
||
|
if (file_in_path(".",rw_name))
|
||
|
Rw = load(rw_name);
|
||
|
endif
|
||
|
|
||
|
% Pw (LPC synth filter spectrum) after post filter
|
||
|
|
||
|
pw_name = strcat(samname,"_pw.txt");
|
||
|
if (file_in_path(".",pw_name))
|
||
|
Pw = load(pw_name);
|
||
|
endif
|
||
|
|
||
|
|
||
|
Ew_on = 1;
|
||
|
k = ' ';
|
||
|
do
|
||
|
figure(1);
|
||
|
clf;
|
||
|
s = [ Sn(2*f-1,:) Sn(2*f,:) ];
|
||
|
size(s);
|
||
|
plot(s);
|
||
|
axis([1 length(s) -20000 20000]);
|
||
|
|
||
|
figure(2);
|
||
|
clf;
|
||
|
Wo = model(f,1);
|
||
|
L = model(f,2);
|
||
|
Am = model(f,3:(L+2));
|
||
|
if plot_Am
|
||
|
plot((1:L)*Wo*4000/pi, 20*log10(Am),";Am;r");
|
||
|
end
|
||
|
axis([1 4000 -10 80]);
|
||
|
hold on;
|
||
|
if plot_sw
|
||
|
plot((0:255)*4000/256, Sw(f,:),";Sw;");
|
||
|
end
|
||
|
|
||
|
if (file_in_path(".",modelq_name))
|
||
|
|
||
|
Amq = modelq(f,3:(L+2));
|
||
|
if plot_Amq
|
||
|
plot((1:L)*Wo*4000/pi, 20*log10(Amq),";Amq;g" );
|
||
|
end
|
||
|
|
||
|
if (file_in_path(".",pwb_name) && plot_pwb)
|
||
|
plot((0:255)*4000/256, 10*log10(Pwb(f,:)),";Pwb;r");
|
||
|
endif
|
||
|
|
||
|
if (file_in_path(".",rw_name) && plot_rw)
|
||
|
plot((0:255)*4000/256, 10*log10(Rw(f,:)),";Rw;b");
|
||
|
endif
|
||
|
|
||
|
if (file_in_path(".",pw_name) && plot_pw)
|
||
|
plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;g.");
|
||
|
endif
|
||
|
|
||
|
signal = Am * Am';
|
||
|
noise = (Am-Amq) * (Am-Amq)';
|
||
|
snr1 = 10*log10(signal/noise);
|
||
|
Am_err_label = sprintf(";Am error SNR %4.2f dB;m",snr1);
|
||
|
if plot_err
|
||
|
plot((1:L)*Wo*4000/pi, 20*log10(Amq) - 20*log10(Am), Am_err_label);
|
||
|
end
|
||
|
endif
|
||
|
|
||
|
|
||
|
hold off;
|
||
|
|
||
|
% interactive menu
|
||
|
|
||
|
printf("\rframe: %d menu: n-next b-back p-png q-quit", f);
|
||
|
fflush(stdout);
|
||
|
k = kbhit();
|
||
|
if (k == 'n')
|
||
|
f = f + 1;
|
||
|
endif
|
||
|
if (k == 'b')
|
||
|
f = f - 1;
|
||
|
endif
|
||
|
|
||
|
% optional print to PNG
|
||
|
|
||
|
if (k == 'p')
|
||
|
figure(1);
|
||
|
pngname = sprintf("%s_%d_sn.png",samname,f);
|
||
|
print(pngname, '-dpng', "-S500,500")
|
||
|
pngname = sprintf("%s_%d_sn_large.png",samname,f);
|
||
|
print(pngname, '-dpng', "-S800,600")
|
||
|
|
||
|
figure(2);
|
||
|
pngname = sprintf("%s_%d_sw.png",samname,f);
|
||
|
print(pngname, '-dpng', "-S500,500")
|
||
|
pngname = sprintf("%s_%d_sw_large.png",samname,f);
|
||
|
print(pngname, '-dpng', "-S1200,800")
|
||
|
endif
|
||
|
|
||
|
until (k == 'q')
|
||
|
printf("\n");
|
||
|
|
||
|
endfunction
|