Mengapa transformasi bilinear manual ini menghasilkan hasil yang berbeda dari Matlab?

10

Saya mendapat filter Butterworth orde pertama dengan frekuensi cutoff . Fungsi transfernya kemudianωc

H(s)=ωcs+ωc

Menggunakan transformasi bilinear untuk menemukan (apa fungsi itu disebut?), Saya dapatkanH(z)

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

Namun, saya tidak bisa merekonsiliasi hasil ini dengan apa yang dilakukan Matlab. Tampaknya salah, tidak peduli apa nilai . Saya berasumsi bahwa dan di bawah ini adalah koefisien H ( z ) .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

Apa yang saya salah pahami?

Andreas
sumber
MATLAB tidak menggunakan konversi analog ke digital. Ini mendesain filter secara digital, oleh karena itu ide transformasi bilinear mungkin tidak berlaku.
Phonon
1
@ Phonon: Jawaban ini tampaknya menunjukkan bahwa Matlab menggunakan transformasi bilinear dalam beberapa cara.
Andreas
Terlambat ke permainan di sini tetapi semua fungsi huruf besar H dari z / s / \ omega biasanya disebut fungsi transfer. Ketika argumennya waktu atau sampel, itu disebut respon impuls dan biasanya lebih rendah, h. Jadi fungsi transfer adalah transformasi (Z, Fourier, Laplace tergantung aplikasi) dari respon impuls.
Emanuel Landeholm

Jawaban:

10

Beberapa hal:

Sebelum melakukan substitusi s=2Tz1z+1

ωc,w=2Ttan(ωcT2)

ωc,wz±π

butterT(0,1)

ωn=ωc2πfs2

ωn=ωcπfs

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

Saat membuka kode untuk butterfungsi MATLAB , kita melihat bahwa ia menggunakan frekuensi pra-pembengkokan :

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