SFDR是信號系統處理中常用的一項參數,對於評估系統的噪聲水平和ADC/DAC的性能有一定參考意義。
SFDR,英文全稱是 Spurious-Free Dynamic range,意為無雜散動態范圍。SFDR是指基波強度與最大雜波或諧波的強度之比,所以SFDR值越大則說明系統的噪聲水平越低,靈敏度越高。
下面我們用一個示例看下不同量化位數對SFDR的影響。
matlab代碼:
close all;clear all;clc; %% N = 1000; %總采樣數1000 t = -pi : 2*pi/N : pi; %一個完整周期 x1 = 7*sin(2*t); %幅值7,圓頻率2 % 進行定點量化 qpath = quantizer('fixed','round','saturate',[5,0]); fix_x1 = quantize(qpath,x1); figure; subplot(221) stairs(x1);title('浮點精度(double)信號'); subplot(222) stairs(fix_x1);title('定點精度(fix5-0)信號'); %% % 進行DFT變換,求模 X1 = abs(fft(x1)); X1 = fftshift(X1); subplot(223) semilogy(X1);grid on;title('浮點DFT變換結果'); X11 = abs(fft(fix_x1)); X11 = fftshift(X11); subplot(224) semilogy(X11);grid on;title('定點DFT變換結果');
這是運行后的結果,對比之后可以看到,double類型的正弦信號底噪極小,而經過量化之后的信號,底噪十分明顯。
下面計算一下浮點信號的SFDR,在Matlab中,SFDR的基本過程為加窗DFT變換,選取雜波或諧波最大值求出比率,結果單位為dB。在頻率軸經過歸一化,采樣率1Hz。
圖中黑色部分為DC信號,藍色部分是基波信號,紅色部分是雜波信號。灰色區域是SFDR計算范圍。
基頻信號的峰值是12.73dB,雜波的最大值是-291.4dB,二者比率為304.13dB,即是SFDR的值。
再來計算一下經過定點量化信號的SFDR值。
基頻信號的峰值是12.78dB,與浮點結果基本一致,雜波的最大值是-19.53dB,二者比率為32.31dB,遠小於浮點信號的SFDR值。
實際上,信號量化位數越多,信號底噪越干凈,SFDR值也越大。
這是進行fix_10_5量化的結果,保留5bit小數,可以看到時間曲線已經沒有明顯鋸齒,非常光滑。
SFDR為63.94dB,大於fix_10_5的28.69dB,小於浮點數的304.14dB
關於定點化
定點化按四舍五入進行取舍,當量化位數不夠時,進行飽和處理。
定點格式[fix_w_b]表示,這是一個有符號數,總位寬w,小數位寬b。它能表示的范圍為:[ -2w-b-1 + 1/2b , +2w-b-1 - 1/2b ],分辨率為1/2b.
舉例來講[fix_5_0]能表示的范圍在[-2^(5-0-1)+1,+2^(5-0-1)-1]之間,即[-15 ,+15]之間,分辨率1。
關於點數/采樣頻率的影響
點數越多,采樣率越高則SFDR的值也越大
這是N=10000點的結果,比N=1000點時提高了5.37dB
關於噪聲來源分析
從時域信號來看,相當於一個純正弦信號乘以一個周期方波信號,在頻域就是進行周期卷積。而方波包含有多次諧波,基本之后的都可以視為噪聲。這些噪聲,最后都通過ADC的量化過程表現出來。
參考資料:
https://en.wikipedia.org/wiki/Spurious-free_dynamic_range
http://blog.sina.com.cn/s/blog_4b2c39e20100z8tu.html
http://cn.mathworks.com/help/signal/ref/sfdr.html?searchHighlight=sfdr&s_tid=doc_srchtitle
http://cn.mathworks.com/help/signal/examples/spurious-free-dynamic-range-sfdr-measurement.html