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

2021-10-12 23:34:38 字數 2073 閱讀 8190

在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('截位訊號');

%% 截位方式二:負數截位後加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); %直接截位

endend

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=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); %直接截位

endend

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('截位訊號');

圖一:直接截去低五位

圖二:直接截去低12位

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

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

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

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

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

資料位交換

記得大四第二學期出來找工作時,天天面試但也處處碰壁。但是人如果能吃一點長一智,碰壁未免不是好事。在面試的過程中,面試官問過很多問題,有些不能馬上回答出來,有些回去翻閱資料後能理解明白,有些卻很久都得不到結果。我四處尋找,但油膩的師姐始終沒有出現,直到有一天遇上了geeksforgeeks 其實想學東...

資料位分配

client接收 必須有的資料 1.n個目標點的x,y 可以新增的資料 1.n個目標點的z座標,w朝向,時間戳timestamp 不使用ros的時間,使用系統的time函式,便於統一時間 2.到目標點時要求的速度vx,vy server接收序號 客戶端傳送 第0位暫時保留,第一位為機械人序號,第二位...

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

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