Post on 02-Oct-2018
Filtros ideales
Pasabajas:
Pasaaltas
Pasabanda
Rechazabanda2
22
1
11
1
11
2
22
)sin(2)sin(2)(
)sin(2)sin(2)(
)1/()()(
)sin(2)(
n
nf
n
nfnh
n
nf
n
nfnh
nhnh
n
nfnh
D
D
nlpfD
c
ccD
Filtros ideales
De la respuesta al impulso puede observarse
que los filtros no son realizables al no ser
causales.
Además los filtros no son FIR por tener una
respuesta infinita al impulso.
h(n) debe truncarse en un valor M. Pero
aparece el fenómeno de Gibbs.
Tabla comparativa ventanas
Ventana Df Riple
pasante
dB
Máx.
atenua.
rechazo dB
w(n)
Rectangular 0.9/N 0.7416 21 1
Hamming 3.1/N 0.0546 44 0.5+0.5cos(2pn/N)
Hanning 3.3/N 0.0194 53 0.54+0.46cos(2pn/N)
Blackman 5.5/N 0.0017 74 0.42+0.5cos[2pn/(N-1)]+
0.08cos[4pn/(N-1)]
Digital Signal Processing, A practica Approach. IFEACHOR, Emmanuel y JERVIS, Barrie.
Addison-Wesley.1993.
Ejemplo 1
Diseñar un filtro pasabajas:
- borde frecuencia de paso 1.5k
- Ancho transición 0.5k
- Atenuación banda de rechazo > 50dB
- Frecuencia de muestreo 8k
Ejemplo 1
hD(n) = 2fcsinc(2nfc)
La atenuación se consigue con Hamming o Blackman. Por simplicidad Hamming.
Df = 0.5k/8k = 0.0625
Df = 3.3/N
N = 3.3/Df
N = 3.3/0.0625
N = 52.8
N = 53, número de coeficientes
Ejemplo 1
w(n) = 0.54+0.46cos(2pn/53), -26<n<26
Se selecciona fc en la mitad de la banda de
transición:
fc’ = fc + Df
fc’ = (1.5k + 0.25k)/8k = 1.75k/8k = 0.21875
Ejemplo 1
Como h(n) es simétrico se calculan solo h(0)…h(26)
Para n=0
hD(0) = 2fcsinc(2nfc) = 0.4375
w(0) = 0.54+0.46cos(2pn/53) = 1
h(0) = hD(0)w(0) = 0.4375
h(1) = hD(1)w(1) = 0.31119
h(2) = hD(2)w(2) = 0.06012
h(26) = hD(26)w(26) = 0.000913
Ejemplo 1
Cálculo de los coeficientes en Matlab:
n=-26:26;
fc= 0.2187;
hd = 2*fc*sinc(2*n*fc);
w = 0.54+0.46*cos(2*pi*n/53);
h=hd.*w;
[Hf,w]=freqz(h,1,128);
Ventana de Kaiser
Las ventanas anteriores tienen características fijas. La ventana de Kaiser tiene un parámetro para el control del rizo b. Pueden alcanzarse atenuaciones muy altas.
b = 0: ventana rectángular
b = 5.44: similar a Hamming
b = 0, si A≤ 21dB
b = 0.5842(A-21)0.4+0.07886(A-21) si 21 < A< 50dB
b = 0.1102(A-8.7) si A ≥ 50dB
N ≥ (A - 7.95)/(14.36Df)
Ejemplo 2
Banda pasante: 150-250Hz
Ancho de transición: 50Hz
Atenuación banda rechazo: 60dB
Frecuencia de muestreo: 1k
Ejemplo 2
Kaiser:
N≥(A-7.95)/(14.36Df)
=(60-7.95)/(14.36*50/1000)=72.49
N=73.
b=0.1102(A-8.7)=0.1102(60-8.7)=5.65
fc1= (150-25)/1000 = 0.125
fc2= (150+25)/1000 = 0.175
Ejemplo 2
Cálculo en Matlab:
n=-36:36;
f1=0.275;
f2=0.125;
B=5.65;
hd = 2*f1*sinc(2*n*f1) - 2*f2*sinc(2*n*f2);
w’ = window(@kaiser,73,5.65);
h=hd.*w;
[Hf,w]=freqz(h,1,128);
subplot(2,1,1);
plot(w/(2*pi),20*log10(abs(Hf)));grid on;
subplot(2,1,2);
plot(w/(2*pi),unwrap(angle(Hf)));grid on;
• Tarea: Diseñar un filtro pasabanda con las
siguientes especificaciones:
• Pasabanda [4-8]KHz, Rechazobanda [2-
12]KHz Ap=3dB As=45dB Fs=25KHz
• Utilizar el filtro de Hamming
Funciones de MATLAB para realizar filtros FIR:
• Función FIR1
>> B = fir1(N,Wn,type,window);
Diseña un filtro FIR pasabajas de orden N (longitud N+1) y frecuencia de corte Wn
(normalizada con respecto a la frecuencia de Nyquists, 0 < Wn < 1). Se pueden especificar
otro tipo de filtros mediante el parámetro type. Por ejemplo, para un filtro rechazo de banda:
>> B = fir1(N,[W1 W2],'stop');
Por defecto la función FIR usa la ventana de Hamming. Otro tipo de ventanas pueden
también especificarse:
>> B = fir1(N,Wn,bartlett(N+1));
>> B = fir1(N,Wn,'high',chebwin(N+1,R));
• Función FIR2
>> B = fir2(N,F,M,window);
Diseña un filtro FIR utilizando el método del muestreo frecuencial. Los parámetros de
entrada es el orden del filtro N (longitud N+1) y dos vectores F y M que especifican la
frecuencia y la magnitud, de forma que “plot(F,M)” es una gráfica de la respuesta deseada
del filtro.
Se pueden indicar saltos bruscos en la respuesta frecuencial duplicando el valor de la
frecuencia de corte.
F debe estar entre 0 y 1, en orden creciente, siendo el primer elemento igual a 0 y el
último 1. El parámetro window indica el tipo de ventana a utilizar. Por defecto, usa la
ventana de Hamming.
>> B = fir2(N,F,M,’bartlett(N+1)’);
Se pueden especificar más parámetros en esta función,
>> B = fir2(N,F,M,npt,lap,window);
La función fir2 interpola la respuesta frecuencial deseada (F,M) con npt puntos (por
defecto, npt=512). Si dos valores sucesivos de F son iguales, se crea una región de lap
puntos alrededor de este punto (por defecto, lap=25).
• Función FIRLS
>> B = firls(N,F,M);
Diseño de filtros FIR usando la minimización del error por mínimos cuadrados. Los
argumentos de entrada son el orden del filtro N, y dos vectores F y M, cuyo formato
difiere de los análogos en la función fir2. El filtro obtenido es la mejor aproximación a
(F,M) por mínimos cuadrados.
Ejemplo 2 con el método de muestreo frecuencial
clear;
j = sqrt(-1);
H=zeros(1,16);
H(1) = 1;
H(2) = exp(-j*pi*15/16);
H(3) = 0.7*exp(-j*pi*30/16);
% H(4) = exp(-j*pi*45/16);
% H(5) = exp(-j*pi*60/16);
% H(13) = conj(H(5));
% H(14) = conj(H(4));
H(15) = conj(H(3));
H(16) = conj(H(2));
h = real(ifft(H));
[Hf,Wf] = freqz(h,1,512);
Ff = Wf/(2*pi);
F=[0:8]/16;
plot(Ff,abs(Hf),F,abs(H(1:9)),'o');zoom;grid;
hold on;
h = h.*hamming(16)';
Hf1 = freqz(h,1,512);
plot(Ff,abs(Hf1),'r');
% Usando la funcion fir2
B = fir2(15,[0 1 2 3 4 5 6 7 8]*2/16,[1 1
0.7 0 0 0 0 0 0],boxcar(16));
Hf2 = freqz(B,1,512);
plot(Ff,abs(Hf2),'m');
hold off
• Diseñar un filtro FIR pasabanda a frecuencias de 30 Hz y
3500 Hz por cada uno de los diferentes métodos. Utilizar
un mismo orden de filtro (por ejemplo N=44) y comparar
las respuestas frecuenciales.
• N=44;Fs=11020;Fny=Fs/2;
• Bfir1 = fir1(N,[30 3500]/Fny);
• Bfir2 = fir2(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]);
• Bfirls = firls(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]);
• Bremez = remez(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]);
• F=0:10:5000;
• Hfir1=abs(freqz(Bfir1,1,F,Fs));
• Hfir2=abs(freqz(Bfir2,1,F,Fs));
• Hfirls=abs(freqz(Bfirls,1,F,Fs));
• Hremez=abs(freqz(Bremez,1,F,Fs));
• semilogy(F,Hfir1,'r',F,Hfir2,'g',F,Hfirls,'b',F,Hremez,'m');
• legend('fir1','fir2','firls','remez');