今天檢查了以往設計的濾波器,可是發現只有程序中保留的濾波器系數,而沒有了原先設計時的濾波器頻率指標。看著測試結果,老大懷疑濾波做的不對,所以檢查了下。
重新用MATLAB設計濾波器的時候,發現IIR要比FIR的頻率響應好很多,所以干脆換成IIR得了。可是IIR設計出的系數總是一個SOS matrix,在網上找了半天也沒查出它究竟是什么意思。后來在老大的提示下利用convert to single section,終于出現了我熟悉的num和den,帶入程序實驗,發現數據慢慢增長,以致最后出現
1.#
INF0000 (順便說一個這個
1.#
INF0000 ,網上的提示大都是說你除了0,而實際上是,當你的數據大得超過你的變量類型的范圍時,也出現這種情況。我剛開始float出現
1.#
INF0000 ,后來把float改為double,結果解決了暫時問題,最終還是會出現
1.#
INF0000 ,因為濾波器的錯誤,使得我的數值不斷的增長。)。
最終還是向別人請教解決了IIR濾波器的設計問題。也就是利用matlab的fdatool設計之后,不能直接看filter coefficients,而是通過realise model ,出現了一個simulink類似的濾波器model塊,打開該model后,可以看到濾波器的結構,而且每個系數都可以打開來查看,然后根據該濾波器的結構,就可以來實現filter的編程了。
唉,現在網上書上好多IIR濾波器的設計問題,可是鮮有文章提到這最后關鍵的一步,不知道是它太簡單了還是大家都沒有用到過它。總之我的教訓時,直接用filter coefficients設計的濾波器是不正確的,因為我的數據說明這個問題。