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

數(shù)字信號的糾錯(cuò)原因及解決方法
數(shù)字信號處理實(shí)踐方法.part1
數(shù)字信號處理的PDF電子書免費(fèi)下載

ADSP-21990:混合信號數(shù)字信號處理器數(shù)據(jù)表

ADSP-21991:混合信號數(shù)字信號處理器數(shù)據(jù)表

ADMCF341DashDSPADMCF341:帶增強(qiáng)型模擬前端的?28引線閃存混合信號數(shù)字信號處理器數(shù)據(jù)表

ADSP-21992:帶CAN數(shù)據(jù)表的混合信號數(shù)字信號處理器

評論