lsp = load(lsp_name);
endif
+ phase_name = strcat(samname,"_phase.txt");
+ if (file_in_path(".",phase_name))
+ phase = load(phase_name);
+ endif
+
+ phase_name_ = strcat(samname,"_phase_.txt");
+ if (file_in_path(".",phase_name_))
+ phase_ = load(phase_name_);
+ endif
+
do
figure(1);
clg;
hold on;
plot((0:255)*4000/256, Sw(f,:),";Sw;");
- if (file_in_path(".",sw__name))
- plot((0:255)*4000/256, Sw_(f,:),";Sw_;");
- endif
-
if (file_in_path(".",modelq_name))
Amq = modelq(f,3:(L+2));
plot((1:L)*Wo*4000/pi, 20*log10(Amq),";Amq;" );
- plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;");
+ if (file_in_path(".",pw_name))
+ plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;");
+ endif
signal = Am * Am';
noise = (Am-Amq) * (Am-Amq)';
snr = 10*log10(signal/noise);
plot((1:L)*Wo*4000/pi, 20*log10(Amq) - 20*log10(Am), Am_err_label);
endif
+ % phase model - determine SNR and error spectrum
+
+ if (file_in_path(".",phase_name_))
+ orig = Am.*exp(j*phase(f,1:L));
+ synth = Am.*exp(j*phase_(f,1:L));
+ signal = orig * orig'
+ noise = (orig-synth) * (orig-synth)'
+ snr = 10*log10(signal/noise);
+
+ phase_err_label = sprintf(";phase_err SNR %4.2f dB;",snr);
+ plot((1:L)*Wo*4000/pi, 20*log10(orig-synth), phase_err_label);
+ endif
+
if (file_in_path(".",lsp_name))
for l=1:10
plot([lsp(f,l)*4000/pi lsp(f,l)*4000/pi], [60 80], 'r');
hold off;
+ if (file_in_path(".",phase_name))
+ figure(3);
+ plot((1:L)*Wo*4000/pi, unwrap(phase(f,1:L)), ";phase;");
+ axis;
+ if (file_in_path(".",phase_name_))
+ hold on;
+ plot((1:L)*Wo*4000/pi, unwrap(phase_(f,1:L)), ";phase_;");
+ hold off;
+ endif
+ figure(2);
+ endif
+
% interactive menu
printf("\rframe: %d menu: n-next b-back p-png q-quit ", f);
% pulse.m
% David Rowe August 2009
-% experiments with human pulse perception for sinusoidal codecs
-% lets try some pulses in noise
+%
+% Experiments with human pulse perception for sinusoidal codecs
-function pulse(samname, F0, snr)
+function pulse(samname)
- N = 16000;
- s = zeros(1,N);
- Wo = 2*pi*F0/8000;
- L = floor(pi/Wo);
- A = 10000;
- phi = zeros(1,L);
- for m=1:L
- s = s + (A/L)*cos(m*Wo*(1:N) + phi(m));
+ A = 1000;
+ K = 16000;
+ N = 80;
+ frames = K/N;
+ s = zeros(1,K);
+
+ for f=1:frames
+ % lets try placing np random pulses in every frame
+
+ P = 20 + (160-20)*rand(1,1);
+ Wo = 2*pi/P;
+ L = floor(pi/Wo);
+ sf = zeros(1,N);
+ for m=1:L/2:L
+ pos = floor(rand(1,1)*N)+1;
+ %pos = 50;
+ for l=m:m+L/2-1
+ sf = sf + A*cos(l*Wo*((f-1)*N+1:f*N) - pos*l*Wo);
+ endfor
+ endfor
+ s((f-1)*N+1:f*N) = sf;
endfor
- randn("seed", 0);
- s = s + A*(10 .^(-snr/20))*randn(1,N);
+
plot(s(1:250));
fs=fopen(samname,"wb");