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.

firls

Diseño de filtro FIR de fase lineal de mínimos cuadrados

Sintaxis

b = firls(n,f,a)
b = firls(n,f,a,w)
b = firls(n,f,a,'ftype')
b = firls(n,f,a,w,'ftype')

Descripción

diseña unfirls fase lineal Filtro FIR que minimiza el error cuadrado ponderado e integrado entre una función lineal ideal por tramos y la respuesta de magnitud del filtro sobre un conjunto de bandas de frecuencias deseadas.

b = firls(n,f,a) Devuelve el vector de fila que contiene los coeficientes del filtro FIR de orden cuyas características de amplitud de frecuencia coinciden aproximadamente con las dadas por vectores y.bn+1nfa Los coeficientes del filtro de salida, o "grifos", obedecen a la relación de simetría.b

b(k)=b(n+2k),     k=1,...,n+1

Estos son filtros de fase lineal tipo I (impar) y tipo II (par).nn Vectores y especificar las características de amplitud de frecuencia del filtro:fa

  • es un vector de pares de puntos de frecuencia, especificado en el rango entre 0 y 1, donde 1 corresponde a la frecuencia Nyquist.f Las frecuencias deben estar en orden ascendente. Se permiten los puntos de frecuencia duplicados y, de hecho, se pueden utilizar para diseñar un filtro exactamente igual que los devueltos por las funciones y con una ventana rectangular ().fir1fir2rectwin

  • es un vector que contiene la amplitud deseada en los puntos especificados en.af

    La función de amplitud deseada en las frecuencias entre pares de puntos ((), (+ 1)) para impar es el segmento de línea que conecta los puntos ((), ()) y ((+ 1), (+ 1)).fkfkkfkakfkak

    La función de amplitud deseada en las frecuencias entre pares de puntos ((), (+ 1)) para par no está especificada.fkfkk Estas son regiones de transición o "no importa".

  • y tienen la misma longitud.fa Esta longitud debe ser un número incluso.

siempre utiliza un orden de filtro incluso para las configuraciones con una banda de paso en la frecuencia Nyquist.firls Esto se debe a que para las órdenes impares, la respuesta de frecuencia en la frecuencia Nyquist es necesariamente 0. Si especifica un valor impar, lo incrementa en 1.nfirls

La figura siguiente ilustra la relación entre el y los vectores en la definición de una respuesta de amplitud deseada.fa

b = firls(n,f,a,w) utiliza el pesos en Vector para ponderar el ajuste en cada banda de frecuencias.w La longitud de es la mitad de la longitud de y, por lo que hay exactamente un peso por banda.wfa

b = firls(n,f,a,'ftype') Y

b = firls(n,f,a,w,'ftype') especificar un tipo de filtro, donde 'ftype' Es:

  • para filtros de fase lineal con simetría impar (tipo III y tipo IV).'hilbert' Los coeficientes de salida obedecen la relaciónb

    b(k)=b(n+2k),k=1,,n+1.

    Esta clase de filtros incluye el Transformador Hilbert, que tiene una amplitud deseada de 1 en toda la banda.

  • 'differentiator' para los filtros tipo III y IV, utilizando una técnica de ponderación especial. Para las bandas de amplitud distinto de cero, el error cuadrado integrado tiene un peso de (1/)f2 para que el error en las frecuencias bajas sea mucho más pequeño que en las frecuencias altas. Para los diferenciadores FIR, que tienen una característica de amplitud proporcional a la frecuencia, los filtros minimizan el error cuadrado integrado relativo (la integral del cuadrado de la relación del error a la amplitud deseada).

Ejemplos

contraer todo

Diseñe un filtro de paso bajo FIR de orden 255 con banda de transición entre

<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>2</mn>
<mn>5</mn>
<mi>π</mi>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>3</mn>
<mi>π</mi>
</mrow>
</math>
. Se utiliza para mostrar las respuestas de magnitud y fase del filtro.fvtool

b = firls(255,[0 0.25 0.3 1],[1 1 0 0]); fvtool(b,1,'OverlayedAnalysis','phase')

Un diferenciador ideal tiene una respuesta de frecuencia dada por

<math display="block">
<mrow>
<mi>D</mi>
<mo stretchy="false">(</mo>
<mi>ω</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>j</mi>
<mi>ω</mi>
</mrow>
</math>
. Diseñe un diferenciador del orden 30 que atenúa las frecuencias por encima
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>9</mn>
<mi>π</mi>
</mrow>
</math>
. Incluya un factor de
<math display="block">
<mrow>
<mi>π</mi>
</mrow>
</math>
en la amplitud porque las frecuencias se normalizan por
<math display="block">
<mrow>
<mi>π</mi>
</mrow>
</math>
. Visualice la respuesta de fase cero del filtro.

b = firls(30,[0 0.9],[0 0.9*pi],'differentiator');  fvtool(b,1,'MagnitudeDisplay','zero-phase')

Diseñe un filtro antisimétrico de 24 órdenes con bandas de paso lineales a desteables.

F = [0 0.3 0.4 0.6 0.7 0.9];  A = [0 1.0 0.0 0.0 0.5 0.5]; b = firls(24,F,A,'hilbert');

Trace las respuestas de frecuencia deseadas y reales.

[H,f] = freqz(b,1,512,2); plot(f,abs(H)) hold on for i = 1:2:6,     plot([F(i) F(i+1)],[A(i) A(i+1)],'r--') end legend('firls design','Ideal') grid on xlabel('Normalized Frequency (\times\pi rad/sample)') ylabel('Magnitude')

Diseñe un filtro de paso bajo FIR. La banda de paso oscila entre DC y

<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>4</mn>
<mn>5</mn>
<mi>π</mi>
</mrow>
</math>
RAD/sample. La banda de paro oscila entre
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>5</mn>
<mn>5</mn>
<mi>π</mi>
</mrow>
</math>
RAD/Sample a la frecuencia Nyquist. Produce tres diseños diferentes, cambiando los pesos de las bandas en el ajuste de mínimos cuadrados.

En el primer diseño, hacer el peso de la banda de suspensión más alto que el peso de la banda de paso por un factor de 100. Utilice esta especificación cuando sea crítico que la respuesta de magnitud en la banda de detención sea plana y cercana a 0. La ondulación de banda de paso es de aproximadamente 100 veces mayor que la ondulación de banda de parada.

bhi = firls(18,[0 0.45 0.55 1],[1 1 0 0],[1 100]);

En el segundo diseño, invierta los pesos para que el peso de la banda de paso sea 100 veces el peso de la banda de suspensión. Utilice esta especificación cuando sea crítico que la respuesta de magnitud en la banda de paso sea plana y cercana a 1. La ondulación de banda de parada es de aproximadamente 100 veces mayor que la ondulación de banda de paso.

blo = firls(18,[0 0.45 0.55 1],[1 1 0 0],[100 1]);

En el tercer diseño, dar el mismo peso a ambas bandas. El resultado es un filtro con ondulación similar en la banda de paso y la banda de suspensión.

b = firls(18,[0 0.45 0.55 1],[1 1 0 0],[1 1]);

Visualice las respuestas de magnitud de los tres filtros.

hfvt = fvtool(bhi,1,blo,1,b,1,'MagnitudeDisplay','Zero-phase'); legend(hfvt,'bhi: w = [1 100]','blo: w = [100 1]','b: w = [1 1]')

Diagnóstico

Se muestra uno de los siguientes mensajes de diagnóstico cuando se utiliza un argumento incorrecto:

F debe ser incluso longitud. F y A deben ser longitudes iguales. Requiere simetría para ser ' Hilbert ' o ' diferenciador '. Requiere un peso por banda. Las frecuencias en F deben ser no decreciente. Las frecuencias en F deben estar en el rango [0,1]. 

Un mensaje de advertencia más serio es

Warning: Matrix is close to singular or badly scaled. 

Esto tiende a suceder cuando el producto de la longitud del filtro y la anchura de la transición crecen grandes. En este caso, los coeficientes de filtro b podrían no representar el filtro deseado. Puede comprobar el filtro observando su respuesta de frecuencia.

Algoritmos

Referencia describe el enfoque teórico detrás.[1]firls La función resuelve un sistema de ecuaciones lineales que implican una matriz de producto interna de tamaño aproximadamente utilizando el operador.n/2MATLAB®\

Esta función diseña filtros de fase lineal de tipo I, II, III y IV. Tipo I y II son los valores predeterminados para n par e impar respectivamente, mientras que los indicadores y producen filtros de tipo III (n par) y IV (n impar).'hilbert''differentiator' Los diferentes tipos de filtro tienen diferentes simetrías y restricciones en sus respuestas de frecuencia (ver para más detalles).[2]

Tipo de filtro de fase linealOrden de filtroSimetría de coeficientesRespuesta H (f), f = 0Respuesta H (f), f = 1 (Nyquist)

Tipo I

Incluso

b(k)=b(n+2k),k=1,...,n+1

Ninguna restricción

Ninguna restricción

Tipo II

Extraño

b(k)=b(n+2k),k=1,...,n+1

Ninguna restricción

(1) = 0H

Tipo III

Incluso

b(k)=b(n+2k),k=1,...,n+1

(0) = 0H

(1) = 0H

Tipo IV

Extraño

b(k)=b(n+2k),k=1,...,n+1

(0) = 0H

Ninguna restricción

Referencias

[1] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987, pp. 54–83.

[2] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1999.

Capacidades ampliadas

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

Consulte también

| | |

Introducido antes de R2006a