Contenido principal

ellip

Diseño de filtros elípticos

Descripción

[b,a] = ellip(n,Rp,Rs,Wp) diseña un filtro digital elíptico paso bajo de n-ésimo orden con una frecuencia de borde de la banda de paso normalizada Wp. El filtro resultante tiene Rp decibelios de ondulación pico a pico de la banda de paso y Rs decibelios de atenuación de la banda de parada en relación con el valor pico de la banda de paso. La función ellip devuelve los coeficientes de numerador y denominador de la función de transferencia del filtro.

ejemplo

[b,a] = ellip(n,Rp,Rs,Wp,fType) diseña un filtro digital elíptico paso bajo, paso alto, paso banda o eliminador de banda, dependiendo del valor de fType y del número de elementos de Wp. Los diseños de paso banda y de eliminador de banda resultantes son de orden 2n.

Nota

Es posible que encuentre inestabilidades numéricas al diseñar filtros IIR con funciones de transferencia para órdenes tan bajos como 4. Consulte Funciones de transferencia y CTF para obtener más información sobre las cuestiones numéricas que afectan a la formación de la función de transferencia.

ejemplo

[z,p,k] = ellip(___) diseña un filtro digital elíptico y devuelve sus ceros, polos y ganancia. Esta sintaxis puede incluir cualquiera de los argumentos de entrada de las sintaxis anteriores.

ejemplo

[A,B,C,D] = ellip(___) diseña un filtro digital elíptico y devuelve las matrices que especifican su representación en el espacio de estados.

ejemplo

[___] = ellip(___,"s") diseña un filtro analógico elíptico utilizando cualquiera de los argumentos de entrada o salida de las sintaxis anteriores.

ejemplo

[B,A] = ellip(n,Rp,Rs,Wp,"ctf") diseña un filtro digital elíptico paso bajo utilizando Funciones de transferencia en cascada (CTF) de segundo orden. La función devuelve matrices que listan los coeficientes de polinomios de numerador y denominador de la función de transferencia del filtro, representada como una cascada de secciones de filtro. Este enfoque genera filtros IIR con una estabilidad numérica mejorada en comparación con las funciones de transferencia de una sola sección. (desde R2024b)

ejemplo

[___] = ellip(n,Rp,Rs,Wp,fType,"ctf") diseña un filtro digital elíptico paso bajo, paso alto, paso banda o eliminador de banda, y devuelve la representación del filtro utilizando el formato CTF. Las secciones de diseño resultantes son de orden 2 (filtros paso bajo y paso alto) o 4 (filtros paso banda o eliminador de banda). (desde R2024b)

[___,gS] = ellip(___) también devuelve la ganancia general del sistema. Es necesario especificar "ctf" para devolver gS. (desde R2024b)

Ejemplos

contraer todo

Diseñe un filtro elíptico paso bajo de 6.º orden con 10 dB de ondulación de la banda de paso, 50 dB de atenuación de la banda de parada y una frecuencia de borde de la banda de paso de 300 Hz, que, para datos muestreados a 1000 Hz, corresponde a 0.6π rad/muestra. Represente sus respuestas de magnitud y fase. Utilícelo para filtrar una señal aleatoria de 1000 muestras.

fc = 300;
fs = 1000;

[b,a] = ellip(6,10,50,fc/(fs/2));

freqz(b,a,[],fs)

subplot(2,1,1)
ylim([-100 20])

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (Hz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

dataIn = randn(1000,1);
dataOut = filter(b,a,dataIn);

Diseñe un filtro elíptico eliminador de banda de 6.º orden con frecuencias de borde normalizadas de 0.2π y 0.6π rad/muestra, 5 dB de ondulación de la banda de paso y 50 dB de atenuación de la banda de parada. Represente sus respuestas de magnitud y fase. Utilícelo para filtrar datos aleatorios.

[b,a] = ellip(3,5,50,[0.2 0.6],'stop');
freqz(b,a)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

dataIn = randn(1000,1);
dataOut = filter(b,a,dataIn);

Diseñe un filtro elíptico paso alto de 6.º orden con una frecuencia de borde de la banda de paso de 300 Hz, que, para datos muestreados a 1000 Hz, corresponde a 0.6π rad/muestra. Especifique 3 dB de ondulación de la banda de paso y 50 dB de atenuación de la banda de parada. Convierta los ceros, los polos y la ganancia en secciones de segundo orden. Represente las respuestas de magnitud y fase.

[z,p,k] = ellip(6,3,50,300/500,"high");
sos = zp2sos(z,p,k);
freqz(sos)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

Diseñe un filtro elíptico paso banda de 20.º orden con una frecuencia de la banda de paso inferior de 500 Hz y una frecuencia de la banda de paso superior de 560 Hz. Especifique una ondulación de la banda de paso de 3 dB, una atenuación de la banda de parada de 40 dB y una tasa de muestreo de 1500 Hz. Utilice la representación del espacio de estados. Convierta la representación del espacio de estados en secciones de segundo orden. Visualice las respuestas en frecuencia.

fs = 1500;

[A,B,C,D] = ellip(10,3,40,[500 560]/(fs/2));
sos = ss2sos(A,B,C,D);
freqz(sos,[],fs)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (Hz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

Diseñe un filtro idéntico utilizando designfilt. Visualice las respuestas en frecuencia.

d = designfilt("bandpassiir",FilterOrder=20, ...
    PassbandFrequency1=500,PassbandFrequency2=560, ...
    PassbandRipple=3, ...
    StopbandAttenuation1=40,StopbandAttenuation2=40, ...
    SampleRate=fs);
freqz(d,[],fs)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (Hz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

Diseñe un filtro analógico Butterworth paso bajo de quinto orden con una frecuencia de corte de 2 GHz. Multiplique por 2π para convertir la frecuencia en radianes por segundo. Calcule la respuesta en frecuencia del filtro en 4096 puntos.

n = 5;
wc = 2*pi*2e9;
w = 2*pi*1e9*logspace(-2,1,4096)';

[zb,pb,kb] = butter(n,wc,"s");
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,w);
gdb = -diff(unwrap(angle(hb)))./diff(wb);

Diseñe un filtro Chebyshev tipo I de quinto orden con la misma frecuencia de borde y 3 dB de ondulación de la banda de paso. Calcule su respuesta en frecuencia.

[z1,p1,k1] = cheby1(n,3,wc,"s");
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,w);
gd1 = -diff(unwrap(angle(h1)))./diff(w1);

Diseñe un filtro Chebyshev tipo II de quinto orden con la misma frecuencia de borde y 30 dB de atenuación de la banda de parada. Calcule su respuesta en frecuencia.

[z2,p2,k2] = cheby2(n,30,wc,"s");
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,w);
gd2 = -diff(unwrap(angle(h2)))./diff(w2);

Diseñe un filtro elíptico de quinto orden con la misma frecuencia de borde, 3 dB de ondulación de la banda de paso y 30 dB de atenuación de la banda de parada. Calcule su respuesta en frecuencia.

[ze,pe,ke] = ellip(n,3,30,wc,"s");
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,w);
gde = -diff(unwrap(angle(he)))./diff(we);

Diseñe un filtro de Bessel de quinto orden con la misma frecuencia de borde. Calcule su respuesta en frecuencia.

[zf,pf,kf] = besself(n,wc);
[bf,af] = zp2tf(zf,pf,kf);
[hf,wf] = freqs(bf,af,w);
gdf = -diff(unwrap(angle(hf)))./diff(wf);

Represente la atenuación en decibelios. Exprese la frecuencia en gigahercios. Compare los filtros.

fGHz = [wb w1 w2 we wf]/(2e9*pi);
plot(fGHz,mag2db(abs([hb h1 h2 he hf])))
axis([0 5 -45 5])
grid on
xlabel("Frequency (GHz)")
ylabel("Attenuation (dB)")
legend(["butter" "cheby1" "cheby2" "ellip" "besself"])

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Attenuation (dB) contains 5 objects of type line. These objects represent butter, cheby1, cheby2, ellip, besself.

Represente el retardo de grupo en las muestras. Exprese la frecuencia en gigahercios y el retardo de grupo en nanosegundos. Compare los filtros.

gdns = [gdb gd1 gd2 gde gdf]*1e9;
gdns(gdns<0) = NaN;
loglog(fGHz(2:end,:),gdns)
grid on
xlabel("Frequency (GHz)")
ylabel("Group delay (ns)")
legend(["butter" "cheby1" "cheby2" "ellip" "besself"])

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Group delay (ns) contains 5 objects of type line. These objects represent butter, cheby1, cheby2, ellip, besself.

Los filtros Butterworth y Chebyshev Tipo II tienen bandas de paso planas y bandas de transición anchas. Los filtros Chebyshev de tipo I y elíptico se desinflan más rápido pero tienen ondulaciones en la banda de paso. La entrada de frecuencia a la función de diseño Chebyshev Tipo II establece el comienzo de la banda de parada en lugar del final de la banda de paso. El filtro de Bessel tiene un retardo de grupo aproximadamente constante a lo largo de la banda de paso.

Diseñe un filtro elíptico paso alto de noveno orden con una frecuencia de corte de 300 Hz y una tasa de muestreo de 1 000 Hz. La ondulación de banda de paso es de 3 dB y la atenuación de banda de parada es de 50 dB. Devuelva los coeficientes del sistema de filtro como una cascada de secciones de segundo orden.

Wn = 300/(1000/2);
[B,A] = ellip(9,3,50,Wn,"high","ctf")
B = 5×3

    0.4556   -0.4556         0
    0.4556   -0.1816    0.4556
    0.4556    0.1666    0.4556
    0.4556    0.2480    0.4556
    0.4556    0.2667    0.4556

A = 5×3

    1.0000    0.7483         0
    1.0000    1.1351    0.7381
    1.0000    0.7742    0.9161
    1.0000    0.6500    0.9779
    1.0000    0.6189    0.9957

Represente la respuesta de magnitud del filtro.

filterAnalyzer(B,A)

Argumentos de entrada

contraer todo

Orden del filtro, especificado como un escalar entero menor o igual a 500. En los diseños de paso banda y eliminador de banda, n representa la mitad del orden del filtro.

Tipos de datos: double

Ondulación pico a pico de banda de paso, especificada como un escalar positivo en decibelios.

Si su especificación, ℓ, está en unidades lineales, puede convertirla a decibelios utilizando Rp = 40 log10((1+ℓ)/(1–ℓ)).

Tipos de datos: double

Atenuación de la banda de parada relativa al valor pico de la banda de paso, especificada como un escalar positivo en decibelios.

Si su especificación, ℓ, está en unidades lineales, puede convertirla a decibelios utilizando Rs = –20 log10ℓ.

Tipos de datos: double

Frecuencia de borde de banda de paso, especificada como un escalar o un vector de dos elementos. La frecuencia de borde de la banda de paso es la frecuencia a la que la respuesta de magnitud del filtro es Rp decibelios. Con valores menores de ondulación de la banda de paso, Rp, y valores mayores de atenuación de la banda de parada, Rs, se obtienen bandas de transición más anchas.

  • Si Wp es un escalar, ellip diseña un filtro paso bajo o paso alto con una frecuencia de borde Wp.

    Si Wp es el vector de dos elementos [w1 w2], donde w1 < w2, ellip diseña un filtro paso banda o eliminador de banda con una frecuencia de borde inferior w1 y una frecuencia de borde superior w2.

  • Para los filtros digitales, las frecuencias de borde de banda de parada deben estar entre 0 y 1, donde 1 corresponde a la tasa de Nyquist, la mitad de la tasa de muestreo o π rad/muestra.

    Para los filtros analógicos, las frecuencias de borde de banda de paso deben expresarse en radianes por segundo y pueden tomar cualquier valor positivo.

Tipos de datos: double

Tipo de filtro, especificado como uno de los siguientes:

  • "low" especifica un filtro paso bajo con frecuencia de borde de banda de paso Wp. "low" es el valor predeterminado para el escalar Wp.

  • "high" especifica un filtro paso alto con frecuencia de borde de banda de paso Wp.

  • "bandpass" especifica un filtro paso banda de orden 2n si Wp es un vector de dos elementos. "bandpass" es el valor por defecto cuando Wp tiene dos elementos.

  • "stop" especifica un filtro eliminador de banda de orden 2n si Wp es un vector de dos elementos.

Argumentos de salida

contraer todo

Coeficientes de la función de transferencia del filtro, devueltos como vectores fila. Dado el orden del filtro n, la función devuelve b y a con r muestras, donde r = n+1 para filtros paso bajo y paso alto, y r = 2*n+1 para filtros paso banda y eliminador de banda.

La función de transferencia se expresa en términos de b = [b1 b2br] y a = [a1 a2ar] como uno de estos valores:

  • H(z)=b1+b2z1++brz(r1)a1+a2z1++arz(r1) para filtros digitales.

  • H(s)=b1sr1+b2sr2++bra1sr1+a2sr2++ar para filtros analógicos.

Tipos de datos: double

Ceros, polos y ganancia del filtro, devueltos como dos vectores columna y un escalar. Dado el orden del filtro n, la función devuelve z y p con r muestras, donde r = n para filtros paso bajo y paso alto, y r = 2*n para filtros paso banda y eliminador de banda.

La función de transferencia se expresa en términos de z = [z1 z2zr], p = [p1 p2pr] y k como uno de estos valores:

  • H(z)=k(1z1z1)(1z2z1)(1zrz1)(1p1z1)(1p2z1)(1prz1) para filtros digitales.

  • H(s)=k(sz1)(sz2)(szr)(sp1)(sp2)(spr) para filtros analógicos.

Tipos de datos: double

Representación de espacios de estados del filtro, devuelta como matrices. Si r = n para los diseños de paso bajo y paso alto, y r = 2n para los filtros paso banda y eliminador de banda, entonces A es r × r, B es r × 1, C es 1 × r y D es 1 × 1.

Las matrices del espacio de estados relacionan el vector de estado x, la entrada u y la salida y a través de uno de estos sistemas de ecuación.

  • Para filtros digitales:

    x(k+1)=Ax(k)+Bu(k)y(k)=Cx(k)+Du(k).

  • Para filtros analógicos:

    x˙=Ax+Buy=Cx+Du.

Tipos de datos: double

Desde R2024b

Coeficientes de función de transferencia en cascada (CTF), devueltos como un vector fila o matriz. B y A indican los coeficientes de numerador y denominador de la función de transferencia en cascada, respectivamente.

Los tamaños para B y A son L por (m+1) y L por (n+1), respectivamente. La función devuelve la primera columna de A como 1, de modo que A(1)=1 cuando A es un vector fila.

  • L representa el número de secciones del filtro.

  • m representa el orden de los numeradores del filtro.

  • n representa el orden de los denominadores del filtro.

La función ellip devuelve los coeficientes CTF con estas especificaciones de orden:

  • m = n = 2 para filtros paso bajo y paso alto.

  • m = n = 4 para filtros paso banda y eliminador de banda.

Nota

Para personalizar el cálculo de los coeficientes CTF, como establecer un orden diferente en los coeficientes CTF o personalizar el escalado de ganancia, especifique que se devuelva z,p,k y utilice zp2ctf para obtener B,A.

Para obtener más información sobre el formato de la función de transferencia en cascada y las matrices de coeficientes, consulte Devolver filtros digitales en formato CTF.

Desde R2024b

Ganancia general del sistema, devuelta como escalar de valor real.

  • Si se especifica que se devuelva gS, la función ellip normaliza los coeficientes del numerador de modo que la primera columna de B es 1 y devuelve la ganancia general del sistema en gS.

  • Si no se especifica que se devuelva gS, la función ellip distribuye uniformemente la ganancia del sistema por todas las secciones del sistema utilizando la función scaleFilterSections.

Más acerca de

contraer todo

Algoritmos

Los filtros elípticos ofrecen características de descenso más pronunciadas que los filtros Butterworth o Chebyshev, pero son equiripple tanto en la banda de paso como en la banda de parada. En general, los filtros elípticos cumplen determinadas especificaciones de rendimiento con el menor orden de cualquier tipo de filtro.

ellip utiliza un algoritmo de cinco pasos:

  1. Encuentra los polos, ceros y ganancia del prototipo analógico de paso bajo utilizando la función ellipap.

  2. Convierte los polos, los ceros y la ganancia en forma de espacio de estado.

  3. Si es necesario, utiliza una transformación del espacio de estados para convertir el filtro paso bajo en un filtro paso banda, paso alto o eliminador de banda con las restricciones de frecuencia deseadas.

  4. Para el diseño de filtros digitales, utiliza bilinear para convertir el filtro analógico en un filtro digital a través de una transformación bilineal con preconfiguración de frecuencia. Un cuidadoso ajuste de la frecuencia permite que los filtros analógicos y los digitales tengan la misma magnitud de respuesta en frecuencia en Wp o w1 y w2.

  5. Convierte el filtro de espacio de estados de nuevo en una función de transferencia o en un formato cero-polo-ganancia, según sea necesario.

Referencias

[1] Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo