Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

fir2

Diseño de filtro FIR basado en muestreo de frecuencia

Descripción

ejemplo

b = fir2(n,f,m) devuelve un filtro FIR de la orden con las características de magnitud de frecuencia especificadas en los vectores y .nfm La función interpola linealmente la respuesta de frecuencia deseada en una cuadrícula densa y, a continuación, utiliza la transformación inversa de Fourier y una ventana Hamming para obtener los coeficientes de filtro.

ejemplo

b = fir2(n,f,m,npt,lap) especifica , el número de puntos en la cuadrícula de interpolación y , la longitud de la región que inserta alrededor de puntos de frecuencia duplicados que especifican pasos en la respuesta de frecuencia.nptlapfir2

ejemplo

b = fir2(___,window) especifica un vector de ventana que se usará en el diseño además de los argumentos de entrada de las sintaxis anteriores.

Se utiliza para configuraciones estándar de paso bajo, paso de banda, paso alto, bandstop y multibanda basadas en ventanas.Nota:fir1

Ejemplos

contraer todo

Cargue el archivo MAT .chirp El archivo contiene una señal, , muestreada a una frecuenciay ${\tt Fs}=8192\;\rm Hz$. tiene la mayor parte de su poder por encimay ${\tt Fs}/4$, o la mitad de la frecuencia Nyquist. Añade ruido aleatorio a la señal.

load chirp y = y + 0.25*(rand(size(y))-0.5); 

Diseñe un filtro DE paso alto FIR de 34o orden para atenuar los componentes de la señal a continuación ${\tt Fs}/4$. Especifique una frecuencia de corte de 0,48. Visualice la respuesta de frecuencia del filtro.

f = [0 0.48 0.48 1]; mhi = [0 0 1 1]; bhi = fir2(34,f,mhi);  freqz(bhi,1) 

Filtrar la señal de chirp. Trazar la señal antes y después del filtrado.

outhi = filter(bhi,1,y); t = (0:length(y)-1)/Fs;  subplot(2,1,1) plot(t,y) title('Original Signal') ylim([-1.2 1.2])  subplot(2,1,2) plot(t,outhi) title('Higpass Filtered Signal') xlabel('Time (s)') ylim([-1.2 1.2]) 

Cambie el filtro de paso alto a paso bajo. Utilice el mismo orden y corte. Vuelva a filtrar la señal. El resultado es principalmente ruido.

mlo = [1 1 0 0]; blo = fir2(34,f,mlo); outlo = filter(blo,1,y);  subplot(2,1,1) plot(t,y) title('Original Signal') ylim([-1.2 1.2])  subplot(2,1,2) plot(t,outlo) title('Lowpass Filtered Signal') xlabel('Time (s)') ylim([-1.2 1.2]) 

Diseñe un filtro de paso bajo de 30o orden con una frecuencia de corte normalizada de

<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>6</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra. Trazar la respuesta de frecuencia ideal superpuesta con la respuesta de frecuencia real.

f = [0 0.6 0.6 1]; m = [1 1 0 0];  b1 = fir2(30,f,m); [h1,w] = freqz(b1,1);  plot(f,m,w/pi,abs(h1)) xlabel('\omega / \pi') lgs = {'Ideal','fir2 default'}; legend(lgs)

Rediseñar el filtro mediante una cuadrícula de interpolación de 64 puntos.

b2 = fir2(30,f,m,64); h2 = freqz(b2,1);  hold on plot(w/pi,abs(h2)) lgs{3} = 'npt = 64'; legend(lgs)

Rediseñar el filtro utilizando la cuadrícula de interpolación de 64 puntos y un intervalo de 13 puntos alrededor de la frecuencia de corte.

b3 = fir2(30,f,m,64,13); h3 = freqz(b3,1);  plot(w/pi,abs(h3)) lgs{4} = 'lap = 13'; legend(lgs)

Diseñe un filtro FIR con la siguiente respuesta de frecuencia:

  • Un sinusoides entre 0 y

    <math display="block">
    <mrow>
    <mn>0</mn>
    <mo>.</mo>
    <mn>1</mn>
    <mn>8</mn>
    <mi>π</mi>
    </mrow>
    </math>
    rad/muestra.

F1 = 0:0.01:0.18; A1 = 0.5+sin(2*pi*7.5*F1)/4;
  • Una sección lineal a destafa entre

    <math display="block">
    <mrow>
    <mn>0</mn>
    <mo>.</mo>
    <mn>2</mn>
    <mi>π</mi>
    </mrow>
    </math>
    rad/muestra y
    <math display="block">
    <mrow>
    <mn>0</mn>
    <mo>.</mo>
    <mn>7</mn>
    <mn>8</mn>
    <mi>π</mi>
    </mrow>
    </math>
    rad/muestra.

F2 = [0.2 0.38 0.4 0.55 0.562 0.585 0.6 0.78]; A2 = [0.5 2.3 1 1 -0.2 -0.2 1 1];
  • Una sección cuadrática entre

    <math display="block">
    <mrow>
    <mn>0</mn>
    <mo>.</mo>
    <mn>7</mn>
    <mn>9</mn>
    <mi>π</mi>
    </mrow>
    </math>
    rad/muestra y la frecuencia Nyquist.

F3 = 0.79:0.01:1; A3 = 0.2+18*(1-F3).^2;

Diseñe el filtro con una ventana Hamming. Especifique un orden de filtro de 50.

N = 50;  FreqVect = [F1 F2 F3]; AmplVect = [A1 A2 A3];  ham = fir2(N,FreqVect,AmplVect);

Repita el cálculo utilizando una ventana Kaiser que tenga un parámetro de forma de 3.

kai = fir2(N,FreqVect,AmplVect,kaiser(N+1,3));

Rediseñar el filtro utilizando la función. utiliza una ventana rectangular de forma predeterminada.designfiltdesignfilt Calcular la respuesta de fase cero del filtro sobre 1024 puntos.

d = designfilt('arbmagfir','FilterOrder',N, ...     'Frequencies',FreqVect,'Amplitudes',AmplVect);  [zd,wd] = zerophase(d,1024);

Mostrar las respuestas de fase cero de los tres filtros. Superponer la respuesta ideal.

zerophase(ham,1) hold on zerophase(kai,1) plot(wd/pi,zd) plot(FreqVect,AmplVect,'k:') legend('Hamming','Kaiser','designfilt','ideal')

Argumentos de entrada

contraer todo

Orden de filtro, especificado como un escalar entero.

Para las configuraciones con una banda de paso en la frecuencia Nyquist, siempre utiliza un pedido par.fir2 Si especifica un valor impar para una de esas configuraciones, entonces aumenta en 1.nfir2n

Tipos de datos: double

Características de magnitud de frecuencia, especificadas como vectores de la misma longitud.

  • es un vector de puntos de frecuencia en el rango de 0 a 1, donde 1 corresponde a la frecuencia Nyquist.f El primer punto de debe ser 0 y el último punto debe ser 1. debe ordenarse en orden creciente.ff Se permiten puntos de frecuencia duplicados y se tratan como pasos en la respuesta de frecuencia.

  • es un vector que contiene la respuesta de magnitud deseada en cada uno de los puntos especificados en .mf

Tipos de datos: double

Número de puntos de cuadrícula, especificado como un escalar entero positivo. debe ser mayor que la mitad del orden del filtro: > /2.nptnptn

Tipos de datos: double

Longitud de la región alrededor de puntos de frecuencia duplicados, especificadocomo un escalar entero positivo.

Tipos de datos: double

Ventana, especificada como vector de columna. El vector de ventana debe tener + 1 elementos.n Si no especifica , utilice una ventana Hamming.windowfir2 Para obtener una lista de las ventanas disponibles, consulte .Windows

no aumenta automáticamente la longitud de si intenta diseñar un filtro de orden impar con una banda de paso en la frecuencia Nyquist.fir2window

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

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

Tipos de datos: double

Argumentos de salida

contraer todo

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

( ) + + ... +Bzb(1)b(2)zb(n+1)Z–n.

Algoritmos

utiliza el muestreo de frecuencia para diseñar filtros.fir2 La función interpola la respuesta de frecuencia deseada linealmente en una cuadrícula densa de longitud espaciada y espaciado uniformemente. también establece regiones de puntos alrededor de los valores repetidos de proporcionar transiciones pronunciadas pero suaves.nptfir2lapf Para obtener los coeficientes de filtro, la función aplica una transformación inversa rápida de Fourier a la cuadrícula y se multiplica por .window

Referencias

[1] Mitra, Sanjit K. Digital Signal Processing: A Computer Based Approach. New York: McGraw-Hill, 1998.

[2] Jackson, L. B. Digital Filters and Signal Processing. 3rd Ed. Boston: Kluwer Academic Publishers, 1996.

Capacidades ampliadas

Consulte también

| | | | | | | | | |

Introducido antes de R2006a