function [Nz,Nw]=prob7a(df,Nc,wtype) % function []=prob27a(df,Nc,wtype) % Señal de entrada: sinusoide que varía entre 48 Hz y 52 Hz en 5 segundos % df es la resolución frecuencial % Nc es el número de ciclos de señal que deben ser muestreados % wtype es el tipo de ventana espectral % Nz es el número de puntos usados para hacer la FFT (incluído el llenado de ceros) % Nw es el número de puntos muestreados de la señal window=wtype(1:4); T=5; % Tiempo de duración de la señal D=20e-3*Nc; % Duración de Nc ciclos de de la señal de ~50Hz % Tomamos como criterio que 8M es ~Nz % M es ~50/df --> 8*50/df = Nz % Para que Nz sea potencia de 2 --> n=ceil(log(Nz)/log(2)) --> Nz=2^n; % El número de puntos Nw a muestrear durante D seg deberá cumplir el teorema del muestreo: Nz = 8*50/df; n = ceil(log(Nz)/log(2));Nz=2^n; ts=1/(df*Nz);fm=1/ts; % Cálculo de la frecuencia de muestreo necesaria N=ceil(fm*T); % Número de puntos total de la señal tipo chirp Nw=ceil(D/ts); % Número de puntos muestreados de la señal en D seg. % Utilizo una ventana espectral para eliminar armónicos de alta frecuencia if wtype=='hamm', w=hamming(Nw)'; elseif wtype=='hann', w=hanning(Nw)'; elseif wtype=='blac', w=blackman(Nw)'; elseif wtype=='boxc', w=boxcar(Nw)'; end y1=chirp([48 52]/fm,N); y2=chirp([8 12]/fm,N); y=y1+0.2*y2; t=0:ts:T-ts/2; fprintf(1,'El número de puntos de la FFT es %d\n',Nz); run=1; while run==1, Nr=input(['Entre un entero entre 1 y ' int2str(N-Nw) '=']); fr=(Nr+Nw/2)*4/N+48; fprintf(1,'La frecuencia en este punto es ~%2.f Hz\n',fr); yw=y(Nr:Nr+Nw-1); yw=yw.*w; Y=fft(yw,Nz); Y=fftshift(Y); % Cálculo del máximo de Y [Ymax,idx]=max(abs(Y)); f=[-Nz/2:0 1:Nz/2-1];f=f*df; fprintf(1,'El armónico de mayor energía está en %.2f Hz\n',abs(f(idx))); figure;plot(f,20*log10(abs(Y/Ymax)));grid;zoom; disp('Presione una tecla para continuar'); pause; otra=input('Otra? (S/N)','s'); if otra=='s' | otra=='S', run=1; else run=0; end end