Sie sind auf Seite 1von 4

Filtro digital de audio butterworth utilizando

MATLAB dispone de funciones que facilitan el diseo de filtros, tanto analgicos


como digitales. Lo primero que necesitamos saber a la hora de disear un filtro
Butterworth es conocer el orden, para ello disponemos de la funcin [N,Wn]=
buttord(Wp,Ws,Rp,Rs) donde:
Wp es la frecuencia de corte normalizada

Ws es la frecuencia de atenuacin normalizada

Rp la atenuacin para la frecuencia de corte en dB

Rs la atenuacin para la banda rechazada en dB

Funcin de transferencia para un filtro pasa bajas

Wp y Ws deben ser entre (0 y 1) siendo 1 la frecuencia de Nyquist( esto nos dice que
hay que normalizar las frecuencias contra la frecuencia de Nyquist). la salida N es el
orden del filtro y Wn la frecuencia de 3dB. Si queremos encontrar el orden del filtro
pero analgico es tan sencillo como modificar la funcin [N,Wn]=
buttord(Wp,Ws,Rp,Rs,'s') aqu las frecuencias de Wp y Ws pueden toma
cualquier valor en radianes.
Lo siguiente es calcular los coeficientes del filtro, esto lo haremos utilizando la
funcin[B,A] = butter(N,Wn) B y A son los coeficientes del numerador y
denominador respectivamente. Y como es lgico N es el orden del filtro y Wn la
frecuencia de corte, calculadas previamente. Adems es necesario especificar si
queremos un filtro pasa altas o pasa bajas, rechaza banda o, pasa bandas. Esto lo
haremos de la siguiente manera:

Filtro pasa bajas:


[B,A] = butter(N,Wn,'low')
Filtro pasa altas:
[B,A] = butter(N,Wn,'high')

Filtro pasa bandas:


[B,A] = butter(N,[W1 W2])
Wn en este caso es un vector que especifica las frecuencias de pasabanda.
Filtro rechaza banda:
[B,A] = butter(N,[W1 W2],'stop')
Aadiendo a los comandos anteriores la opcin 's', los vectores B y A son los
coeficientes del filtro analgico correspondiente. Sigue siendo valido lo que se ha
mencionado con el handicap que Wn no est limitada a un valor dentro del rango
(0,1).
Veamos un ejemplo con un audio DEMO de MATLAB.
load handel.mat
y = y';
Wp = 1000/Fs; %%Frecuencia de corte normalizada
Ws = 2000/Fs; %%Frecuencia de atenuacin normalizada
[n,Wn] = buttord(Wp,Ws,3,60); %%orden de butterworth
[b,a] = butter(n,Wn,'low');
%%coeficientes de butterworth
yh = filter(b, a, y);
%%Filtro de la seal
L=length(y);
NFFT = 2^nextpow2(L); % Siguiente potencia de 2 del vector y
f = Fs/2*linspace(0,1,NFFT/2+1);
figure(1)
yf=fft(y,NFFT)/L;
plot(f,2*abs(yf(1:NFFT/2+1)))
title('Espectro de la seal')
xlabel('Frecuencia [Hz]')
grid on
figure(2)
yf2=fft(yh,NFFT)/L;
plot(f,2*abs(yf2(1:NFFT/2+1)))
title('Espectro de la seal filtrada')
xlabel('Frecuencia [Hz]')
grid on
figure(3)
[H,W] = freqz(b,a,1000);
plot(Fs.*W./pi,abs(H))
title('Respuesta en frecuencia del filtro')
xlabel('Frecuencia [Hz]')
grid on
sound(yh)
sound (y)

La funcin [H,W] = freqz(b,a,N) retorna el vector H de N-puntos de la


respuesta en frecuencia y el vector de frecuencia de N-puntos W en
radianes/muestra del filtro.
Observen unas grficas del filtro que acabamos de realizar

Si queremos cargar un audio propio, primero debemos guardarlo en la carpeta


matlab de mis documentos y utilizaremos la instruccin [y Fs]=
wavread('nombredelaudio.wav')
Estos filtros son muy tiles para eliminar componentes de ruido de alta y baja
frecuencia que se introducen por interferencia o mala calidad de equipos.

Das könnte Ihnen auch gefallen