ini hanyalah tambahan untuk jawaban jojek yang lebih umum dan sangat baik ketika matematika presisi ganda digunakan. ketika ada kurang presisi, ada "masalah kosinus" yang muncul ketika salah satu frekuensi dalam respons frekuensi sangat rendah (jauh lebih rendah dari Nyquist) dan juga ketika frekuensi resonansi filter sangat rendah.
ketika Anda menghitung besarnya (kuadrat) respons frekuensi eksponensial kompleks ini akan dikonversi menjadi sinus dan cosinus, tetapi ketika matematika dihidupkan, hanya cosinus yang akan bertahan. ini harus jelas karena besarnya adalah fungsi genapFrekuensi wrt dan hanya cosinus yang berfungsi.| H ( e - j ω ) | = | H ( e j ω ) ||H(ejω)|2|H(e−jω)|=|H(ejω)|
pertimbangkan identitas trigonometri ini:
cos(ω) = 1−2sin2(ω2)
sekarang, melihat sisi kanan persamaan, semua informasi mengenai frekuensi berada dalam istilah yang dikurangi dari 1. dan istilah ini menjadi sangat kecil sebagai . sangat kecil sehingga istilah dan informasi frekuensi dalam istilah itu hilang ketika istilah (atau negatif) ditambahkan ke 1. ini adalah kasus bahkan dengan floating point, tetapi lebih sedikit masalah dengan mengapung presisi ganda. tetapi beberapa dari kita memasukkan fungsi respons frekuensi ini ke dalam gir mungkin tidak memiliki sumber daya titik mengambang presisi ganda, atau titik mengambang apa pun.sin2(ω2)ω→0
jadi, apa yang telah saya lakukan adalah menggunakan identitas trigonometri di atas dan menghilangkan semua istilah cosinus, pada dasarnya menggantinya dengan istilah yang tampak seperti dan beberapa konstanta yang digabungkan dengan konstanta lainnya. saya akan menunjukkan kepada Anda jawaban untuk kasus filter IIR orde 2 (alias "biquad"):sin2(ω2)
H(z)=b0+b1z−1+b2z−2a0+a1z−1+a2z−2
yang memiliki respons frekuensi yang kompleks
H(ejω)=b0+b1e−jω+b2e−j2ωa0+a1e−jω+a2e−j2ω
yang memiliki besaran kuadrat:
|H(ejω)|2=|b0+b1e−jω+b2e−j2ω|2|a0+a1e−jω+a2e−j2ω|2=(b0+b1cos(ω)+b2cos(2ω))2+(b1sin(ω)+b2sin(2ω))2(a0+a1cos(ω)+a2cos(2ω))2+(a1sin(ω)+a2sin(2ω))2=b20+b21+b22+2b1(b0+b2)cos(ω)+2b0b2cos(2ω)a20+a21+a22+2a1(a0+a2)cos(ω)+2a0a2cos(2ω)
jadi, orang bisa melihat bahwa besarnya respons frekuensiadalah fungsi bahkan simetri dan hanya bergantung pada cosinus dan . untuk sangat rendah , nilai-nilai cosinus tersebut sangat dekat dengan sehingga, dengan titik tetap atau mengambang presisi tunggal , ada beberapa bit yang tersisa yang membedakan nilai-nilai tersebut dari . itu adalah "masalah kosinus" .|H(ejω)|cos(ω)cos(2ω)ω11
menggunakan identitas trigonometri di atas, Anda mendapatkan besarnya kuadrat:
|H(ejω)|2=b20+b21+b22+2b1(b0+b2)cos(ω)+2b0b2cos(2ω)a20+a21+a22+2a1(a0+a2)cos(ω)+2a0a2cos(2ω)=b20+b21+b22+2b1(b0+b2)(1−2sin2(ω2))+2b0b2(1−2sin2(ω))a20+a21+a22+2a1(a0+a2)(1−2sin2(ω2))+2a0a2(1−2sin2(ω))=b20+b21+b22+2b1(b0+b2)(1−2sin2(ω2))+2b0b2(2cos2(ω)−1)a20+a21+a22+2a1(a0+a2)(1−2sin2(ω2))+2a0a2(2cos2(ω)−1)=b20+b21+b22+2b1(b0+b2)(1−2sin2(ω2))+2b0b2(2(1−2sin2(ω2))2−1)a20+a21+a22+2a1(a0+a2)(1−2sin2(ω2))+2a0a2(2(1−2sin2(ω2))2−1)=b20+b21+b22+2b1(b0+b2)(1−2ϕ)+2b0b2(2(1−2ϕ)2−1)a20+a21+a22+2a1(a0+a2)(1−2ϕ)+2a0a2(2(1−2ϕ)2−1)=b20+b21+b22+2b1(b0+b2)(1−2ϕ)+2b0b2(1−8ϕ+8ϕ2)a20+a21+a22+2a1(a0+a2)(1−2ϕ)+2a0a2(1−8ϕ+8ϕ2)=b20+b21+b22+2b1b0+2b1b2−4(b1b0+b1b2)ϕ+2b0b2−16b0b2ϕ+16b0b2ϕ2a20+a21+a22+2a1a0+2a1a2−4(a1a0+a1a2)ϕ+2a0a2−16a0a2ϕ+16a0a2ϕ2=(b20+b21+b22+2b1b0+2b1b2+2b0b2)−4(b1b0+b1b2−4b0b2)ϕ+16b0b2ϕ2(a20+a21+a22+2a1a0+2a1a2+2a0a2)−4(a1a0+a1a2−4a0a2)ϕ+16a0a2ϕ2=14(b20+b21+b22+2b1b0+2b1b2+2b0b2)−(b1b0+b1b2−4b0b2)ϕ+4b0b2ϕ214(a20+a21+a22+2a1a0+2a1a2+2a0a2)−(a1a0+a1a2−4a0a2)ϕ+4a0a2ϕ2=(b0+b1+b22)2−ϕ(4b0b2(1−ϕ)+b1(b0+b2))(a0+a1+a22)2−ϕ(4a0a2(1−ϕ)+a1(a0+a2))
di manaϕ≜sin2(ω2)
jika gigi Anda berniat untuk merencanakan ini sebagai dB, maka akan keluar sebagai
20log10|H(ejω)| = 10log10((b0+b1+b22)2−ϕ(4b0b2(1−ϕ)+b1(b0+b2)))−10log10((a0+a1+a22)2−ϕ(4a0a2(1−ϕ)+a1(a0+a2)))
jadi divisi Anda berubah menjadi pengurangan, tetapi Anda harus dapat menghitung logaritma ke beberapa basis atau yang lain. secara numerik, Anda akan memiliki lebih sedikit masalah dengan ini untuk frekuensi rendah daripada melakukannya dengan cara yang jelas.