Está en la página 1de 4

Filtrado de audio 1a parte - Filtro notch en Matlab

Por Sigfredo Pagel

Hace ya un tiempo que publicara en esta misma revista el diseño de un filtro de banda eliminada
analógico activo y ya era hora de que explicara cómo puede hacerse esto mismo en forma digital.
Este trabajo consiste en el desarrollo de un software en el entorno Matlab que sea capaz de eliminar
una frecuencia específica y lo haré a través de un ejemplo; en este caso pretendo eliminar el
zumbido de 50Hz, aunque con mínimas modificaciones numéricas puede aplicarse a cualquier
frecuencia no deseada dentro del rango de audio.
Este tutorial está destinado no sólo a programar el filtro sino también a mostrar su funcionamiento
mediante su simulación en Matlab. Para conseguir este objetivo he compuesto una señal con sólo
dos frecuencias pero se puede aplicar a una señal multifrecuencia cualquiera en el rango de audio,
incluso una pieza musical con una contaminación de zumbido o de cualquier otra señal no deseada
con sólo introducir dicha frecuencia en el programa.
1.- La señal: la señal que propongo es la suma de una sinusoide de 100 Hz con una de 50 Hz y es
esta última la que quiero eliminar. La señal propuesta en el lenguaje Matlab sería,

% Señal a filtrar, "y"


f1 = 50; % la componente fx a eliminar
f2 = 100; % el resto de la señal aplicada
dt = 1/fs; % incremento temporal
t = 0:dt:100; % El eje de tiempos
y = 0.5*sin(2*pi*f1*t) + sin(2*pi*f2*t); % La señal original a filtrar

y si la graficamos: plot(1000*t,y), la podemos visualizar (con “t” en ms) en la Fig. 1.

Fig. 1.- La señal original propuesta.

Si se observa la gráfica surge de inmediato que la duración de un ciclo completo de la señal


compuesta es de 20 ms y lo determina la señal de frecuencia más baja: 50 Hz (1/f=20 ms).
2.- Los datos: En realidad, a la hora de programar, se comenzaría por este paso:
fs = 960*2; % frecuencia de muestreo
N = 1920; % numero de muestras
fx = 50; % frecuencia de ranura
fq = fs/2; % frecuencia de Nyquist
fn = fx/fq; % frecuencia fx normalizada, f_ranura/f_Nyquist
ar = 0.08; % ancho ranura en eliminación (notch)

1
3.- Ceros y polos: habrá que determinar ahora los ceros y los polos de la función transferencia que
sería el 2º paso y lo realizo mediante dos exponenciales de la siguiente manera:

% Cálculo de los ceros notch


z = [exp(1i*pi*fn), exp(-1i*pi*fn)];
% Cálculo de los polos notch
p = (1-ar)*z;

Para ubicar los polos y ceros en el “plano complejo z” referidos al círculo unitario utilizo la función
“zplane” de Matlab aunque dada la “poca gracia estética” de esta función del entorno, he diseñado
mi propia función “pinta_z_p” sólo para ilustrar este tutorial a fin de que la gráfica fuera más
presentable, aunque esta última función no forma parte de este tutorial.
Para ejecutar la función zplane tanto la matriz de los polos como la de los ceros se requiere de una
transposición, como es dable observar de seguido, siempre en el lenguaje Matlab:
% Diagrama de polos y ceros del filtro
zplane(z.', p.'); % plano de ceros y polos del filtro notch
a = poly(p); % polos
b = poly(z); % ceros

Los coeficientes “a” y “b” se utilizarán en el proceso de filtrado, (5): u = filter(b,a,y)

Fig. 2.- Polos y ceros en el “plano complejo z”

2
En la Fig. 2, se observa la proximidad entre los polos y ceros de la transferencia que se debe a la
elección del ancho de ranura ar=0.08, si se aumentara este ancho, por ejemplo ar=0.2 los polos en
la Fig. 2 se irían desplazando apreciablemente hacia el centro del círculo, pero la señal filtrada se
vería seriamente comprometida por el ancho excesivo de filtrado.
3.- Respuesta del filtro: La respuesta del filtro resulta de la implementación de la función Matlab
en su versión,
“[h,f] = freqz(b,a,N/2+1,fs)”
También podría haberse utilizado la versión “freqz(b,a,fs)” que nos hubiera dado en forma
directa incluso el diagrama de fase, ejercicio que dejo para el lector.
De esta forma resulta un filtro “muy agudo” cuya característica gráfica exhibo en la Fig. 3.

Fig. 3.- Respuesta del filtro diseñado con MatLab

Como dije antes, a fin de afectar lo menos posible a la señal el ancho de eliminación o ranura de
eliminación será muy estrecho, ar=0.08, como se observó en la especificación del filtro.
5.- Proceso de filtrado: Corresponde ahora mostrar el proceso completo de filtrado a través de
la simulación en Matlab, para conseguir el filtrado usaremos la siguiente función “u” de Matlab y
la graficamos en este paso:
% La señal filtrada
u = filter(b,a,y); % señal filtrada usa los coef b,a de los polos y ceros
plot(1000*t,u) % Gráfica en el tiempo. 1000*t --> t(mili-segundos)
% que es como gradúo el eje x.
En la Fig. 4 se observa en la parte superior la señal original y en la parte inferior la señal recuperada
3
mediante filtrado notch.

Fig. 4.- Gráfica comparativa señal original y filtrada notch

6.- Conclusiones: En la señal filtrada salta a la vista que en el intervalo de tiempo entre 20 y 40
ms y sucesivos caben exactamente dos ciclos completos de la señal recuperada y una vez superado
el tiempo de estabilización de los primeros ciclos la duración de un ciclo es de 10 ms, es decir
f=1/0.010=100 Hz, es así que aparece recuperada nuestra componente de f2=100 Hz de la señal
compuesta original. En el caso de una señal multifrecuencia, como una pieza musical por ejemplo,
recuperaríamos toda la señal excepto la frecuencia perturbadora que quedará eliminada por el filtro.
Se observa que la señal filtrada prácticamente conserva su amplitud original entre -1 y +1 como se
ve en la señal propuesta donde la componente deseada f2 = 100 Hz presenta amplitud unitaria:
“y = 0.5*sin(2*pi*f1*t)+sin(2*pi*f2*t)”.
El objetivo de este tutorial ha sido demostrativo de allí la elección de una señal lo más sencilla
posible para poder observar claramente el proceso de filtrado digital, una vez simulado el sistema
como muestro en la Fig. 4.
De haber impuesto un ancho de eliminación mayor la señal filtrada perdería amplitud de forma
apreciable en la medida que el filtro “machaca” también la componente útil de la señal.

7.- Bibliografía: Para información adicional se puede recurrir a:


(1) Digital Signal Processing Using MATLAB ® , Third Edition, Vinay K. Ingle and John G. Proakis - Copyright 2010
Cengage Learning.

(2) Signal Processing First.- J. McClellan – R. Schafer – M. Yoder - Pearson Education, Inc. 2003

___

También podría gustarte