fpga数据位宽截取_FPGA信号截位策略研究
在FPGA中,隨著信號(hào)處理的層次加深,對(duì)信號(hào)進(jìn)行乘、累加、濾波等運(yùn)算后,可能輸入時(shí)僅為8位位寬的信號(hào)會(huì)擴(kuò)展成幾十位位寬,位寬越寬,占用的硬件資源就越多,但位寬超過一定范圍后,位寬的增寬并不會(huì)對(duì)處理精度帶來顯著的改善,這時(shí)就需要對(duì)信號(hào)進(jìn)行截位。寫過FPGA HDL代碼的童鞋都應(yīng)該知道,截位是最為經(jīng)常的一種操作。
一般來說,截位只需截掉低幾位即可,這是最簡(jiǎn)單的做法;對(duì)于無符號(hào)數(shù)來說,這樣做也沒有問題;當(dāng)然也有四舍五入的截位方法,就是給次低位加一后再進(jìn)行截位。
下面討論三種截位截略:1)直接截位;2)負(fù)數(shù)截位后加1;3)負(fù)數(shù)取絕對(duì)值后再截位。在matlab中模擬FPGA截位過程,運(yùn)行如下一段程序,得到四幅圖。
a=10000*randn(1,1000);
%% 截位方式一:直接截位
b=floor(a/2^5); %截去低5位
afft=fft(a);
bfft=fft(b);
figure; %觀察原始信號(hào)與截位后信號(hào)的頻譜
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信號(hào)');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信號(hào)');
b=floor(a/2^12); %截去低12位
afft=fft(a);bfft=fft(b);
figure; %觀察原始信號(hào)與截位后信號(hào)的頻譜
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信號(hào)');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信號(hào)');
%% 截位方式二:負(fù)數(shù)截位后加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); %直接截位
end
end
afft=fft(a);bfft=fft(b);
figure; %觀察原始信號(hào)與截位后信號(hào)的頻譜
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信號(hào)');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信號(hào)');
%% 截位方式三:負(fù)數(shù)取絕對(duì)值后再截位
b=zeros(1,length(a));
for ii=1:length(a)
if a(ii)<0
b(ii)=-floor(-a(ii)/2^12); %負(fù)數(shù)取絕對(duì)值后截去低12位再變回原來符號(hào)
else
b(ii)=floor(a(ii)/2^12); %直接截位
end
end
afft=fft(a);bfft=fft(b);
figure; %觀察原始信號(hào)與截位后信號(hào)的頻譜
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信號(hào)');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信號(hào)');
圖一:直接截去低五位
圖二:直接截去低12位
圖三:截去低12位且負(fù)數(shù)截位后加一
圖四:截去低12位且負(fù)數(shù)取絕對(duì)值后再截位,截完位再變回原先的符號(hào)
由圖三和圖四可以看出,采用第二種和第三種截位策略后,直流分量消失。
其實(shí)第三種截位策略是達(dá)到了這樣一種效果:一對(duì)相反數(shù)在截位后仍然是一對(duì)相反數(shù)。這種效果在直接截位時(shí)對(duì)于奇數(shù)來說是達(dá)不到的。
其實(shí)直接截位之所以出現(xiàn)直流分量可以這樣直觀的來認(rèn)識(shí):從matlab程序中也可以看出,對(duì)于FPGA信號(hào)截位來說,實(shí)際上就是向下取整;對(duì)于有符號(hào)數(shù)來講,正數(shù)向下取整在數(shù)軸上是向原點(diǎn)零靠近,然后負(fù)數(shù)向下取整則是遠(yuǎn)離原點(diǎn)零了,這是因?yàn)樨?fù)數(shù)以補(bǔ)碼形式表示,它的補(bǔ)碼所對(duì)應(yīng)的無符號(hào)數(shù)經(jīng)截位后向原點(diǎn)零靠近了,換算成有符號(hào)的負(fù)數(shù)時(shí),則是遠(yuǎn)離原點(diǎn)零了。因此截位實(shí)際造成的效果是信號(hào)整體向負(fù)無窮方向平移了,即對(duì)于一個(gè)白噪聲序列來講,原本均值為零,截位后均值變?yōu)榱素?fù)數(shù)。
總結(jié)
以上是生活随笔為你收集整理的fpga数据位宽截取_FPGA信号截位策略研究的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 求一个关于微信个性签名
 - 下一篇: 请问这是一部啥电影?