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

Diseño de filtro FIR equisicional complejo y no lineal de fase

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 uncfirpm Filtro FIR. El error de filtro Chebyshev (o minimax) está optimizado, produciendo diseños de filtro según los equisivas FIR.

b = cfirpm(n,f,@fresp) devuelve un filtro FIR de longitud con la mejor aproximación a la respuesta de frecuencia deseada según lo devuelto por la funciónn+1 fresp, al que llama su identificador de función (@fresp). es un vector de pares de bordes de banda de frecuencia, especificado en el rango -1 y 1, donde 1 corresponde a la frecuencia Nyquist normalizada.f Las frecuencias deben estar en orden creciente, y deben tener una longitud uniforme.f Las bandas de frecuencia se extienden a impar; los intervalos para impares son regiones de "bandas de transición" o "no importa" 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 filtro comunes, como se describe a continuación.fresp (Consulte para obtener más información sobre cómo crear una función personalizada.)Create Function Handle (MATLAB)fresp Para todas las funciones de respuesta de frecuencia predefinidas, la opción de simetría 'sym' de forma predeterminada si no se incluyen frecuencias negativas en y ; Lo contrario'even'fd0 'sym' de forma predeterminada , en .'none' (Véase el 'sym' opción a continuación para obtener más información.) Para todas las funciones de respuesta de frecuencia predefinidas, especifica un desplazamiento de retardo de grupo de modo que la respuesta de filtro tenga un retardo de grupo de unidades en unidades del intervalo de muestra.dn/2+d Los valores negativos crean menos retraso; valores positivos crean más retraso. Por defecto: :d0

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

    Estas funciones comparten una sintaxis común, que se ejemplifica a continuación por .@lowpass

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

    diseñar un filtro de fase lineal (retardo).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 en .b = cfirpm(n,f,{@multiband,a,d},...)af La amplitud deseada en frecuencias entre pares de puntos y para impares 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 la 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 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 Hilbert de fase lineal (retardo).b = cfirpm(N,F,{@hilbfilt,d},...)n/2+d

  • diseña una respuesta de filtro inverso-sinc 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 cuadrícula de optimización normalizadas al rango [–1,1].b = cfirpm(n,f,{@invsinc,a,d},...)aagg De forma predeterminada, no 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 del filtro.dNd Los valores negativos crean menos retraso y los valores positivos crean más retraso. De forma predeterminada, es 0.d

b = cfirpm(n,f,@fresp,w) utiliza los pesos reales y no negativos en vector para ponderar el ajuste en cada banda de frecuencia.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 unidad.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:

  • indica que no hay restricción de simetría.'none' Este es el valor predeterminado si se pasan 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 highpass, lowpass, allpass, bandpass, bandstop, inverse-sinc y multibanda.

  • indica una respuesta de impulso real y extraña.'odd' Este es el valor predeterminado para los diseños de Hilbert y diferenciadores.

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

Si hay 'sym' opción que no sea especificada, los bordes de la banda deben especificarse sólo sobre frecuencias positivas; la región de frecuencia negativa se rellena a partir de la simetría.'none' Si un 'sym' opción no se especifica, la fresp función se consulta para una configuración predeterminada. Cualquier producto suministrado por el usuario fresp función debe devolver un 'sym' opción cuando se pasa como el orden del filtro .'defaults'N

b = cfirpm(...,'skip_stage2') deshabilita el algoritmo de optimización de la segunda etapa, que se ejecuta solo cuando determina que el intercambio de errores estándar no ha alcanzado una solución óptima.cfirpmfirpm Deshabilitar 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 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 cuadrícula de frecuencias, que tiene aproximadamente puntos de frecuencia.lgrid2^nextpow2(lgrid*n) El valor predeterminado para 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 siguientes campos.optcfirpm

Campo

Descripción

opt.fgrid

Vector de cuadrícula de frecuencia utilizado para la optimización del diseño del filtro

opt.des

Respuesta de frecuencia deseada para cada puntoopt.fgrid

opt.wt

Ponderación para cada punto enopt.fgrid

opt.H

Respuesta de frecuencia real para cada puntoopt.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 definidas por el usuario, en lugar de las funciones de respuesta de frecuencia predefinidas para @fresp. Se llama a la función desde dentro utilizando la sintaxis siguientecfirpm

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

Dónde:

  • es el orden del filtro.n

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

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

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

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

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

Además, se realiza una llamada preliminar para 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 utilizar 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, cambiarle el nombre y guardarla en su ruta.

Ejemplos

contraer todo

Diseñe un filtro de paso bajo de fase lineal de 31 toques. Muestre 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ñar un filtro FIR allpass de fase no lineal 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 Trazar las respuestas de magnitud reales y aproximadas 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

Se implementa una versión extendida del método de intercambio Remez para el caso complejo. Este método de intercambio obtiene el filtro óptimo cuando la naturaleza equisiosperal del filtro está restringida a tener extremos.n+2 Cuando no converge, el algoritmo cambia a un algoritmo de ascenso-descenso que toma el control para finalizar 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, pp. 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