Warum liefert diese manuelle bilineare Transformation andere Ergebnisse als die von Matlab?

10

Ich habe ein Butterworth-Filter erster Ordnung mit der Grenzfrequenz . Seine Übertragungsfunktion ist dannωc

H(s)=ωcs+ωc

Wenn ich die bilineare Transformation verwende, um ein (wie heißt diese Funktion?), Erhalte ichH(z)

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

Ich kann dieses Ergebnis jedoch nicht mit dem vereinbaren, was Matlab tut. Es scheint falsch, egal welcher Wert von . Ich gehe davon aus, dass und unten die Koeffizienten von H ( z ) sind .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

Was missverstehe ich?

Andreas
quelle
MATLAB verwendet keine Analog-Digital-Wandlung. Der Filter wird digital entworfen, daher ist die Idee der bilinearen Transformation möglicherweise nicht anwendbar.
Phonon
1
@Phonon: Diese Antwort scheint darauf hinzudeuten, dass Matlab die bilineare Transformation auf irgendeine Weise verwendet.
Andreas
Spät zum Spiel hier, aber alle Großbuchstabenfunktionen H von z / s / \ omega werden normalerweise als Übertragungsfunktion bezeichnet. Wenn das Argument Zeit oder Abtastwerte ist, wird es als Impulsantwort bezeichnet und normalerweise in Kleinbuchstaben geschrieben, h. Die Übertragungsfunktion ist also die Transformation (Z, Fourier, Laplace je nach Anwendung) der Impulsantwort.
Emanuel Landeholm

Antworten:

10

Ein paar Dinge:

s=2Tz1z+1

ωc,w=2Ttan(ωcT2)

ωc,wz±π

butterT(0,1)

ωn=ωc2πfs2

ωn=ωcπfs

ωn=ωcTπ
Jason R.
quelle
ωcomegac,wH(z)H(s)
H(s)
sz
5

Wenn Sie den Code für MATLAB butterÖffnungsfunktion, sehen wir , dass es Frequenz verwendet Pre-Warping :

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