Está en la página 1de 10

1

Filtros FIR
En este capítulo estudiaremos Filtros FIR para ello es necesario que se conozcan los
filtros con anterioridad, tanto digitales como analógicos. Junto con su correcto
funcionamiento y conceptos para así poder tener un concepto más amplio y completo
de filtros y reconocer con exactitud Filtros FIR.
Además de desarrollarse ejercicios y sus respectivas aplicaciones en este capítulo,
podemos observar que es de suma importancia los conceptos previos anteriormente
vistos, como señales en tiempo discreto y en tiempo continuo y sus respectivas
diferencias y representaciones, gráficas y analíticas.
1. Concepto de Filtros FIR:

Pertenece a un tipo de Filtro Digital, una de las clases en la cual dependerá del tiempo de
duración de la respuesta.

. En general, un sistema FIR se describe mediante la ecuación en diferencia.


𝑀

𝑦[𝑛] = ∑ 𝑏𝑘 𝑥[𝑛 − 𝑘]
𝑘=0

O de forma equivalente a la función de transferencia:


𝑀−1

𝐻(𝑧) = ∑ 𝑏𝑘 𝑧 −𝑘
𝑘=0

Cuyas raíces son los ceros del filtro. Además la respuesta al impulso del sistema FIR es:
𝑏𝑛 0≤𝑛 ≤𝑀−1
ℎ(𝑛) {
0 𝑒𝑛 𝑜𝑡𝑟𝑜𝑠 𝑐𝑎𝑠𝑜𝑠
La función de transferencia de Filtros FIR es un polinomio en 𝑧 −1 . Por ende habrán propiedades
que deben cumplirse, las cuales son:

 Posee memoria finita


 Son estables en estado BIBO.
 Realizan una respuesta en frecuencia con fase lineal

Sabemos que una respuesta en fase lineal genera un retardo, esto es posible reducir de tal
manera que el diseño se basa en la aproximación de la respuesta deseada.
2 Filtros FIR Cap.1

2. Caracteristicas de Filtros FIR:


 Pueden diseñarse con fase perfectamente lineal
 Son filtros no recursivos, es decir todos los coeficientes ai de la ecuación en diferencia
son cero.
 Son siempre estables al no tener retroalimentaciones.
 Implementación de hardware sencilla
 Su respuesta al impulso coincide con el vector de coeficientes bi
𝑀

𝑦[𝑛] = ∑ 𝑏𝑘 𝑥[𝑛 − 𝑘]
𝑘=0

3. Diseño de Filtros de FIR:


3.1. Diseño de Filtros FIR por el Método de Ventanas
Si Hd(w) la respuesta en frecuencia deseada y la respuesta impulsional hd(n) es
infinita y dada por la transformada inversa de Fourier:
1 𝜋
ℎ𝑑 (𝑛) = ∫ 𝐻 (𝑤)𝑒 𝐽𝜔𝑡 𝑑𝑤
2𝜋 −𝜋 𝑑

El filtro FIR se obtiene truncando hd(n) por medio de una ventana, como por medio
de una ventana rectangular:
1 𝑛 = 0,1, … , 𝑀 − 1
𝑤(𝑛) = {
0 𝑒𝑛 𝑜𝑡𝑟𝑜𝑠 𝑐𝑎𝑠𝑜𝑠
Es posible reescribir la ecuación en forma equivalente:
ℎ(𝑛) = ℎ𝑑(𝑛)𝑤(𝑛)
ℎ[𝑛] = 𝑤[𝑛]ℎ𝑑[𝑛]

Técnica de ventanazo:
Se diseñan obteniendo su respuesta en frecuencia

Se diseña una plantilla con los ejes de corte, etc. Una vez obtenida la plantilla, la muestreamos
para conseguir una transformada de Fourier digital. Hacemos la inversa y obtenemos la
respuesta impulso. Si hemos tomado muchos puntos para la plantilla, la respuesta tendrá
3 Filtros FIR Cap.1

muchos puntos. Se toma una fracción de esa respuesta impulso y se llama envantenar la
respuesta impulso.

 El número de muestras de la fft respecto a la frecuencia de muestreo limitara la


resolución de la frecuencia.
 El tamaño de la ventana nos limitara en segundo término la resolución de la frecuencia.
 Especialmente sensible a bajas frecuencias.

Tipos de ventana:

 Hamming
 Hanning
 Bartlett
 Blackman3
 Kaiser
 Chebwin

En MATLAB fir1 y fir2 ayudan a escoger el filtro elegido.

3.2. Diseño de Filtro FIR de fase lineal por el método de muestreo de


frecuencia
En este método se muestrea la frecuencia deseada en [M/2]:
2𝜋
𝑤𝑘 = (𝑘 + 𝛼)
𝑀

Y se calcula la respuesta al impulso h(n), pero para reducir los lóbulos laterales se
utilizan métodos numéricos que muestran la banda de transición.
𝑀−1
2𝜋 𝑗2𝜋(𝑘+𝛼)𝑛
𝐻(𝑘 + 𝛼) = 𝐻 ( (𝐾 + 𝛼)) = ∑ ℎ(𝑛)𝑒 − 𝑀 , 𝑘 = 0,1, … 𝑀 − 1
𝑀
𝑛=0

Cuando α=0, las ecuaciones equivalen a la DFT, IDFT. Si h(n) es real se cumple:
𝐻(𝑘 + 𝛼) = 𝐻 ∗ (𝑀 − 𝐾 − 𝛼)
Respuesta impulsional es: ℎ(𝑛) = ±ℎ(𝑀 − 1 − 𝑛)

3.3. Diseño de filtros Óptimos:


Se le asigna ese nombre cuando el error de aproximación entre la frecuencia
deseada y la actual se distribuye equitativamente a lo largo de las bandas de paso y
rechazo.
Las frecuencias de corte para pasa banda (wp) y rechaza banda(ws), el filtro
satisface:
1 − 𝛿1 ≤ 𝐻𝑟(𝑤) ≤ 1 + 𝛿1
−𝛿2 ≤ 𝐻𝑟(𝑤) ≤ 𝛿2
4 Filtros FIR Cap.1

De esta manera δ1 representa el rizado de la banda de paso y δ2 la atenuación o


rizado de la banda de rechazo.
Utilizando filtros simétricos y antisimetricos de fase lineal puede demostrarse que
𝐻𝑟(𝑤) = 𝑄(𝑤)𝑃(𝑤)
El error de aproximación se define como:

𝐸(𝑤) = 𝑊(𝑤)[𝐻𝑑𝑟(𝑤) − 𝐻𝑟(𝑊)]


= 𝑊(𝑤)[𝐻𝑑𝑟(𝑤) − 𝑄(𝑤)𝑃(𝑤)]
𝐻𝑑𝑟(𝑤)
= 𝑊(𝑤)𝑄(𝑤) [ − 𝑃(𝑊)]
𝑄(𝑤)

Donde W(w) es una función de ponderación de error que usualmente se define como
𝛿1
𝑊(𝑤) = { 𝛿2 𝑤 𝑒𝑛 𝑙𝑎 𝑏𝑎𝑛𝑑𝑎 𝑑𝑒 𝑝𝑎𝑠𝑜
1 𝑤 𝑒𝑛 𝑙𝑎 𝑏𝑎𝑛𝑑𝑎 𝑑𝑒 𝑟𝑒𝑐ℎ𝑎𝑧𝑜

4. Estructuras de Filtros FIR:


3.1 Estructura En Forma Directa:

Se obtiene por derivación directa de la ecuación en diferencias:


𝑀−1

𝑦(𝑛) = ∑ ℎ(𝑘)𝑥(𝑛 − 𝑘)
𝑘=0

Esta estructura requiere de M-1 posiciones de memoria para almacenar dichas entradas
anteriores y tiene una complejidad de M multiplicaciones y M-1 sumas para cada salida. Dichas
salidas constan de una combinación lineal ponderadda de M-1 valores anteriores de la entrada
y el valor actual de la entrada poderada.

3.2. Estructura en forma de cascada:

Se obtiene de la forma natural de la función de transferencia dada por:


𝑘

𝐻(𝑧) = ∏ 𝐻𝑘(𝑧)
𝑘=1

Donde:

𝐻𝑘(𝑧) = 𝑏𝑘0 + 𝑏𝑘1𝑧 −1 + 𝑏𝑘2𝑧 −2 𝑘 = 1,2, … . . , 𝑘


K es la parte entera de M+1/2

El parámetro del filtro puede ser distribuido en todas las secciones del filtro, asi como también
puede ser asignado a una sola sección del filtro.

3.3. Estructura de muestreo en frecuencia:


5 Filtros FIR Cap.1

Son estructuras alternativas para filtros FIR en las que los parámetros se caracterizan al filtro
con valores de respuesta en frecuencia deseada en lugar de las respuesta impulso h(n).Podemos
describir la respuesta en frecuencia como
𝑀−1

𝐻(𝑧) = ∑ ℎ(𝑛)𝑒 −𝑗𝑤𝑛


𝑛=0

3.4. Estructura en celosía:

Tambien llamado realización en celosía. Se emplean en procesado digital de voz y en la


implementación de filtros adaptativos.

𝐻𝑚(𝑧) = 𝐴𝑚(𝑧) 𝑚 = 0,1 … . . 𝑀 − 1


Donde Am(z) es el polinomio:
𝑚

𝐴𝑚 (𝑧) = 1 + ∑ 𝛼𝑚(𝑘)𝑧 −𝑘 𝑚≥1


𝑘=1

EJERCICIOS PROPUESTOS:

EJERCICIO Nº1:

Para la eliminación de los ruidos de alta frecuencia, como el electromiográfico,


se usaron filtros paso-bajos, con frecuencias esquinas de aproximadamente 40
Hz en la banda de paso y 60 Hz en la banda de parada. Se tiene en cuenta que
la tolerancia en la banda de paso no debe ser mayor que 0,5 dB y la mínima
atenuación en la banda de parada debe ser 30 dB.
Utilizando la herramienta fdatool para diseño y análisis de filtros con MATLAB se
obtiene un filtro FIR. En este caso, se utilizó la ventana de Kaiser, que asegura
respuesta al impulso simétrica y retardo de grupo lineal, proporcionando una
respuesta de fase perfectamente lineal y contribuye a una menor distorsión en la
señal filtrada.

f = [0 0.4 0.6 1]; % Frequency breakpoints


m = [1 1 0 0]; % Magnitude breakpoints
b = fir2(30,f,m); % Frequency sampling-based FIR filter design
[h,w] = freqz(b,1,128); % Frequency response of filter
plot(f,m,w/pi,abs(h))
legend('Ideal','fir2 Designed')
title('Comparison of Frequency Response Magnitudes')
6 Filtros FIR Cap.1

EJERCICIO Nº2

Diseñe el filtro de escalera del Ejemplo 7.26 utilizando el enfoque de la ventana


Kaiser las especificaciones son

Banda 1: 0 ≤ ω ≤ 0,3π, ganancia ideal = 1, δ1 = 0,01


Banda 2: 0.4π ≤ ω ≤ 0.7π, ganancia ideal = 0.5, δ2 = 0.005
Banda 3: 0.8π ≤ ω ≤ π, ganancia ideal = 0, δ3 = 0.001

clc; close all;


%Especificaciones:
w1 = 0.0*pi; % lower Band-1 edge
w2 = 0.3*pi; % upper Band-1 edge
w3 = 0.4*pi; % lower Band-2 edge
w4 = 0.7*pi; % upper Band-2 edge
w5 = 0.8*pi; % lower Band-3 edge
w6 = 1.0*pi; % upper Band-3 edge
delta1 = 0.01; % Band-1 ripple
delta2 = 0.005; % Band-2 ripple
delta3 = 0.001; % Band-3 ripple
% Determine Kaiser Window Parameters
delta = min([delta1,delta2,delta3]); tr_width = min([w3-w2,w5-w4]);
[Rp,As] = delta2db(delta1,delta3);
M = ceil((As-7.95)/(2.285*tr_width)+1)+1; M = 2*floor(M/2)+1, % choose
odd M
M = 75
n = [0:1:M-1]; beta = 0.1102*(As-8.7); w_kai = (kaiser(M,beta)); %
Kaiser Window
% Determine Ideal Impulse Response
wc1 = (w2+w3)/2; wc2 = (w4+w5)/2;
7 Filtros FIR Cap.1

hd = ideal_lp(wc1,M)+0.5*(ideal_lp(wc2,M)-ideal_lp(wc1,M));

Hs_2 = stem(n,w_kai,'filled'); set(Hs_2,'markersize',3);


axis([-1,M,-0.1,1.1]); xlabel('n'); ylabel('w_{ham}(n)');
title('Kaiser Window');
set(gca,'XTick',[0;M-1],'fontsize',8);
set(gca,'YTick',[0;1],'fontsize',8);

clc; close all;


%% Specifications:
w1 = 0.0*pi; % lower Band-1 edge
w2 = 0.3*pi; % upper Band-1 edge
w3 = 0.4*pi; % lower Band-2 edge
w4 = 0.7*pi; % upper Band-2 edge
w5 = 0.8*pi; % lower Band-3 edge
w6 = 1.0*pi; % upper Band-3 edge
delta1 = 0.01; % Band-1 ripple
delta2 = 0.005; % Band-2 ripple
delta3 = 0.001; % Band-3 ripple
%
% Determine Kaiser Window Parameters
delta = min([delta1,delta2,delta3]); tr_width = min([w3-w2,w5-w4]);
[Rp,As] = delta2db(delta1,delta3);
M = ceil((As-7.95)/(2.285*tr_width)+1)+1; M = 2*floor(M/2)+1, % choose odd M
M=
75
n = [0:1:M-1]; beta = 0.1102*(As-8.7); w_kai = (kaiser(M,beta))’; % Kaiser Window
% Determine Ideal Impulse Response
wc1 = (w2+w3)/2; wc2 = (w4+w5)/2;
8 Filtros FIR Cap.1

hd = ideal_lp(wc1,M)+0.5*(ideal_lp(wc2,M)-ideal_lp(wc1,M));
% Determine the Window Design Impulse Response and Frequency Response
h = hd .* w_kai; [db,mag,pha,grd,w] = freqz_m(h,1); delta_w = pi/500;
Asd = floor(-max(db(ceil(w5/delta_w)+1:501))), % Actual Attn
Asd =
65
[Hr,w,P,L] = Ampl_res(h);
%
%% Filter Response Plots
Hf_1 = figure(’Units’,’inches’,’position’,[1,1,7,4],’color’,[0,0,0],...
’paperunits’,’inches’,’paperposition’,[0,0,7,4]);
set(Hf_1,’NumberTitle’,’off’,’Name’,’P7.15’);
subplot(’position’,[0.08,0.6,0.25,0.35]);
Hs_1= stem(n,hd,’filled’); set(Hs_1,’markersize’,3);
title(’Ideal Impulse Response’); set(gca,’XTick’,[0;M-1],’fontsize’,8)
axis([-1,M,min(hd)-0.1,max(hd)+0.1]); xlabel(’n’); ylabel(’h_d(n)’);
subplot(’position’,[0.41,0.6,0.25,0.35]);
Hs_2 = stem(n,w_kai,’filled’); set(Hs_2,’markersize’,3);
axis([-1,M,-0.1,1.1]); xlabel(’n’); ylabel(’w_{ham}(n)’); title(’Kaiser Window’);
set(gca,’XTick’,[0;M-1],’fontsize’,8); set(gca,’YTick’,[0;1],’fontsize’,8);
subplot(’position’,[0.74,0.6,0.25,0.35]);
Hs_3 = stem(n,h,’filled’); set(Hs_3,’markersize’,3);
title(’Actual Impulse Response’); set(gca,’XTick’,[0;M-1],’fontsize’,8);
axis([-1,M,min(hd)-0.1,max(hd)+0.1]); xlabel(’n’); ylabel(’h(n)’);
subplot(’position’,[0.09,0.1,0.4,0.35]);
plot(w/pi,db,’linewidth’,1); title(’Magnitude Response in dB’);
axis([0,1,-As-30,5]); xlabel(’\omega/\pi’); ylabel(’Decibels’);
set(gca,’XTick’,[0;0.3;0.4;0.7;0.8;1]);
set(gca,’YTick’,[-Asd;0]); set(gca,’YTickLabel’,[’ 65’;’ 0 ’]);grid;
subplot(’position’,[0.59,0.1,0.4,0.35]);
plot(w/pi,Hr,’linewidth’,1); title(’Apmlitude Response’);
axis([0,1,-0.05,1.05]); xlabel(’\omega/\pi’); ylabel(’Amplitude’);
set(gca,’XTick’,[0;0.3;0.4;0.7;0.8;1]);
set(gca,’YTick’,[0;0.5;1]); grid;

EJERCICIO Nº3
Diseñe un filtro pasa banda de fase lineal utilizando la técnica de diseño de
ventanas de Hanning. Las especificaciones son:

borde inferior de la banda de retención: 0.2π


borde superior de la banda de retención: 0.75π
borde inferior de la banda de paso: 0.35π
borde superior de la banda de paso: 0.55π
Rp = 0.25 dB
As = 40 dB

clc; close all;


%% Specifications:
ws1 = 0.2*pi; % lower stopband edge
wp1 = 0.35*pi; % lower passband edge
wp2 = 0.55*pi; % upper passband edge
ws2 = 0.75*pi; % upper stopband edge
9 Filtros FIR Cap.1

Rp = 0.25; % passband ripple


As = 40; % stopband attenuation
%
% Select the min(delta1,delta2) since delta1=delta2 in windodow design
[delta1,delta2] = db2delta(Rp,As);
if (delta1 < delta2)
delta2 = delta1; disp(’Delta1 is smaller than delta2’)
[Rp,As] = delta2db(delta1,delta2)
end
%
tr_width = min((wp1-ws1),(ws2-wp2));
M = ceil(6.2*pi/tr_width); M = 2*floor(M/2)+1, % choose odd M
M=
43
n = 0:M-1; w_han = (hann(M))’;
wc1 = (ws1+wp1)/2; wc2 = (ws2+wp2)/2;
hd = ideal_lp(wc2,M)-ideal_lp(wc1,M); h = hd .* w_han;
[db,mag,pha,grd,w] = freqz_m(h,1); delta_w = pi/500;
Rpd = -min(db((wp1/delta_w)+1:(wp2/delta_w)+1)), % Actual passband ripple
Rpd =
0.1030
Asd = floor(-max(db(1:(ws1/delta_w)+1))), % Actual Attn
Asd =
44
%
%% Filter Response Plots
Hf_1 = figure(’Units’,’inches’,’position’,[1,1,6,4],’color’,[0,0,0],...
’paperunits’,’inches’,’paperposition’,[0,0,6,4]);
set(Hf_1,’NumberTitle’,’off’,’Name’,’P7.9’);
subplot(2,2,1); Hs_1= stem(n,hd,’filled’); set(Hs_1,’markersize’,3);
title(’Ideal Impulse Response’); set(gca,’XTick’,[0;M-1],’fontsize’,8)
axis([-1,M,min(hd)-0.1,max(hd)+0.1]); xlabel(’n’); ylabel(’h_d(n)’)
subplot(2,2,2); Hs_1 = stem(n,w_han,’filled’); set(Hs_1,’markersize’,3);
axis([-1,M,-0.1,1.1]); xlabel(’n’); ylabel(’w_{han}(n)’); title(’Hann Window’);
set(gca,’XTick’,[0;M-1],’fontsize’,8); set(gca,’YTick’,[0;1],’fontsize’,8)
subplot(2,2,3); Hs_1 = stem(n,h,’filled’); set(Hs_1,’markersize’,3);
title(’Actual Impulse Response’); set(gca,’XTick’,[0;M-1],’fontsize’,8)
axis([-1,M,min(hd)-0.1,max(hd)+0.1]); xlabel(’n’); ylabel(’h(n)’)
subplot(2,2,4); plot(w/pi,db,’linewidth’,1); title(’Magnitude Response in dB’);
axis([0,1,-As-30,5]); xlabel(’\omega/\pi’); ylabel(’Decibels’)
set(gca,’XTick’,[0;0.2;0.35;0.55;0.75;1])
set(gca,’XTickLabel’,[’ 0 ’;’0.2 ’;’0.35’;’0.55’;’0.75’;’ 1 ’],’fontsize’,8)
set(gca,’YTick’,[-40;0]); set(gca,’YTickLabel’,[’ 40’;’ 0 ’]);grid
10 Filtros FIR Cap.1

También podría gustarte