Professional Documents
Culture Documents
Filtrado de Audio 2a Parte - Filtro Notch en Matlab
Filtrado de Audio 2a Parte - Filtro Notch en Matlab
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
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.
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);
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)
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.
(2) Signal Processing First.- J. McClellan – R. Schafer – M. Yoder - Pearson Education, Inc. 2003