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.

cfirpm

Complejo y no lineal-fase de diseño de filtro FIR de equionda

Sintaxis

b = cfirpm(n,f,@fresp)
b = cfirpm(n,f,@fresp,w)
b = cfirpm(n,f,a)
b = cfirpm(n,f,a,w)
b = cfirpm(...,'sym')
b = cfirpm(...,'skip_stage2')
b = cfirpm(...,'debug')
b = cfirpm(...,{lgrid})
[b,delta] = cfirpm(...)
[b,delta,opt] = cfirpm(...)

Descripción

permite especificar restricciones arbitrarias de dominio de frecuencia para el diseño de un posible complejocfirpm Filtro FIR. Se optimiza el error de filtro Chebyshev (o Minimax), produciendo diseños de filtro FIR de equiripple.

b = cfirpm(n,f,@fresp) Devuelve un filtro FIR de longitud con la mejor aproximación a la respuesta de frecuencia deseada devuelta por la funciónn+1 fresp, a la que llama su identificador de función (@fresp). es un vector de pares de borde de banda de frecuencia, especificado en el rango-1 y 1, donde 1 corresponde a la frecuencia de Nyquist normalizada.f Las frecuencias deben estar en orden ascendente y deben tener una longitud incluso mayor.f Las bandas de frecuencia abarcan para impar; los intervalos para para impar son "bandas de transición" o "no importa" regiones durante la optimización.f(k)f(k+1)kf(k+1)f(k+2)k

Las funciones de respuesta de frecuencia predefinidas se incluyen para una serie de diseños de filtros comunes, como se describe a continuación.fresp (Consulte para obtener más información sobre cómo crear una función personalizada.)Crear identificador de función (MATLAB)fresp Para todas las funciones de respuesta de frecuencia predefinidas, la opción de simetría 'sym' por defecto si no hay frecuencias negativas contenidas en y =; Lo contrario'even'fd0 'sym' por defecto.'none' (Consulte la 'sym' siguiente opción para más detalles.) Para todas las funciones de respuesta de frecuencia predefinidas, especifica un desfase de retardo de grupo de forma que la respuesta del filtro tenga un retardo de grupo de unidades del intervalo de muestreo.dn/2+d Los valores negativos crean menos retardo; valores positivos crean más retardo. Por defecto =:d0

  • , , , ,@lowpass@highpass@allpass@bandpass@bandstop

    Estas funciones comparten una sintaxis común, ejemplificada a continuación.@lowpass

    Yb = cfirpm(n,f,@lowpass,...)

    diseñar un filtro de fase lineal (Delay).b = cfirpm(n,f,{@lowpass,d},...)n/2+d

    Nota

    Para los filtros, el primer elemento del vector de frecuencia debe ser menor o igual que cero y el último elemento debe ser mayor o igual que cero.@bandpass

  • diseña un filtro de respuesta de frecuencia de fase lineal con amplitudes de banda arbitrarias.@multiband

    Yb = cfirpm(n,f,{@multiband,a},...)

    especificar el vector que contiene las amplitudes deseadas en los bordes de la banda.b = cfirpm(n,f,{@multiband,a,d},...)af La amplitud deseada en las frecuencias entre pares de puntos y para impar es el segmento de línea que conecta los puntos y.f(k)f(k+1)k(f(k),a(k))(f(k+1),a(k+1))

  • diseña un diferenciador de fase lineal.@differentiator Para estos diseños, la frecuencia cero debe estar en una banda de transición, y la ponderación de banda está configurada para ser inversamente proporcional a la frecuencia.

    Yb = cfirpm(n,f,{@differentiator,fs},...)

    especificar la frecuencia de muestreo utilizada para determinar la pendiente de la respuesta del diferenciador.b = cfirpm(n,f,{@differentiator,fs,d},...)fs Si se omite, el valor predeterminado es 1.fs

  • diseña una respuesta de filtro de transformación de Hilbert de fase lineal.@hilbfilt Para los diseños de Hilbert, la frecuencia cero debe estar en una banda de transición.

    Yb = cfirpm(n,f,@hilbfilt,...)

    diseñar un filtro de transformación de Hilbert de fase lineal (Delay).b = cfirpm(N,F,{@hilbfilt,d},...)n/2+d

  • diseña una respuesta de filtro de sinc inversa de fase lineal.@invsinc

    Yb = cfirpm(n,f,{@invsinc,a},...)

    Especifique la ganancia para la función sinc, calculada como sinc (*), donde contiene las frecuencias de la rejilla de optimización normalizadas al rango [– 1, 1].b = cfirpm(n,f,{@invsinc,a,d},...)aagg Por defecto, = 1.a El desplazamiento de retardo de grupo es, de tal manera que la respuesta del filtro tendrá un retardo de grupo de/2 + en unidades del intervalo de muestra, donde N es el orden de filtro.dNd Los valores negativos crean menos retardo y los valores positivos crean más retardo. Por defecto, = 0.d

b = cfirpm(n,f,@fresp,w) utiliza los pesos reales no negativos en el vector para ponderar el ajuste en cada banda de frecuencias.w La longitud de es la mitad de la longitud de, por lo que hay exactamente un peso por banda.wf

b = cfirpm(n,f,a) es sinónimo de.b = cfirpm(n,f,{@multiband,a})

b = cfirpm(n,f,a,w) aplica un conjunto opcional de pesos positivos, uno por banda, para su uso durante la optimización. Si no se especifica, las ponderaciones se establecen en Unity.w

b = cfirpm(...,'sym') impone una restricción de simetría en la respuesta de impulso del diseño, donde 'sym' puede ser uno de los siguientes:

  • no indica ninguna restricción de simetría.'none' Este es el valor predeterminado si se pasan las frecuencias de borde de banda negativas, o si fresp no proporciona un valor predeterminado.

  • indica una respuesta de impulso real e incluso.'even' Este es el valor predeterminado para los diseños de paso alto, lowpass, allpass, bandpass, Bandstop, inverso-sinc y multibanda.

  • indica una respuesta de impulso real e impar.'odd' Este es el valor predeterminado para Hilbert y los diseños de diferenciador.

  • indica la simetría conjugada para la respuesta de frecuencia'real'

Si alguna 'sym' opción distinta de la especificada, los bordes de la banda solo se deben especificar en las frecuencias positivas; la región de frecuencia negativa se rellena desde la simetría.'none' Si un 'sym' opción no se especifica, el fresp función se consulta para obtener una configuración predeterminada. Cualquier usuario suministrado fresp función debe devolver un válido 'sym' opción cuando se pasa como el orden de filtro.'defaults'N

b = cfirpm(...,'skip_stage2') deshabilita el algoritmo de optimización de la segunda etapa, que solo se ejecuta cuando determina que no se ha alcanzado una solución óptima mediante el intercambio de errores estándar.cfirpmfirpm La desactivación de este algoritmo puede aumentar la velocidad de cálculo, pero puede incurrir en una reducción de la precisión. De forma predeterminada, la optimización de la segunda etapa está habilitada.

b = cfirpm(...,'debug') permite la visualización de los resultados intermedios durante el diseño del filtro, donde 'debug' puede ser uno de,,, o.'trace''plots''both''off' De forma predeterminada, se establece en.'off'

b = cfirpm(...,{lgrid}) utiliza el entero para controlar la densidad de la rejilla de frecuencias, que tiene puntos de frecuencia aproximadamente.lgrid2^nextpow2(lgrid*n) El valor predeterminado es.lgrid25 Tenga en cuenta que el argumento debe ser una matriz de celdas 1 por 1.{lgrid}

Cualquier combinación de la 'sym', ,'skip_stage2' 'debug', y se pueden especificar opciones.{lgrid}

[b,delta] = cfirpm(...) Devuelve la altura máxima de ondulación.delta

[b,delta,opt] = cfirpm(...) Devuelve una estructura de resultados opcionales calculados por y contiene los campos siguientes.optcfirpm

Campo

Descripción

opt.fgrid

Vector de la rejilla de frecuencias utilizado para la optimización del diseño del filtro

opt.des

Respuesta de frecuencia deseada para cada punto enopt.fgrid

opt.wt

Ponderación para cada punto enopt.fgrid

opt.H

Respuesta de frecuencia real para cada punto enopt.fgrid

opt.error

Error en cada punto deopt.fgrid

opt.iextr

Vector de índices en frecuencias extremasopt.fgrid

opt.fextr

Vector de frecuencias extremas

Se pueden utilizar funciones definibles por el usuario, en lugar de las funciones de respuesta de frecuencia predefinidas para @fresp. La función se llama desde dentro utilizando la siguiente sintaxiscfirpm

[dh,dw] = fresp(n,f,gf,w,p1,p2,...)

Dónde:

  • es el orden de filtro.n

  • es el vector de los bordes de la banda de frecuencias que aparecen monótona entre-1 y 1, donde 1 corresponde a la frecuencia Nyquist.f

  • es un vector de puntos de rejilla que se han interpolado linealmente sobre cada banda de frecuencias especificada. determina la cuadrícula de frecuencia en la que se debe evaluar la función de respuesta.gfcfirpmgf Se trata de los mismos datos devueltos en el campo de la estructura.cfirpmfgridopt

  • es un vector de pesos positivos reales, uno por banda, utilizado durante la optimización. es opcional en la llamada a; Si no se especifica, se establece en ponderación de unidad antes de pasarse awwcfirpm fresp.

  • y son la respuesta de frecuencia compleja deseada y los vectores de peso de banda, respectivamente, evaluados en cada frecuencia en la rejilla.dhdwgf

  • ,,, son parámetros opcionales que se pueden pasar ap1p2... fresp.

Además, se realiza una llamada preliminar a fresp para determinar la propiedad de simetría predeterminada 'sym'. Esta llamada se realiza utilizando la sintaxis:

sym = fresp('defaults',{n,f,[],w,p1,p2,...})

Los argumentos se pueden usar para determinar un valor predeterminado de simetría adecuado según sea necesario. Puede utilizar la función local como plantilla para generar nuevas funciones de respuesta de frecuencia.lowpass Para buscar la función, escriba en la línea de comandos y busque en el código.lowpassedit cfirpmlowpasscfirpm Puede copiar la función, modificarla, renombrarla y guardarla en su ruta.

Ejemplos

contraer todo

Diseñe un filtro de paso bajo de fase lineal de 31 TAP. Mostrar sus respuestas de magnitud y fase.

b = cfirpm(30,[-1 -0.5 -0.4 0.7 0.8 1],@lowpass); fvtool(b,1,'OverlayedAnalysis','phase')

Diseñe un filtro FIR de fase no lineal de paso allpass de la orden 22 con respuesta de frecuencia dada aproximadamente por

<math display="block">
<mrow>
<mi mathvariant="normal">exp</mi>
<mo stretchy="false">(</mo>
<mo>-</mo>
<mi>j</mi>
<mi>π</mi>
<mi>f</mi>
<mi>N</mi>
<mo>/</mo>
<mn>2</mn>
<mo>+</mo>
<mi>j</mi>
<mn>4</mn>
<mi>π</mi>
<mi>f</mi>
<mo>|</mo>
<mi>f</mi>
<mo>|</mo>
<mo stretchy="false">)</mo>
</mrow>
</math>
Dónde
<math display="block">
<mrow>
<mi>f</mi>
<mo></mo>
<mo stretchy="false">[</mo>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mn>1</mn>
<mo stretchy="false">]</mo>
</mrow>
</math>
.

n = 22;                              % Filter order f = [-1 1];                          % Frequency band edges w = [1 1];                           % Weights for optimization gf = linspace(-1,1,256);             % Grid of frequency points  d = exp(-1i*pi*gf*n/2 + 1i*pi*pi*sign(gf).*gf.*gf*(4/pi));                                      % Desired frequency response

Se utiliza para calcular el filtro FIR.cfirpm Trace las respuestas de magnitud real y aproximada en dB y las respuestas de fase en grados.

b = cfirpm(n,f,'allpass',w,'real');  % Approximation freqz(b,1,256,'whole')  subplot(2,1,1)                       % Overlay response hold on plot(pi*(gf+1),20*log10(abs(fftshift(d))),'r--')  subplot(2,1,2) hold on plot(pi*(gf+1),unwrap(angle(fftshift(d)))*180/pi,'r--') legend('Approximation','Desired','Location','SouthWest')

Algoritmos

Una versión extendida del método de intercambio Remez se implementa para el caso complejo. Este método de intercambio obtiene el filtro óptimo cuando la naturaleza equiondulación del filtro está restringida a tener extremales.n+2 Cuando no convergen, el algoritmo cambia a un algoritmo de descenso de ascenso que asume el control para terminar la convergencia a la solución óptima. Consulte las referencias para obtener más detalles.

Referencias

[1] Karam, L.J., and J.H. McClellan. “Complex Chebyshev Approximation for FIR Filter Design.” IEEE® Trans. on Circuits and Systems II,March 1995. Pgs. 207-216.

[2] Karam, L.J. Design of Complex Digital FIR Filters in the Chebyshev Sense, Ph.D. Thesis, Georgia Institute of Technology, March 1995.

[3] Demjanjov, V.F., and V.N. Malozemov. Introduction to Minimax, New York: John Wiley & Sons, 1974.

Capacidades ampliadas

Consulte también

| | |

Introducido antes de R2006a