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 menos 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 por partes ideal y la respuesta de magnitud del filtro sobre un conjunto de bandas de frecuencia deseadas.

b = firls(n,f,a) devuelve el vector de fila que contiene los coeficientes del filtro FIR de la orden cuyas características de amplitud de frecuencia coinciden aproximadamente con las dadas por los vectores y .bn+1nfa Los coeficientes de filtro de salida, o "toques", en obedecer 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 especifique 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 creciente. Se permiten puntos de frecuencia duplicados y, de hecho, se pueden utilizar para diseñar un filtro exactamente igual que los devueltos por el y funciones 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 a 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 frecuencias entre pares de puntos ( ( ), ( +1)) para par no está especificada.fkfkk Estas son regiones de transición o "no le importa".

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

siempre utiliza un orden de filtro uniforme para 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 los vectores y 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 frecuencia.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 producción en obedecer 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 filtros tipo III y tipo IV, utilizando una técnica de ponderación especial. Para bandas de amplitud distintas de cero, el error cuadrado integrado tiene un peso de (1/ )f2 de modo que el error a bajas frecuencias sea mucho menor que en 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 con la amplitud deseada).

Ejemplos

contraer todo

Diseñe un filtro FIR lowpass 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ñar un diferenciador de la orden 30 que atenúe las frecuencias anteriores
<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 24o orden con bandas de paso lineales por pieza.

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');

Trazar 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 FIR lowpass. 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/muestra. La banda de parada va desde
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>5</mn>
<mn>5</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra a la frecuencia Nyquist. Producir tres diseños diferentes, cambiando los pesos de las bandas en el ajuste de mínimos cuadrados.

En el primer diseño, haga que el peso de la banda de parada sea 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 parada sea plana y cercana a 0. La ondulación de la banda de paso es aproximadamente 100 veces mayor que la ondulación de la 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 de modo que el peso de la banda de paso sea 100 veces el peso de la banda de parada. 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 la banda de parada es aproximadamente 100 veces mayor que la ondulación de la 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 una ondulación similar en la banda de paso y la banda de parada.

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 de longitud uniforme. F y A deben tener longitudes iguales. Requiere simetría para ser 'hilbert' o 'diferenciador'. Requiere un peso por banda. Las frecuencias en F deben ser no disminuidos. 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 el ancho de transición crece. En este caso, es posible que los coeficientes de filtro b no representen el filtro deseado. Puede comprobar el filtro mirando su respuesta de frecuencia.

Algoritmos

La referencia describe el enfoque teórico detrás de .[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 tipo I, II, III y IV. Tipo I y II son los valores predeterminados para n pares e impares respectivamente, mientras que las banderas y producen filtros de tipo III (n par) y IV (n impares).'hilbert''differentiator' Los distintos tipos de filtro tienen diferentes simetrías y restricciones en sus respuestas de frecuencia (consulte para obtener más información).[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

Sin restricciones

Sin restricciones

Tipo II

Extraño

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

Sin restricciones

(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

Sin restricciones

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