fdatool的濾波器設計


作者:桂。

時間:2017-08-15  20:28:11

鏈接:http://www.cnblogs.com/xingshansi/p/7367738.html 


前言

  本文主要記錄濾波器設計的基本流程,涉及到定點/浮點的轉化。

一、Fdatool基本操作

  Command輸入fdatool,例如FIR采用窗函數法設計16階低通filter,fc(frequency cutoff) = 10800Hz,fs = 48000Hz,輸入參數: 

需要注意的是由於存在常數項,N階Filter用N-1階設計即可。

設計完濾波器並不是直接導出,通常需要兩個后處理操作:

1)驗證濾波器是否符合要求:幅頻響應、相頻響應,零極點圖、群延遲等等,都可以通過上方的Analysis點擊查看。

2)系數量化。通常DSP/FPGA需要定點操作,點擊左方的量化,進行位數設定。

設計完成之后,可以File——Export,將濾波器參數導出,導出的濾波器格式可以自行選擇。

左方的圖標功能依次(自上而下)為:

1)Create a multi-rate filter:創建多速率濾波器;

2)Transform filter:濾波器轉換;

3)Set quantization parameters:設置量化參數;

4)Realize Model:實現模型;

5)Pole-zero editor:零極點編輯器;

6)import filter:導入濾波器;

7)Design filter:設計濾波器;

 

二、定點/浮點轉化

  定點就是位數固定,浮點通常表示為:2.2e8,即xyz的形式,x:常數,y:基底,z:指數。浮點轉換為定點在MATLAB中稱為量化,使用quantizer和quantize兩個函數完成,通常為了便於表示,也會使用num2bin,num2int,num2hex等指令。

1-quantizer

  用於定義數據的量化屬性,具體可doc fixedpoint/quantizer,參數詳細設定可參考描述:

2-quantize

按照quantizer定義的量化屬性量化浮點數據。

以上文的16階濾波器為例:

有符號數,先放大100倍,整數最大為41:2^6 > 41,最小需要6位整數,又希望擴大100倍后的數據,小數點后精確到0.01(即原數據精度:1e-4),2^-7 < 0.01,即需要7位小數。

共需要位數N = 1符號位+6整數位+7小數位 = 14位,

其中小數m = 7位。

N = 14;
m = 7;
q = quantizer('fixed','round','saturate',[N,m]);
fix_fir = quantize(q,fir_coef*100);
[fix_fir;fir_coef*100]

結果可以看出,量化的數據達到了精度要求(上為量化數據,下為原始數據):

有時候為了表示方便,習慣了二進制的表達方式(有符號數,負數用補碼表示):

num2bin(q,fix_fir)

  這一操作也為含有小數的負數求解補碼提供了思路,打印信息如下(類似指令num2int,num2hex類似):


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM