1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- % phase.m
- % David Rowe August 2009
- % experiments with phase for sinusoidal codecs
- function phase(samname, F0, png)
- Wo=2*pi*F0/8000;
- P=2*pi/Wo;
- L = floor(pi/Wo);
- Nsam = 16000;
- N = 80;
- F = Nsam/N;
- A = 10000/L;
- phi = zeros(1,L);
- s = zeros(1,Nsam);
-
- for m=floor(L/2):L
- phi_off(m) = -m*Wo*8;
- end
- for f=1:F
- phi(1) = phi(1) + Wo*N;
- phi(1) = mod(phi(1),2*pi);
-
- for m=1:L
- phi(m) = m*phi(1);
- end
- x = zeros(1,N);
- for m=1:L
- x = x + A*cos(m*Wo*(0:(N-1)) + phi(m));
- endfor
- s((f-1)*N+1:f*N) = x;
- endfor
- figure(1);
- clf;
- plot(s(1:250));
- fs=fopen(samname,"wb");
- fwrite(fs,s,"short");
- fclose(fs);
- if (nargin == 3)
- % small image to fit blog
- __gnuplot_set__ terminal png size 450,300
- ss = sprintf("__gnuplot_set__ output \"%s.png\"", samname);
- eval(ss)
- replot;
- % for some reason I need this to stop large plot getting wiped
- __gnuplot_set__ output "/dev/null"
- endif
- endfunction
|