Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

fir1

Diseño de filtros FIR basados en ventanas

Descripción

ejemplo

b = fir1(n,Wn) utiliza una ventana de Hamming para diseñar un filtro FIR de n-ésimo orden de paso bajo, paso banda o multibanda con fase lineal. El tipo de filtro depende del número de elementos de Wn.

ejemplo

b = fir1(n,Wn,ftype) diseña un filtro paso bajo, paso alto, paso banda, eliminador de banda o multibanda, en función del valor de ftype y del número de elementos de Wn.

ejemplo

b = fir1(___,window) diseña el filtro mediante el vector especificado en window y cualquiera de los argumentos de sintaxis anteriores.

b = fir1(___,scaleopt) especifica además si la respuesta de magnitud del filtro está normalizada o no.

Nota: Utilice fir2 para los filtros de ventana con respuesta de frecuencia arbitraria.

Ejemplos

contraer todo

Diseñe un filtro paso banda de 48.º orden con una banda de paso 0.35πω0.65π rad/muestra. Visualice sus respuestas de magnitud y fase.

b = fir1(48,[0.35 0.65]);
freqz(b,1,512)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

Cargue chirp.mat. El archivo contiene una señal, y, que tiene la mayor parte de su potencia por encima de Fs/4, o la mitad de la frecuencia de Nyquist. La tasa de muestreo es 8192 Hz.

Diseñe un filtro paso alto FIR de 34.º orden para atenuar los componentes de la señal por debajo de Fs/4. Utilice una frecuencia de corte de 0,48 y una ventana de Chebyshev con 30 dB de curvatura.

load chirp

t = (0:length(y)-1)/Fs;

bhi = fir1(34,0.48,'high',chebwin(35,30));
freqz(bhi,1)

Filtre la señal. Muestre las señales originales y las filtradas en paso alto. Utilice la misma escala de eje y en ambas gráficas.

outhi = filter(bhi,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outhi)
title('Highpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Diseñe un filtro paso bajo con las mismas especificaciones. Filtre la señal y compare el resultado con el original. Utilice la misma escala de eje y en ambas gráficas.

blo = fir1(34,0.48,chebwin(35,30));

outlo = filter(blo,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outlo)
title('Lowpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Diseñe un filtro FIR de 46.º orden atenúe las frecuencias normalizadas por debajo de 0.4π rad/muestra y entre 0.6π y 0.9π rad/muestra. Llámelo bM. Calcule su respuesta en frecuencia.

ord = 46;

low = 0.4;
bnd = [0.6 0.9];

bM = fir1(ord,[low bnd]);
[hbM,f] = freqz(bM,1);

Rediseñe bM para que pase las bandas que estaba atenuando y detenga las otras frecuencias. Llame al nuevo filtro bW. Muestre las respuestas en frecuencia de los filtros.

bW = fir1(ord,[low bnd],"DC-1");

[hbW,~] = freqz(bW,1);
plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hbW)))
legend("bM","bW",Location="best")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent bM, bW.

Rediseñe bM mediante una ventana de Hann. (El "DC-0" es opcional). Compare las respuestas de magnitud de los diseños de Hamming y Hann.

hM = fir1(ord,[low bnd],'DC-0',hann(ord+1));

hhM = freqz(hM,1);
plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hhM)))
legend("Hamming","Hann",Location="northwest")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Hamming, Hann.

Rediseñe bW mediante una ventana de Tukey. Compare las respuestas de magnitud de los diseños de Hamming y Tukey.

tW = fir1(ord,[low bnd],'DC-1',tukeywin(ord+1));

htW = freqz(tW,1);
plot(f/pi,mag2db(abs(hbW)),f/pi,mag2db(abs(htW)))
legend("Hamming","Tukey",Location="best")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Hamming, Tukey.

Argumentos de entrada

contraer todo

Orden del filtro, especificado como un escalar entero.

En las configuraciones de paso alto y eliminador de banda, fir1 siempre utiliza un orden de filtro par. El orden debe ser par porque los filtros FIR simétricos de orden impar deben tener ganancia cero en la frecuencia de Nyquist. Si especifica un n impar en un filtro paso alto o eliminador de banda, fir1 incrementa n en 1.

Tipos de datos: double

Restricciones de frecuencia, especificadas como un escalar, un vector de dos elementos o un vector de varios elementos. Todos los elementos de Wn deben ser estrictamente mayores que 0 y estrictamente menores que 1, donde 1 corresponde a la frecuencia de Nyquist: 0 < Wn < 1. La frecuencia de Nyquist es la mitad de la tasa de muestreo o π rad/muestra.

  • Si Wn es un escalar, fir1 diseña un filtro paso bajo o paso alto con una frecuencia de corte Wn. La frecuencia de corte es la frecuencia en la que la ganancia normalizada del filtro es de 6 dB.

  • Si Wn es el vector de dos elementos [w1 w2], donde w1 < w2, entonces fir1 diseña un filtro paso banda o eliminador de banda con una frecuencia de corte inferior a w1 y una frecuencia de corte superior a w2.

  • Si Wn es el vector de varios elementos [w1 w2 ... wn], donde w1 < w2 < … < wn, fir1 devuelve un filtro multibanda de n-ésimo orden con bandas 0 < ω < w1, w1 < ω < w2, …, wn < ω < 1.

Tipos de datos: double

Tipo de filtro, especificado como uno de los siguientes:

  • 'low' especifica un filtro paso bajo con frecuencia de corte Wn. 'low' es el valor predeterminado para el escalar Wn.

  • 'high' especifica un filtro paso alto con frecuencia de corte Wn.

  • 'bandpass' especifica un filtro paso banda si Wn es un vector de dos elementos. 'bandpass' es el valor predeterminado cuando Wn tiene dos elementos.

  • 'stop' especifica un filtro eliminador de banda si Wn es un vector de dos elementos.

  • 'DC-0' especifica que la primera banda de un filtro multibanda es una banda de parada. 'DC-0' es el valor predeterminado cuando Wn tiene más de dos elementos.

  • 'DC-1' especifica que la primera banda de un filtro multibanda es una banda de paso.

Ventana, especificada como un vector. El vector de ventana debe tener n + 1 elementos. Si no especifica window, fir1 utiliza una ventana de Hamming. Para obtener una lista de las ventanas disponibles, consulte Ventanas.

fir1 no incrementa automáticamente la longitud de window si intenta diseñar un filtro paso alto o eliminador de banda de orden impar.

Ejemplo: kaiser(n+1,0.5) especifica una ventana de Kaiser con el parámetro de forma 0,5 para utilizar con un filtro de orden n.

Ejemplo: hamming(n+1) equivale a dejar la ventana sin especificar.

Tipos de datos: double

Opción de normalización, especificada como 'scale' o 'noscale'.

  • 'scale' normaliza los coeficientes para que la respuesta de magnitud del filtro en el centro de la banda de paso sea 1 (0 dB).

  • 'noscale' no normaliza los coeficientes.

Argumentos de salida

contraer todo

Coeficientes del filtro, devueltos como un vector fila de longitud n + 1. Los coeficientes se ordenan en potencias descendentes de la variable de la transformada Z z:

B(z) = b(1) + b(2)z + … + b(n+1)z–n.

Algoritmos

fir1 utiliza una aproximación por mínimos cuadrados para calcular los coeficientes del filtro y luego suaviza la respuesta al impulso con window.

Referencias

[1] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979, Algorithm 5.2.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido antes de R2006a

Consulte también

| | | | | | | | | |