fp=[5000 8000]; fs=[4000 10000]; fm=22000;fny=11000; Ap=1;As=60; At=[Ap As]; Fp=fp/fm;Fs=fs/fm; % Predistorsionado de las especificaciones Wxp=2*tan(2*pi*Fp/2); Wxs=2*tan(2*pi*Fs/2); % Filtro Analógico [N,Wxn]=cheb1ord(Wxp,Wxs,Ap,As,'s'); [B,A]=cheby1(N,Ap,Wxn,'s'); % Transformación a filtro Digital [Bz,Az]=bilinear(B,A,1); [Hz,f]=freqz(Bz,Az,500,fm); Hzdb=20*log10(abs(Hz)); plot(f,Hzdb,'-g');hold on;grid;zoom; plot([fp fs],-[Ap Ap As As],'*r');hold off; title('Respuesta Frecuencial Filtro Digital de Chebyshev I'); disp('Presione una tecla para continuar'); pause; [Gd,f]=grpdelay(Bz,Az,500,fm); plot(f,Gd); title(['Retraso de Grupo Filtro Digital de Chebyshev I, Orden=' int2str(N-1)]); disp('Presione una tecla para continuar'); pause; % Filtro FIR de remez ap=(1-10^(-Ap/20))/(1+10^(-Ap/20)); as=(1+ap)*10^(-As/20); run=1; while run==1, N=input('Enter filter length = '); %[N,Fo,Mo,W]=remezord([fs(1) fp(1) fp(2) 9000],[0 1 0],[as ap as],fm); B=remez(N-1,[0 fs(1) fp(1) fp(2) fs(2) fny]/fny,[0 0 1 1 0 0],[1 as/ap 1]); [Hsp]=-20*log10(freqz(B,1,[fs(1) fp(1) fp(2) fs(2)],fm)); fprintf(1,'Ap=%f\tap=%f %f\n',Ap,Hsp(2),Hsp(3)); fprintf(1,'As=%f\tas=%f %f\n',As,Hsp(1),Hsp(4)); otra=input('Otro filtro? S/N : ','s'); if otra=='s' | otra=='S', run=1; else run=0; end end [Hz,f]=freqz(B,1,500,fm); Hzdb=20*log10(abs(Hz)); disp(['El orden del Filtro FIR de remez es = ' int2str(N)]); plot(f,Hzdb,'-g');hold on;grid; plot([fp fs],-[Ap Ap As As],'*r');hold off; title(['Respuesta Frecuencial Filtro Digital por Remez, Orden=' int2str(N)]); disp('Presione una tecla para continuar'); pause; run=1; while run==1, N=input('Enter filter length = '); B=fir1(N-1,[fp(1)-200 fp(2)+200]/fny,blackman(N)); [Hsp]=-20*log10(freqz(B,1,[fs(1) fp(1) fp(2) fs(2)],fm)); fprintf(1,'Ap=%f\tap=%f %f\n',Ap,Hsp(2),Hsp(3)); fprintf(1,'As=%f\tas=%f %f\n',As,Hsp(1),Hsp(4)); otra=input('Otro filtro? S/N : ','s'); if otra=='s' | otra=='S', run=1; else run=0; end end [Hz,f]=freqz(B,1,500,fm); Hzdb=20*log10(abs(Hz)); disp(['El orden del Filtro FIR por el método de la ventana es = ' int2str(N)]); plot(f,Hzdb,'-g');hold on;grid; plot([fp fs],-[Ap Ap As As],'*r');hold off; title(['Respuesta Frecuencial Filtro Digital por Met. Series de Fourier, Orden=' int2str(N)]);