FPGA訊號截位策略研究

2021-09-20 21:11:31 字數 2428 閱讀 6940

fpga訊號截位策略研究

在fpga中,隨著訊號處理的層次加深,對訊號進行乘、累加、濾波等運算後,可能輸入時僅為8位位寬的訊號會擴充套件成幾十位位寬,位寬越寬,占用的硬體資源就越多,但位寬超過一定範圍後,位寬的增寬並不會對處理精度帶來顯著的改善,這時就需要對訊號進行截位。寫過fpga hdl**的童鞋都應該知道,截位是最為經常的一種操作。

一般來說,截位只需截掉低幾位即可,這是最簡單的做法;對於無符號數來說,這樣做也沒有問題;當然也有四捨五入的截位方法,就是給次低位加一後再進行截位。

a=10000*randn(1,1000);

%%%截位方式一:直接截位

%%b=floor(a/2^5);%截去低5位

afft=fft(a);bfft=fft(b);

figure;%觀察原始訊號與截位後訊號的頻譜

subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始訊號');

subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位訊號');

%%b=floor(a/2^12);%截去低12位

afft=fft(a);bfft=fft(b);

figure;%觀察原始訊號與截位後訊號的頻譜

subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始訊號');

subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位訊號');

figure;

%%%截位方式二:負數截位後加1

%%b=zeros(1,length(a));

for ii=1:length(a)

if a(ii)<0

b(ii)=floor(a(ii)/2^12)+1;%截去低12位後加1

else

b(ii)=floor(a(ii)/2^12);%直接截位

endendafft=fft(a);bfft=fft(b);

figure;%觀察原始訊號與截位後訊號的頻譜

subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始訊號');

subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位訊號');

%%%截位方式三:負數取絕對值後再截位

%%b=zeros(1,length(a));

for ii=1:length(a)

if a(ii)<0

b(ii)=-floor(-a(ii)/2^12);%負數取絕對值後截去低12位再變回原來符號

else

b(ii)=floor(a(ii)/2^12);%直接截位

endendafft=fft(a);bfft=fft(b);

figure;%觀察原始訊號與截位後訊號的頻譜

subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始訊號');

subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位訊號');

圖一:直接截去低五位

圖二:直接截去低12位

圖三:截去低12位且負數截位後加一

圖四:截去低12位且負數取絕對值後再截位,截完位再變回原先的符號

由圖三和圖四可以看出,採用第二種和第三種截位策略後,直流分量消失。

其實第三種截位策略是達到了這樣一種效果:一對相反數在截位後仍然是一對相反數。這種效果在直接截位時對於奇數來說是達不到的。

其實直接截位之所以出現直流分量可以這樣直觀的來認識:從matlab程式中也可以看出,對於fpga訊號截位來說,實際上就是向下取整;對於有符號數來講,正數向下取整在數軸上是向原點零靠近,然後負數向下取整則是遠離原點零了,這是因為負數以補碼形式表示,它的補碼所對應的無符號數經截位後向原點零靠近了,換算成有符號的負數時,則是遠離原點零了。因此截位實際造成的效果是訊號整體向負無窮方向平移了,即對於乙個白雜訊序列來講,原本均值為零,截位後均值變為了負數。

fpga資料位寬擷取 FPGA訊號截位策略研究

在fpga中,隨著訊號處理的層次加深,對訊號進行乘 累加 濾波等運算後,可能輸入時僅為8位位寬的訊號會擴充套件成幾十位位寬,位寬越寬,占用的硬體資源就越多,但位寬超過一定範圍後,位寬的增寬並不會對處理精度帶來顯著的改善,這時就需要對訊號進行截位。寫過fpga hdl 的童鞋都應該知道,截位是最為經常...

FPGA數碼訊號截位分析和位寬設計

fpga數碼訊號截位分析和位寬設計 fpga資料在進行乘加過程中會面臨這資料位寬變大的問題,然而硬體資源是有限的,需要對資料最終位寬進行設計,這就會面臨著位寬的選擇和如何截位的問題。對多位資料進行截位處理,是乙個從高量化精度向低量化精度的轉換過程,由於量化位數的減少,產生截位誤差,導致運算結果在時域...

FPGA 實現訊號的剪裁,截短和延遲

在實現sobel邊緣檢測的時候遇到了這樣的問題 我們不需要邊上的訊號,那這時候應該怎麼辦呢?我們需要對顯示的使能訊號進行剪裁,data en。就像醬紫 那麼如何實現呢?首先第一種比較複雜的方法是用計數器。如此 reg 9 0 cnt always posedge clk or negedge nre...