工具:
matlab filterdesigner 工具箱
vivado FIR IP核
實現:
1.matlab設計與測試
先用matlab設計目標濾波器,得到濾波器的抽頭系數。
如圖,根據需求選擇 低通/高通/帶通/帶阻。
由于vivado用的是FIR IP核,所以設計方法選擇FIR,FIR中有多種選項,根據需求選擇即可。
濾波器階數,可以指定階數也可以選擇最小階(這里最小階應該是指保證性能的情況下的最小階數)。階數越高性能越好,耗用資源越多。
頻率設定:pass 和stop就是過渡帶的起始點,而Fs很重要,硬性要求是要大于兩倍的max(Fpass ,Fstop),但是根據測試的結果,Fs只做到上述最低要求的話(剛好等于兩倍或者略大一點),有時根本濾不了目標信號。所以要在仿真中調試Fs得到理想結果。
賦值設定:Apass一般不用改,就是允許通過的信號的強度;Astop可以根據需求改,會影響濾波效果與占用資源的大小。
設置完濾波器參數后,修改濾波器算法為定點,并根據需求改字長。
隨后生成濾波器函數用于在matlab中調用:
便可進行仿真,測試。
2.vivado功能性仿真
在matlab工具箱中生成抽頭系數的coe文件。
在IP核中,在cofficient file中選擇生成的coe文件,其他不用修改,filter type選擇單時鐘即可,
在時鐘這塊修改頻率Fs,與matlab工具箱中設置的Fs大小一致。
implement 按照圖中設置,確定符號類型和數據位寬。
即可完成fir ip核的設置,接口信號也簡單,就是輸入信號和輸出信號,時鐘與Fs頻率保持一致。
測試結果:
sin a : ?3Mhz
sin b:4Mhz
sin ab : 1MHz,7MHz。
fir 輸出:1MHz
遇到的坑:
在vivdado上搗鼓了很久,濾波器用的采樣頻率為10MHz,輸入信號分別為3MHz、4MHz,無論用高通,低通,帶通,都沒法濾出想要的信號,所有的信號都沒被過濾,以為是vivado信號設置的問題,最后用matlab仿真發現,濾波器設置用10MHz的采樣頻率本身就不行,用50MHz就可以,(不知道為啥,10MHz已經滿足奈奎斯特采樣律了),仿真還是有用的,找到了問題。