Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Si tenemos una señal analógica compuesta de varias componentes y deseamos eliminar una, varias de
ellas o toda una banda, una opción es emplear filtros analógicos mediante hardware. Según las
componentes que deseemos eliminar, podremos hacer uso de los filtros analógicos básicos: pasa-bajas
(low pass o LP), pasa-altas (high pass o HP), pasa banda (band pass o BP), elimina banda (notch o reject
band o RB, notch significa muesca o diente).
Sin embargo, un filtro real presenta una caída distinta a la vertical y presenta rizado en la banda de
paso y/o en la de supresión, por ejemplo, para un filtro pasa bajas tendríamos:
TIPOS DE FILTROS EN FUNCIÓN DEL RIZADO
Otra manera de verlo es qué tanto se parece a uno ideal – gráfica anterior de filtro ideal vs real, entre
mayor sea el valor del factor de calidad, mayor será la selectividad del filtro. En otras palabras, la calidad
de un filtro viene dada por: a) la cantidad de rizado que tenga tanto en la banda de paso como en la de
supresión y b) por la pendiente. Un filtro será de mejor calidad mientras tenga menor rizado y pendiente
más brusca.
Esta calidad del filtro depende de varios factores, entre ellos: a) si el filtro es pasivo o activo, b) del orden
del filtro, c) de la calidad de los mismos componentes, etc.
En cuanto a la presencia de rizado, lo mejor será tener un filtro máximamente plano de manera que se
asegura que no se introduzcan componentes debidas a la frecuencia de este rizado en la banda de
supresión.
Banda de paso
Rizado en la B.P
Pendiente
Rizado en la B. Supresión
B. Supresión
Como se ha venido diciendo, toda la tecnología actual es digital (uC, DSPs, FPGA, PC) y por esta razón,
los algoritmos de procesamiento han sido desarrollados de forma discreta (trabajando a nivel de muestras),
este tema no es la excepción.
Un filtro digital, igual que un analógico, modifica el contenido espectral de una señal y en este caso
opera sobre señales discretas y cuantificadas, implementado con tecnología digital, bien como un circuito
digital o como un programa informático.
Comúnmente se usa para atenuar o amplificar algunas componentes de frecuencias. Por ejemplo, se
puede implementar un sistema para controlar los tonos graves y agudos de cualquier sistema de audio.
Un filtro digital está dado por un SLI cuya ecuación general en el dominio del tiempo es:
Donde:
yn → es la salida actual
Si considerásemos una señal con varias componentes y aplicásemos un SLI con coeficientes al azar,
veríamos que la señal resultante habría sido afectada eliminando algunas de sus componentes. Esto indica
que un SLI actúa como un filtro digital y su comportamiento (componentes que elimine) dependerá de
los coeficientes elegidos:
Laticce
Varios en cascada
Varios en paralelo
IIR es una sigla en inglés para Infinite Impulse Response o Respuesta infinita al impulso. Se trata de
un tipo de filtros digitales en el que, como su nombre lo indica, si la entrada es una señal impulso, la salida
tendrá un número infinito de términos no nulos, es decir, nunca vuelve al reposo.
Ya que los coeficientes a y b son los que definen el comportamiento del filtro, el diseño consiste en
calcularlos.
…..
DISEÑO DE FILTROS DIGITALES IIR MEDIANTE FUNCIÓN DIRECTA DE MATLAB
Como ya se comentó anteriormente, el tipo de filtro que se obtenga, depende del valor de los coeficientes,
entonces ¿cómo obtener los coeficientes necesarios para conseguir un filtro deseado?
Este es justamente el problema del diseño de filtros digitales que se basa en una serie de algoritmos que
resuelven el problema de cómo relacionar los coeficientes del SLI con el comportamiento del filtro, por
ejemplo, para un filtro pasa bajas, pasa banda, etc.
PROCEDIMIENTO:
Paso 1. Obtener el arreglo de coeficientes [A] y [B], por medio de un algoritmo determinado. En el caso de
IIR, se emplea el algoritmo Yule-Walker que en Matlab es implementado mediante la siguiente instrucción:
Donde:
m vector de ganancias
GANANCIA
0.7
Para obtener el vector de frecuencia normalizada (respecto de Fmax), se toma la información solamente
de las esquinas que es donde ocurren cambios en el comportamiento del filtro:
Para obtener el vector de ganancias, se considera el par ordenado correspondiente a cada elemento del
vector de frecuencias anterior:
𝑚 = [0 0 1 1 0.7 0.7 3 3 0]
Si se considera un orden cualquiera (por ejemplo: n = 10), ya se tendría todos los argumentos de
entrada, veamos cómo quedaría:
n = 10;
Fmax = 1000;
𝑚 = [0 0 1 1 0.7 0.7 3 3 0]
[b,a] = yulewalk (n,f,m)
b = 0.7935 -0.9785 0.0318 0.4708 -0.6721 0.1129 0.2380 0.0156 -0.0735 0.2118 -0.1144
a = 1.0000 -0.2841 0.4873 0.1674 0.1548 -0.0811 0.3213 -0.0316 0.0865 0.0806 0.0198
Vemos que se han obtenido 11 coeficientes (siempre uno más que el orden definido).
Paso 2. Una vez que se tienen ya calculados los coeficientes de la ecuación general del SLI, ya se puede
calcular la salida:
Ya que y(n) depende de salidas anteriores hasta y(n-11) y de entradas hasta x(n-10) y, además, como solo
existen índices positivos en Matlab, para implementar un lazo for, se debería calcular la primera salida para
i=12 (en general sería para n + 2). Entonces, para la primera salida tendríamos:
Ya que todas las entradas x(1), x(2), …, x(n) son conocidas, estas no representan problema. Sin embargo,
la salidas anteriores y(1) hasta y(11) son desconocidas. Para determinarlas, se pueden considerar como
condiciones iniciales cero: (y(1) = y(2) = …= y(11) = 0):
Una forma de automatizar esto sería a partir del orden (n=10):
n = 10;
for i = 1:n+1
y(i) = 0;
end
También, por ejemplo, como condiciones iniciales se podría considerar:
y(1) = x(1), y(2) = x(2), …, y(11) = x(11).
Con esto, tendríamos y(1) hasta y(11) como condiciones iniciales y así ya podríamos calcular la salida
actual y(n), desde y(12) hasta y (length(xn)), correspondiente a cada una de las entradas de la señal
temporal xn. Como vemos, sería desde y(n+2) hasta y (length(xn)):
for k = n+2:length(xn)
end
FUNCIÓN FILTER: implementa por nosotros tanto las condiciones iniciales como el lazo for
implementados anteriormente.
Dados los arreglos de coeficiente (A y B), las condiciones iniciales CI y la señal temporal de entrada Xn, la
salida Y puede ser obtenida mediante la función filter de la siguiente manera:
Donde CI son las condiciones iniciales que normalmente valen cero. Se emplean cuando, por ejemplo
tenemos filtros en cascada: etapa1 (CI = 0) se obtienen Condiciones Finales que serían las CI para
la siguiente etapa y así sucesivamente.
EJERCICIO--- VERIFICACIÓN:
Repetir el ejemplo anterior empleando la función FILTER. Se debería obtener el mismo resultado.
Superponer las dos Y obtenidas.
…..
¿CUÁL ES LA RESPUESTA EN FRECUENCIA REAL DEL FILTRO OBTENIDO?
Sin parámetros de salida: Muestra el Diagrama de Bode (respuesta en magnitud y en fase en función
de la frecuencia). Se pueden visualizar N puntos.
……….
NO DEBER:
………
FIR:
Ventaja: son de fase lineal.
Desventaja: requieren orden MAYOR que los IIR
Solo en base a la experiencia: a mayor orden, mayor calidad, entonces no se debe calcular n.
Cálculo de coeficientes:
x=sin(2*pi*100*t)+sin(2*pi*120*t)+sin(2*pi*140*t);
a) Filtro pasa bajas de modo que solamente pase la señal de 100 Hz.
b) Filtro pasa banda de modo que solamente pase la señal de 120 Hz.
c) Filtro pasa altas de modo que solamente pase la señal de 100 Hz.
d) Filtro elimina banda de modo que se elimine el tono de 120Hz y queden los otros dos.
En cada caso, para aplicar el filtro encontrado, utilice la función filter y también hágalo mediante lazos
for encontrar la salida del SLI:
También en cada caso encuentre la respuesta real del filtro que confirme el correcto diseño de los
diferentes filtros.
Publique la señal de salida de los filtros tanto en el dominio del tiempo como de la frecuencia.
…….
COMO DEBER PONER LAS IMÁGENES DE LOS PUNTOS DE CORTE DE F EN CADA FILTRO
RESOLUCIÓN:
Primero generaremos una señal suma de tres tonos (100Hz, 120Hz y 140Hz)
clc,clear all, close all
%generacion señal suma de tres tonos
Fmax=160;
Fs=10*Fmax;
t=0:1/Fs:5;
x=sin(2*pi*100*t)+sin(2*pi*120*t)+sin(2*pi*140*t);
figure(1)
plot(t,x)
title('Señal Temporal: suma de 3 tonos')
axis([0 0.1 -3 3])
xlabel('Tiempo [seg]')
grid on
% aunque es ilógico aplicar welch, lo usaremos
% porque nos ahorra líneas de código (vector de frecuencias)
A) FILTRO PASA BAJOS: de modo que solamente pase la señal de 100 Hz.
…..
senial_filtrada_uno_for = DEBER
Respuesta real del filtro que confirme el correcto diseño de los diferentes filtros. Falta la freqZ
figure(3)
plot(t,senial_filtrada_uno)
title('Señal temporal Filtrada 100Hz')
hold on
plot(t,x,'r:')
legend('Señal 100Hz','Señal suma de 3 tonos')
axis([1.5 1.6 -3 3])
grid on
%espectro senal filtrada:
[P_welch_BB_filt,F_welch_BB_filt] = pwelch(senial_filtrada_uno,window,overlap,nFFT,Fs);
figure(4)
plot(F_welch_BB_filt,P_welch_BB_filt,'r')
title('Periodograma Señal Filtrada 100Hz')
axis([80 160 0 max(P_welch_BB_filt)])
grid on
FILTRO PASA BANDA
…..
Respuesta real del filtro que confirme el correcto diseño de los diferentes filtros.
senial_filtrada_dos=filter(b2,a2,x);
figure(5)
plot(t,senial_filtrada_dos)
title('Señal temporal Filtrada 120Hz')
hold on
plot(t,x,'r:')
legend('Señal 120Hz','Señal suma de 3 tonos')
axis([1.5 1.6 -3 3])
grid on
%espectro senal filtrada:
[P_welch_BB_filt2,F_welch_BB_filt2] = pwelch(senial_filtrada_dos,window,overlap,nFFT,Fs);
figure(6)
plot(F_welch_BB_filt2,P_welch_BB_filt2,'r')
title('Periodograma Señal Filtrada 120Hz')
axis([80 160 0 0.2])
grid on
Experimentar con el orden 8 la señal ya se escapa (poner imágenes)
…..
senial_filtrada_uno =
Respuesta real del filtro que confirme el correcto diseño de los diferentes filtros.
senial_filtrada_tres=filter(b3,a3,x);
figure(7)
plot(t,senial_filtrada_tres)
title('Señal temporal Filtrada 140Hz')
hold on
plot(t,x,'r:')
legend('Señal 140Hz','Señal suma de 3 tonos')
axis([1.5 1.6 -3 3])
grid on
%espectro senal filtrada:
[P_welch_BB_filt3,F_welch_BB_filt3] = pwelch(senial_filtrada_tres,window,overlap,nFFT,Fs);
figure(8)
plot(F_welch_BB_filt3,P_welch_BB_filt3,'r')
title('Periodograma Señal Filtrada 140Hz')
axis([80 160 0 max(P_welch_BB_filt3)])
grid on
…..
senial_filtrada_uno =
Respuesta real del filtro que confirme el correcto diseño de los diferentes filtros.
senial_filtrada_cuatro=filter(b4,a4,x);
figure(9)
plot(t,senial_filtrada_cuatro)
title('Señal temporal Filtrada 100 Hz y 140Hz ')
hold on
plot(t,x,'r:')
legend('Señal 100Hz+140Hz','Señal suma de 3 tonos')
axis([1.5 1.6 -3 3])
grid on
%espectro senal filtrada:
[P_welch_BB_filt4,F_welch_BB_filt4] = pwelch(senial_filtrada_cuatro,window,overlap,nFFT,Fs);
figure(10)
plot(F_welch_BB_filt4,P_welch_BB_filt4,'r')
title('Periodograma Señal Filtrada 100Hz y 140Hz')
axis([80 160 0 0.2])
grid on
DEBER:
VAYA JUNTANDO LAS TRES COMPONENTES Y REPITA LOS FILTROS ANTERIORES DE MODO
QUE PASE SOLAMENTE UNA DE LAS COMPONENTES A LA VEZ: LOS FILTROS CADA VEZ
DEBEN TENER MUCHA MAYOR CALIDAD PARA QUE CONSIGAN HACERLO BIEN. HÁGALO CON
TODOS LOS PASOS ANTERIORES SOLICITADOS (EN ROJO)