You are on page 1of 4

Filtrado de audio 2a parte - Filtro notch en Matlab

Por Sigfredo Pagel

En esta segunda parte que es una continuación del trabajo del número anterior, voy a mostrar como
se aplica el filtrado notch a una señal real. En este caso utilizaré un trozo de una pieza musical que
he grabado durante unos 30 segundos. Se trata de música de Strauss interferida por un fuerte tono
de 400 Hz.
El trabajo lo iré desarrollando con el mismo criterio seguido en la 1ª parte mencionando las
diferencias que se produzcan en el transcurso del tutorial. El filtro digital notch permite eliminar un
tono no deseado “limpiando” la señal de audio; en este ejemplo se eliminará un tono espurio de
400Hz que aparece en la pieza musical; la grabación que dura poco más de 30 s es del tipo
monoaural.
1.- Los datos.- Comenzaremos con nuestros datos:
fs = 44100; % frecuencia de muestreo de la pieza musical
N = 44100; % numero de muestras
fx = 400; % frecuencia de ranura
fq = fs/2; % frecuencia de Nyquist
fn = fx/fq; % frecuencia normalizada f_ranura/f_Nyquist
ar = 0.01; % ancho ranura (notch)

En este caso se utiliza una frecuencia de muestro que coincide con la utilizada en la grabación del
fichero wav. Además como estamos tratando con una multifrecuencia debemos “afilar” bastante
más el Notch que anteriormente; un valor de ar=0.01 me pareció adecuado y posteriormente la
simulación y el audio me dieron la razón.
2.- Los ceros y polos del notch.- En este caso aplico la misma metodología que en la primera
parte y sólo expondré los resultados de la gráfica:
Fig. 1.- Diagrama de polos y ceros

Aquí la única diferencia mencionable es que la posición los polos y ceros es casi coincidente cosa
que se debe a que hemos elegido un ar=0.01 mucho más estrecho que en mi anterior tutorial.

1
3.- La respuesta del filtro.- El siguiente paso consiste en trazar la característica del filtro notch
donde los valores de a y b se calculan de acuerdo con la metodología de la 1ª parte y valen:
a =1.0000 -1.9768 0.9801; b =1.0000 -1.9968 1.0000

y con ellos se obtiene la transferencia mediante la función Matlab,


[h,f] = freqz(b, a, N/2+1, fs);
plot(f,20*log10(abs(h));
y así queda graficada en dB la transferencia del filtro:

Fig. 2.- La respuesta del filtro con la ranura o notch en 400 Hz.

Como se ve la ranura (o notch) es mucho más aguda que en la primera parte de mi tutorial anterior
como es lógico dado que el valor de “ar” es ahora mucho menor.
4.- Lectura de la señal: Veamos ahora nuestra señal en el lenguaje Matlab:
% Señal original
fichero = ('C:\Mlabfile\audio\strauss30dB.wav'); % Fichero wav original
[y, fs] = audioread(fichero); % función lectura ML de la señal

En esta parte del trabajo el programa lee el fichero de audio con “audioread” y arroja los valores de
“y” de nuestra señal (donde 30 segundos dan para mucho) y nos da también la frecuencia de
muestreo fs como ya adelantara al imponer los datos puesto que soy el autor de la grabación.
Es de notar que el fichero (file) debe escribirse con el “path” integro de la ubicación del fichero.
En la siguiente Fig. 3 voy a graficar la señal original en el tiempo primero y luego en el dominio de
la frecuencia con:
plot(t, y) % representación en el tiempo
fft_signal(y,fs); % representación en el dominio de la frecuencia

Es de notar que la función fft_signal, no forma parte de las funciones Matlab pero puede
tomarse de la siguiente Web:

http://www.academia.edu/4976118/
Laboratorio_N_o_3_Transformada_de_Fourier_y_sus_aplicaciones_en_filtrado

2
5.- Gráficas de la señal original.- En este caso he puesto ambas gráficas en la misma figura
cosa que nos permitirá extraer unas cuantas conclusiones sobre nuestra señal musical. Con fines
ilustrativos la gráfica temporal sólo muestra los primeros 5 segundos de la señal total.

Fig. 3.- Representación de la señal original en el tiempo y en frecuencia

Al observar la señal en el dominio de la frecuencia se ve nítidamente el fuerte tono de 400 Hz sobre


el espectro de la señal original. En la parte superior, respuesta temporal, he dejado libre de música
los primeros 0.6 segundos donde se puede apreciar la interferencia en ese lapso.

6.- Acción de filtrado.- Para obtener la señal filtrada “u” se aplicarán, luego de la lectura de la
señal original con audioread, las siguientes líneas del lenguaje Matlab:
u = filter(b,a,y); % la señal filtrada
T = length(y)/fs; % período de la señal
t = linspace(0,T,T*fs); % eje de tiempos

La función “filter” de Matlab nos permite obtener la señal filtrada “u” en correspondencia con el
eje temporal para su representación.
Con todos estos elementos ya podemos graficar la señal filtrada en el dominio del tiempo donde se
podrá ver que la gruesa barra horizontal (la sinusoide de 400 Hz) entre 0 y 0.6 s se convierte en una
fina línea, es decir una sinusoide de amplitud cero.
plot(t, u);

Y también en el dominio de la frecuencia utilizando la función antes mencionada:


fft_signal(u, fs); % archivar en la carpeta de este proyecto

Por mi parte voy a representar de forma comparativa el espectro de la señal original y el espectro de
la señal filtrada. La representación en el tiempo no tiene mayor interés desde el punto de vista de lo
que quiero mostrar.

3
7.- Espectro comparativo antes y después del filtrado.- En la Fig. 4 muestro ambos
espectros. En la parte inferior se aprecia la efectividad del filtro habiendo anulado totalmente la
interferencia, por lo demás la señal no ha sufrido alteraciones importantes como surge de la
comparación de ambas gráficas y de escuchar el sonido.
Fig. 4.- Espectro comparativo que muestra el resultado del filtrado en la parte inferior

La señal, antes y después del filtrado respectivamente pueden escucharse de a una por vez con:
sound(0.5*y,fs)
sound(0.5*u,fs)

8.- Consideraciones finales.-


En este tutorial pudo apreciarse que el filtro programado en la 1ª parte es válido para eliminar
cualquier interferencia de banda estrecha que en este caso se trataba de un tono de 400 Hz que
interfería una pieza musical multifrecuencia en la banda de audio.

Se ha observado también que el filtro notch permite eliminar la frecuencia perturbadora sin
prácticamente afectar la señal útil. La frecuencia de muestreo viene fijada en este caso por la
grabación de la pieza musical siendo fs=44100 un valor típico en las grabaciones musicales.

Es de notar que la perturbación la introduje exprofeso para efectuar este análisis. Se observó
también que al requerirse un filtro muy agudo los polos y los ceros de la transferencia en el plano z
se encuentran prácticamente superpuestos. En caso de requerirse un ancho de eliminación algo
mayor simplemente se incrementa el coeficiente ar.

Para la bibliografía recomiendo los mismos textos de la 1ª parte:


(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

You might also like