¿Por qué esta transformación bilineal manual produce resultados diferentes a los de Matlab?

10

Tengo un filtro Butterworth de primer orden con la frecuencia de corte . Su función de transferencia es entoncesωc

H(s)=ωcs+ωc

Usando la transformación bilineal para encontrar una (¿cómo se llama esa función?), ObtengoH(z)

H(z)=ωc2Tz1z+1+ωc=ωcz+ωc(2T+ωc)z+ωc2T

Sin embargo, no puedo conciliar este resultado con lo que está haciendo Matlab. Parece mal, no importa qué valor de . Supongo que y debajo están los coeficientes de .TBAH(z)

>> [B,A] = butter(1,0.5)
B = 0.5000    0.5000
A = 1.0000   -0.0000
>> [B,A] = butter(1,0.6)
B = 0.5792    0.5792
A = 1.0000    0.1584
>> [B,A] = butter(1,0.7)
B = 0.6625    0.6625
A = 1.0000    0.3249
>> [B,A] = butter(1,0.8)
B = 0.7548    0.7548
A = 1.0000    0.5095

¿Qué estoy malentendido?

Andreas
fuente
MATLAB no utiliza la conversión de analógico a digital. Diseña el filtro digitalmente, por lo tanto, la idea de transformación bilineal puede no ser aplicable.
Phonon
1
@Phonon: Esta respuesta parece indicar que Matlab usa la transformación bilineal de alguna manera.
Andreas
Tarde al juego aquí, pero todas las funciones en mayúscula H de z / s / \ omega generalmente se llaman función de transferencia. Cuando el argumento es tiempo o muestras, se llama respuesta de impulso y generalmente está en minúscula, h. Entonces, la función de transferencia es la transformación (Z, Fourier, Laplace dependiendo de la aplicación) de la respuesta al impulso.
Emanuel Landeholm

Respuestas:

10

Un par de cosas:

Antes de realizar la sustitución , debe preformar la frecuencia de corte realizando la sustitución:s=2Tz1z+1

ωc,w=2Ttan(ωcT2)

donde es la frecuencia de corte deformada. Esto es necesario porque la transformación bilineal asigna el plano de la mitad izquierda en el dominio de Laplace (usado en el diseño de filtro analógico) al círculo unitario en el dominio de una manera no lineal. Por lo tanto, a medida que se acerca a la tasa de Nyquist (frecuencias digitales de ), la aproximación al prototipo de filtro analógico se vuelve inexacta.ωc,wz±π

También, el segundo parámetro que está de paso a la butterfunción es la frecuencia de corte normalizada, no el intervalo de muestreo . La frecuencia normalizada utilizada por esa función está en el intervalo y es igual a la relación de la frecuencia de corte deseada a la tasa de Nyquist:T(0,1)

ωn=ωc2πfs2

ωn=ωcπfs

ωn=ωcTπ
Jason R
fuente
¡Gracias! Ahora obtengo los coeficientes correctos. Aquí, sustituí por en la expresión de . Esto funcionó porque sé dónde afecta la frecuencia de corte al filtro de Butterworth. ¿Qué pasa si tuviera un filtro general y supiera los polos (y ceros) de ? ¿Cómo sabría qué valores sustituir? o m e g a c , w H ( z ) H ( s )ωcomegac,wH(z)H(s)
Andreas
¿Porque supongo que la transformación bilineal de un racional podría hacerse conociendo solo la frecuencia de la muestra, no la frecuencia de corte (normalizada)? H(s)
Andreas
Puede usar la transformación bilineal para mapear cualquier sistema de dominio en una aproximación en el dominio . No es necesario realizar una deformación previa, pero se aplica la advertencia de que el sistema de tiempo discreto resultante es solo una aproximación al sistema analógico. La deformación previa de cualquier frecuencia de interés le permite "estirar" el mapeo para que la región de la banda de frecuencia que más le interesa tenga la menor distorsión posible del filtro prototipo. zsz
Jason R
5

Al abrir el código para la butterfunción de MATLAB , vemos que usa pre-warping de frecuencia :

%# step 1: get analog, pre-warped frequencies
if ~analog,
    fs = 2;
    u = 2*fs*tan(pi*Wn/fs);
else
    u = Wn;
end
Phonon
fuente