Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

bilinear

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

Descripción

ejemplo

[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.

[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.

ejemplo

[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.

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 prewarping. fp, en hercios, indica una frecuencia "de coincidencia" para la que las respuestas en frecuencia antes y después de la aplicació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 preconfigurado, bilinear hace coincidir la frecuencia 2πfp (en radianes por segundo) del plano s con la frecuencia normalizada 2πfp/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.

Algoritmo de cero-polo-ganancia

Para un sistema en forma de cero-polo-ganancia, bilinear lleva a cabo cuatro pasos:

  1. Si fp está presente, realiza el prewarping:

    fp = 2*pi*fp;
    fs = fp/tan(fp/fs/2)
    

    en caso contrario, fs = 2*fs.

  2. Elimina cualquier cero en ±∞ mediante

    z = z(finite(z));
    
  3. Transforma los ceros, los polos y la ganancia mediante

    pd = (1+p/fs)./(1-p/fs);    % Do bilinear transformation
    zd = (1+z/fs)./(1-z/fs);
    kd = real(k*prod(fs-z)./prod(fs-p));
    
  4. Añade ceros adicionales en -1 para que el sistema resultante tenga un orden equivalente de numerador y denominador.

Algoritmo de espacio de estados

Un sistema analógico en forma de espacio de estados viene dado por

x˙=Ax+Buy=Cx+Du

. El sistema se convierte a forma discreta utilizando ecuaciones de espacio de estados de la siguiente manera:

x[n+1]=Adx[n]+Bdu[n],y[n]     =Cdx[n]+Ddu[n].

Para convertir un sistema analógico a forma de espacio de estados, bilinear lleva a cabo dos pasos:

  1. Si fp está presente, deja

    λ=πfptan(πfp/fs).

    Si fp no está presente, deja λ=fs.

  2. Calcula Ad, Bd, Cd y Dd en términos de A, B, C y D mediante

    Ad=(IA12λ)1(I+A12λ),Bd=1λ(IA12λ)1B,Cd=1λC(IA12λ)1,Dd=12λC(IA12λ)1B+D.

Función de transferencia

Para un sistema en forma de función de transferencia, bilinear convierte una función de transferencia de dominio s dada por num y den a un equivalente discreto. Los vectores fila num y den especifican los coeficientes de numerador y denominador, respectivamente, en potencias descendentes de s. Deje que B(s) sea el polinomio numerador y A(s), el polinomio denominador. La función de transferencia es:

B(s)A(s)=B(1)sn++B(n)s+B(n+1)A(1)sm++A(m)s+A(m+1)

fs es la tasa de muestreo en hercios. bilinear devuelve el equivalente discreto en vectores fila numd y dend en potencias descendentes de z (potencias ascendentes de z–1). fp es la frecuencia de coincidencia opcional, en hercios, para el prewarping.

Referencias

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

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

Capacidades ampliadas

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

| | | |