aboutsummaryrefslogtreecommitdiff
path: root/octave/pllpcpf.m
diff options
context:
space:
mode:
Diffstat (limited to 'octave/pllpcpf.m')
-rw-r--r--octave/pllpcpf.m150
1 files changed, 150 insertions, 0 deletions
diff --git a/octave/pllpcpf.m b/octave/pllpcpf.m
new file mode 100644
index 0000000..924e045
--- /dev/null
+++ b/octave/pllpcpf.m
@@ -0,0 +1,150 @@
+% 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