filtrado digital - dicis.ugto.mx digital... · ventana de kaiser tiene un parámetro para el...

28
FILTRADO DIGITAL División de Ingenierías Campus Irapuato-Salamanca

Upload: phamxuyen

Post on 02-Oct-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

FILTRADO DIGITAL

División de Ingenierías

Campus Irapuato-Salamanca

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);

Ejemplo1

fvtool(h,1); % Filter visualization tool

Ejemplo 1

n=-26:26;

fc= 0.2187;

hd = 2*fc*sinc(2*n*fc);

h = hd.*window(@hann,53);

fvtool(h,1)

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');