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.

fir2

Diseño de filtros FIR basados en muestreo de frecuencia

Descripción

b = fir2(n,f,m) devuelve un filtro FIR de n-ésimo orden con características de frecuencia-magnitud especificadas en los vectores f y m. La función interpola linealmente la respuesta en frecuencia deseada en una malla densa y utiliza la transformada de Fourier inversa y una ventana Hamming para obtener los coeficientes del filtro.

ejemplo

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

ejemplo

b = fir2(___,window) especifica un vector ventana para utilizar en el diseño, además de cualquier argumento de entrada de las sintaxis anteriores.

Nota: Utilice fir1 para configuraciones paso bajo, paso banda, paso alto, eliminador de banda y multibanda.

ejemplo

Ejemplos

contraer todo

Cargue el archivo MAT chirp. El archivo contiene una señal, y, muestreada a una frecuencia Fs = 8192 Hz. La señal tiene la mayor parte de su potencia por encima de Fs/4 = 2048 Hz o la mitad de la frecuencia de Nyquist. Añada ruido aleatorio a la señal.

load chirp
y = y + randn(size(y))/25;
t = (0:length(y)-1)/Fs;

Diseñe un filtro paso alto FIR de 34.º orden para atenuar los componentes de la señal por debajo de Fs/4. Especifique una frecuencia de corte normalizada de 0.48, que corresponde a unos 1966 Hz. Visualice la respuesta en frecuencia del filtro.

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

freqz(bhi,1,[],Fs)

Filtre la señal chirp. Represente la señal antes y después del filtrado.

outhi = filter(bhi,1,y);

figure
subplot(2,1,1)
plot(t,y)
title('Original Signal')
ylim([-1.2 1.2])

subplot(2,1,2)
plot(t,outhi)
title('Highpass Filtered Signal')
xlabel('Time (s)')
ylim([-1.2 1.2])

Cambie el filtro de paso alto a paso bajo. Utilice el mismo orden y frecuencia de corte. Filtre la señal de nuevo. El resultado es mayoritariamente 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 paso bajo de 30.º orden con una frecuencia de corte normalizada de 0.6π rad/muestra. Represente la respuesta en frecuencia ideal superpuesta con la respuesta en 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ñe el filtro utilizando una malla 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ñe el filtro utilizando la malla 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 en frecuencia:

  • Una sinusoide entre 0 y 0.18π rad/muestra.

F1 = 0:0.01:0.18;
A1 = 0.5+sin(2*pi*7.5*F1)/4;
  • Una sección lineal a trozos entre 0.2π rad/muestra y 0.78π 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 0.79π rad/muestra y la frecuencia de Nyquist.

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

Diseñe el filtro utilizando 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 con un parámetro de forma de 3.

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

Rediseñe el filtro utilizando la función designfilt. designfilt utiliza una ventana rectangular de forma predeterminada. Calcule la respuesta de fase cero del filtro en 1024 puntos.

d = designfilt('arbmagfir','FilterOrder',N, ...
    'Frequencies',FreqVect,'Amplitudes',AmplVect);

[zd,wd] = zerophase(d,1024);

Muestre las respuestas de fase cero de los tres filtros. Superponga 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 del filtro, especificado como un escalar entero.

En configuraciones con una banda de paso a la frecuencia de Nyquist, fir2 siempre utiliza un orden par. Si especifica un n con valor impar para una de estas configuraciones, fir2 incrementa n en 1.

Tipos de datos: double

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

  • f es un vector de puntos de frecuencia que oscila entre 0 y 1, donde 1 corresponde a la frecuencia de Nyquist. El primer punto de f debe ser 0 y el último punto debe ser 1. f debe ordenarse de forma ascendente. Los puntos de frecuencia duplicados están permitidos y se tratan como saltos en la respuesta en frecuencia.

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

Tipos de datos: double

Número de puntos de malla, especificados como escalar entero positivo. npt debe ser mayor que la mitad del orden del filtro: npt > n/2.

Tipos de datos: double

Longitud de la región alrededor de los puntos de frecuencia duplicados, especificada como escalar entero positivo.

Tipos de datos: double

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

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

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

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

fir2 utiliza el muestreo de frecuencia para diseñar filtros. La función interpola linealmente la respuesta en frecuencia deseada en una malla densa y uniformemente espaciada de longitud npt. fir2 también establece regiones de lap puntos alrededor de los valores repetidos de f para proporcionar transiciones inclinadas, pero suaves. Para obtener los coeficientes del filtro, la función aplica a la malla una transformada rápida de Fourier inversa y multiplica por window.

Referencias

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

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

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a