- Wp es la frecuencia de corte normalizada
- Ws es la frecuencia de atenuación normalizada
- Rp la atenuación para la frecuencia de corte en dB
- Rs la atenuación para la banda rechazada en dB
![]() |
Función 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 analógico es tan sencillo como modificar la función [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 función [B,A] = butter(N,Wn) B y A son los coeficientes del numerador y denominador respectivamente. Y como es lógico N es el orden del filtro y Wn la frecuencia de corte, calculadas previamente. Además es necesario especificar si queremos un filtro pasa altas o pasa bajas, rechaza banda o, pasa bandas. Esto lo haremos de la siguiente manera:
Si queremos cargar un audio propio, primero debemos guardarlo en la carpeta matlab de mis documentos y utilizaremos la instrucción [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.
Lo siguiente es calcular los coeficientes del filtro, esto lo haremos utilizando la función [B,A] = butter(N,Wn) B y A son los coeficientes del numerador y denominador respectivamente. Y como es lógico N es el orden del filtro y Wn la frecuencia de corte, calculadas previamente. Además 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')
Añadiendo a los comandos anteriores la opción 's', los vectores B y A son los coeficientes del filtro analógico 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 atenuación 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 señal
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 señal')
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 señal 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)
load handel.mat
y = y';
Wp = 1000/Fs; %%Frecuencia de corte normalizada
Ws = 2000/Fs; %%Frecuencia de atenuación 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 señal
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 señal')
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 señal 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 función [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.
Si queremos cargar un audio propio, primero debemos guardarlo en la carpeta matlab de mis documentos y utilizaremos la instrucción [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.
No hay comentarios:
Publicar un comentario
¿Dudas?