Contenido principal

bilinear

Método de transformación bilineal para la conversión de filtros analógicos a digitales

Descripción

Utilice esta función para convertir una función de transferencia de tiempo continuo a un equivalente de tiempo discreto.

[zd,pd,kd] = bilinear(z,p,k,fs) convierte la función de transferencia del dominio s en forma de polos y ceros especificada por z, p, k y tasa de muestreo fs a un equivalente discreto.

ejemplo

[numd,dend] = bilinear(num,den,fs) convierte la función de transferencia del dominio s especificada por el numerador num y el denominador den a un equivalente discreto.

[Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,fs) convierte el sistema de tiempo continuo y espacio de estados en matrices A, B, C y D a un sistema de tiempo discreto.

ejemplo

[___] = bilinear(___,fp) usa el parámetro fp como frecuencia de "coincidencia" para especificar el prewarping.

ejemplo

Ejemplos

contraer todo

Diseñe el prototipo para un filtro Chebyshev tipo I de décimo orden con 6 dB de ondulación en la banda de paso. Convierta el prototipo en una forma de espacio de estados.

[z,p,k] = cheb1ap(10,6);
[A,B,C,D] = zp2ss(z,p,k);  

Transforme el prototipo en un filtro paso banda tal que el filtro digital equivalente tenga una banda de paso con bordes a 100 Hz y 500 Hz cuando se muestrea a una tasa fs=2 kHz. Para la transformación, especifique los bordes de banda prewarped u1 y u2 en rad/s, una frecuencia central Wo=u1u2 y un ancho de banda Bw=u2-u1.

fs = 2e3;

f1 = 100; u1 = 2*fs*tan(f1*(2*pi/fs)/2);
f2 = 500; u2 = 2*fs*tan(f2*(2*pi/fs)/2);

[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,sqrt(u1*u2),u2-u1);

Calcule la respuesta en frecuencia del filtro analógico mediante freqs. Represente la respuesta de magnitud y los bordes de banda de frecuencia prewarped.

[b,a] = ss2tf(At,Bt,Ct,Dt);
[h,w] = freqs(b,a,2048);

plot(w,mag2db(abs(h)))
xline([u1 u2],"-",["Lower" "Upper"]+" passband edge", ...
    LabelVerticalAlignment="middle")

ylim([-165 5])
xlabel("Angular frequency (rad/s)")
ylabel("Magnitude (dB)")
grid

Figure contains an axes object. The axes object with xlabel Angular frequency (rad/s), ylabel Magnitude (dB) contains 3 objects of type line, constantline.

Utilice la función bilinear para crear un filtro digital paso banda con tasa de muestreo fs.

[Ad,Bd,Cd,Dd] = bilinear(At,Bt,Ct,Dt,fs);

Convierta el filtro digital de una forma de espacio de estados a secciones de segundo orden y calcule la respuesta en frecuencia con freqz. Represente la respuesta de magnitud y los bordes de banda de paso.

[hd,fd] = freqz(ss2sos(Ad,Bd,Cd,Dd),2048,fs);

plot(fd,mag2db(abs(hd)))
xline([f1 f2],"-",["Lower" "Upper"]+" passband edge", ...
    LabelVerticalAlignment="middle")

ylim([-165 5])
xlabel("Frequency (Hz)")
ylabel("Magnitude (dB)")
grid

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel Magnitude (dB) contains 3 objects of type line, constantline.

Diseñe un filtro analógico paso bajo elíptico de sexto orden con 5 dB de ondulación en la banda de paso, una banda de parada de 90 dB y una frecuencia de corte fc=20 Hz.

fc = 20;

[z,p,k] = ellip(6,5,90,2*pi*fc,"s");

Visualice la respuesta de magnitud del filtro analógico elíptico. Muestre la frecuencia de corte.

[num,den] = zp2tf(z,p,k);
[h,w] = freqs(num,den,1024);

plot(w/(2*pi),mag2db(abs(h)))
xline(fc,Color=[0.8500 0.3250 0.0980])

axis([0 100 -125 5])
grid
legend(["Magnitude response" "Cutoff frequency"])
xlabel("Frequency (Hz)")
ylabel("Magnitude (dB)")

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel Magnitude (dB) contains 2 objects of type line, constantline. These objects represent Magnitude response, Cutoff frequency.

Utilice la función bilinear para transformar el filtro analógico en un filtro IIR de tiempo discreto. Especifique una tasa de muestreo de fs=200 Hz y una frecuencia de coincidencia de prewarp de fp=20 Hz.

fs = 200;
fp = 20;

[zd,pd,kd] = bilinear(z,p,k,fs,fp);

Visualice la respuesta de magnitud del filtro de tiempo discreto. Muestre la frecuencia de corte.

[hd,fd] = freqz(zp2sos(zd,pd,kd),[],fs);

plot(fd,mag2db(abs(hd)))
xline(fc,Color=[0.8500 0.3250 0.0980])

axis([0 100 -125 5])
grid
legend(["Magnitude response" "Cutoff frequency"])
xlabel("Frequency (Hz)")
ylabel("Magnitude (dB)")

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel Magnitude (dB) contains 2 objects of type line, constantline. These objects represent Magnitude response, Cutoff frequency.

Argumentos de entrada

contraer todo

Ceros, polos y ganancia de la función de transferencia del dominio s, especificada como dos vectores columna y un escalar.

Tasa de muestreo, especificada como un escalar positivo.

Coeficientes de numerador y denominador de la función de transferencia analógica, especificados como vectores fila.

Representación de espacios de estados en el dominio s, especificada como matrices. Si el sistema tiene entradas p y salidas q y está descrito por variables de estado n, A es n por n, B es n por p, C es q por n y D es q por p.

Tipos de datos: single | double

Frecuencia de coincidencia, especificada como escalar positivo.

Argumentos de salida

contraer todo

Ceros, polos y ganancia de la función de transferencia del dominio z, devueltos como vectores columna y un escalar.

Coeficientes de numerador y denominador de la función de transferencia digital, devueltos como vectores fila.

Representación de espacios de estados en el dominio z, devuelta como matrices. Si el sistema está descrito por variables de estado n y tiene salidas q, Ad es n por n, Bd es n por 1, Cd es q por n y Dd es q por 1.

Tipos de datos: single | double

Algoritmos

contraer todo

La transformación bilineal es una aplicación matemática de variables. En el filtrado digital, es un método estándar para aplicar el plano s o analógico en el plano z o digital. Transforma los filtros analógicos, diseñados utilizando técnicas clásicas de diseño de filtros, en sus equivalentes discretos.

La transformación bilineal aplica el plano s al plano z mediante

H(z)=H(s)|s=2fs×z1z+1.

Esta transformación aplica el eje jΩ (de Ω = –∞ a +∞) repetidamente alrededor del círculo de la unidad (e, de ω = –π a π) mediante

ω=2tan1(Ω2fs).

bilinear puede aceptar un parámetro opcional fp que especifica la predeformación. fp, en hercios, indica una frecuencia de coincidencia para la que las respuestas en frecuencia antes y después de la asignación coinciden por completo. En el modo preconfigurado, la transformación bilineal aplica el plano s al plano z con

H(z)=H(s)|s=2πfptan(πfpfs)×z1z+1.

Con la opción de preconfiguración, bilinear aplica el eje jΩ axis (de Ω = –∞ a +∞) repetidamente alrededor del círculo de la unidad (e, de ω = –π a π) mediante

ω=2tan1(Ωtan(πfpfs)2πfp).

En modo de predeformación, bilinear hace coincidir la frecuencia 2πfp (en radianes por segundo) del plano s con la frecuencia normalizada 2πfpp/fs (en radianes por segundo) del plano z.

La función bilinear funciona con tres representaciones diferentes del sistema lineal: cero-polo-ganancia, función de transferencia y forma de espacio de estados.

bilinear usa uno de los dos algoritmos, dependiendo del formato del sistema lineal de entrada que se proporcione. Un algoritmo funciona en una forma de cero-polo-ganancia y el otro en una forma de espacio de estados. Para representaciones de la función de transferencia, bilinear convierte a forma de espacio de estados, realiza la transformación y convierte el sistema de espacio de estados resultante de nuevo a forma de función de transferencia.

Referencias

[1] Al-Saggaf, Ubaid M., and Gene F. Franklin. “Model Reduction via Balanced Realizations: An Extension and Frequency Weighting Techniques.” IEEE Transactions on Automatic Control 33, no. 7 (July 1988): 687–92. https://doi.org/10.1109/9.1280.

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

[3] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987.

[4] Tustin, Arnold. “A Method of Analysing the Behaviour of Linear Systems in Terms of Time Series.” Journal of the Institution of Electrical Engineers - Part IIA: Automatic Regulators and Servo Mechanisms 94, no. 1 (May 1947): 130–42. https://doi.org/10.1049/ji-2a.1947.0020.

Capacidades ampliadas

expandir todo

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

Historial de versiones

Introducido antes de R2006a

Consulte también

| | | |