FPGA數據在進行乘加過程中會面臨這數據位寬變大的問題,然而硬件資源是有限的,需要對數據最終位寬進行設計,這就會面臨著位寬的選擇和如何截位的問題。
對多位數據進行截位處理,是一個從高量化精度向低量化精度的轉換過程,由于量化位數的減少,產生截位誤差,導致運算結果在時域上出現直流分量,頻域出現由諧波失真造成的尖峰,降低了信號的無雜散動態范圍。
比如:模擬信號經過16位ADC量化后變為數字信號,且數據類型為整型,且均采用補碼形式表示如按照16 bit 量化,則15 =0000 0000 0000 1111;而-15=1111 1111 11110001。直接截位法是對數據直接截掉低位。以2 bit 截位為例,則15 截位后為0000 0000 0000 11=3,而-15 截位后為1111 1111 111100=-4。可以看出,在FPGA 中采用直接截位法對數據進行截位,截位是按照向下取整的方式進行的,由截位導致的近似方式對正數和負數來言是不同的,即15/(22)=3.75≈3,而-15/(22)=-3.75≈-4,因此截位后的信號會整體向下偏移,導致出現直流偏置,頻譜上表現為在0 頻出現誤差尖峰。對截位后的信號,再進行變頻等處理,就會將尖峰搬移到其他的頻率。如果出現多次截位,則將增加誤差尖峰的個數,影響信號產生和信號處理的效果。因此在對信號處理要求較高的場合,采用直接截位法是不合適的。
常見的截位方式有:1、負數直接截位后+1,就是所有數都按絕對值取floor
2、Truncate:直接截位,就是正數取floor,負數按絕對值取ceil
3、Rounding:舍入截位,就是所有數按絕對值取四舍五入
這三種截位方式都是可以的,其中舍入截位精度相對較高。而(《數字信號截位影響分析》-- 焦慶君,解劍)這篇論文中的數據截位誤差抑制方法就是用的四舍五入的思想,通過加上或者減去一個數來實現的,實現方法比較簡單,我個人也是用這種方法來進行數據的截位的。具體實現方式是:①判斷數據的符號;② 如果符號為正,則將數據加上2^ (n-1);③ 如果符號為負,則將數據加上2^(n-1)-1;④ 截掉數據的低n 位。
在一些數字信號處理的IP核中數據的截位也是可選的,一般選擇近似截位。
然而上述的幾種方法截位誤差基本上是可以滿足絕大多數需求,然而對特殊的要求時以上幾種方式難以滿足時,就需要對截位誤差進行特殊的設計。筆者根據自身項目的調試經驗,總結出來一個經過實際測試有效的方法。這個方法成為誤差傳遞。這里設置進位上線為0.75,向下截位下線為0.25.如下圖所示
1、 若數據大于設置的則數據直接置1,如圖中B點,如果小于下線,則直接置0,如圖中A點。這里的上線和下線是可以根據實際的需求進行調整的,但調整的原則是數據超出上下限的點的個數應當是一直的,并且上下限內的數據應當關于上下限中點對稱的。
2、 如果數據在上線和下線之間,則把數據直接截位,截下的數據與下一個數據相加后再進行直接截位,這樣依次進行下去即可。即若L1+L2+L3=LS>1,則把數據點E置1,然后把LS-1=LD作為新的誤差傳遞下去,若LD+L4+L5>1則把G點置1,產生新的誤差繼續傳遞下去,如果LD+L4+L5<1,則繼續加入新的數據,判斷LD+L4+L5+L6是否大于1,直至產生大于1的那個點進行近衛,然后繼續把新產生的誤差進行傳遞。
通過誤差傳遞的方式在數據量相對大一些的情況下,使得信號的原始值與截位后數據的值在時域上做差產生的差值是0,在頻域上也沒有引入低頻信息。這種方式在實際的應用測試中很好用,因此就簡單的寫了出來,嚴格的證明畢竟麻煩,需要很大的篇幅來寫,這里就不詳細寫了,但是這個結果是通過MATLAB仿真和實際的應用測試驗證的,是能直接用的。
在實際系統中存在著加和乘的運算,這樣就導致數據位寬發生變化,有時候為了保證數據的精度不進行截位,但硬件資源有限,適當的截位對最終結果影響較小,因此合理的位寬設計既要滿足精度要求也要滿足資源要求。
一個典型的例子就是有限脈沖響應(FIR)濾波器的設計就會面臨上面的問題。
假設濾波器系數位[15、17、-88、103、75、75、103、-88、17、15],輸入數據位寬位N,而輸出位寬最佳是如何設計呢?要想數據全精度的運算,針對上面的濾波器系數位寬應該為N+8(系數最大值103的有符號二進制位寬)+4(系數個數的二進制值)。然而在實際運算中通常先得到系數絕對值的和596,而596至少需要10位二進制數表示,因此實際位寬設計為N+10。但是在系數較多或者運算次數較多的系統中,要求輸入位寬為N而輸出位寬為N+1時,就需要進行截位處理。合理的截位能提升系統的實際運行性能,最佳的截位是定點的運算達到浮點運算的效果。
原文標題:FPGA數字信號截位分析和位寬設計
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1630文章
21759瀏覽量
604307 -
濾波器
+關注
關注
161文章
7845瀏覽量
178394 -
數字信號
+關注
關注
2文章
972瀏覽量
47589
原文標題:FPGA數字信號截位分析和位寬設計
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論