前言
眾所周知,增量式SD-ADC相比傳統結構而言,需要在每次測量開始之前進行復位,以此清零積分器積分電容上的剩余電荷以及數字濾波器中寄存器。然后,在ADC連續轉換時,清零這一操作需要額外操作一次。如果不進行清零直接進行轉換,ADC的精度會損失多少?本文針對這個問題進行了Matlab建模,分析了在兩種常用數字濾波器,級聯積分濾波器(CoI)和SINC濾波器下這一情況的影響。
調制器及測試平臺的Matlab實現
本文Matlab建模了一個常用的二階Sigma-Delta調制器模型,在這個模型中沒有進行系數縮放,具體代碼如下:
clear
format long
Vref=2.5;
M=256; % Sinc濾波器抽取率
L=3; % Sinc濾波器階數
N=10000; % 測試的直流輸入點數
for j=1:N;
Vin(j)=3/N*j-1.5;
% Second_order SD Modulator
Vout1=0;
Vout2=0;
Vout1(1)=0;%rand(1)*5-2.5;
Vout2(1)=0;%rand(1)*5-2.5;
bs=0;
for i=2:M*L;
if bs(i-1)>0.5;
Vout1(i)=Vout1(i-1)+(Vin(j)-Vref);
Vout2(i)=Vout2(i-1)+Vout1(i-1)+(Vin(j)-Vref)*2;
else
Vout1(i)=Vout1(i-1)+(Vin(j)+Vref);
Vout2(i)=Vout2(i-1)+Vout1(i-1)+(Vin(j)+Vref)*2;
end
if Vout2(i)>0;
bs(i)=1;
else
bs(i)=0;
end
end
Dout1(j)=sinc3_filter(M,L,bs);
Dout2(j)=coi_filter(M*L,bs);
end
E_sinc=Vin-(Dout1*5-2.5);
E_coi =Vin-(Dout2*5-2.5);
figure(1)
plot(Vin,E_sinc,'r');
title('使用SINC3濾波器的轉換誤差')
figure(2)
plot(Vin,E_coi,'b');
title('使用CoI濾波器的轉換誤差')
這個代碼實現的功能包括:
- 一個二階單比特量化的Sigma-Delta調制器;
- 產生N個從-1.5~1.5的直流值輸入調制器;
- 分別使用Sinc3濾波器和CoI濾波器對調制器輸出進行處理;
- 計算ADC在兩種濾波器下分別的轉換誤差。
其中,兩種濾波器Matlab函數的實現代碼分別為:
Sinc3濾波器
function Dout=sinc3_filter(M,L,bs)
sigma1=0;
sigma2=0;
sigma3=0;
delta1=0;
delta2=0;
delta3=0;
sigma3_reg=0;
for i=1:length(bs)
sigma1=sigma1+bs(i);
sigma2=sigma2+sigma1;
sigma3=sigma3+sigma2;
delta1_temp=sigma3-sigma3_reg;
delta2_temp=delta1_temp-delta1;
delta3_temp=delta2_temp-delta2;
if(mod(i,M)==0)
sigma3_reg=sigma3;
delta1=delta1_temp;
delta2=delta2_temp;
delta3=delta3_temp;
end
end
Dout=delta3/M^3;
end
CoI濾波器
function Dout=coi_filter(N,bs)
sigma1=0;
sigma2=0;
for i=1:N
sigma2=sigma2+sigma1;
sigma1=sigma1+bs(i);
end
Dout=sigma2/(N*(N-1)/2);
end
復位/不復位時兩種濾波器的轉換誤差對比
存在復位時,在代碼中每次轉換開始之前將兩個積分器的輸出的初值設置為0,如下代碼所示:
Vout1(1)=0;
Vout2(1)=0;
這種情況下,兩種濾波器的轉換誤差如下圖所示:
上圖中使用兩種濾波器的轉換誤差幾乎相近,這與文獻[1]中的結論相符,即:在相同的轉換時鐘周期下,Sinc3濾波器可以實現與CoI幾乎相同的轉換誤差。
不復位時,調制器的積分器1和積分器2的輸出會保持為上一次結束時的終態值,實際中這一值會和輸入電壓大小,熱噪聲等調制器的非理想因素相關,因此很難在模型中根據原理給出。為了簡便起見,本文模型通過產生一個±VREF的隨機數賦給積分器1和積分器2的輸出初態來實現近似的效果,代碼如下所示:
Vout1(1)=rand(1)*5-2.5;
Vout2(1)=rand(1)*5-2.5;
這種情況下,兩種濾波器的轉換誤差如下圖所示:
如上圖所示,不復位時,使用sinc3濾波器并未使轉換精度降低太多,而使用CoI濾波器轉換精度急劇下降。這是因為兩者對輸出碼處理的權重不同導致的。對Sinc3濾波器而言,在假設轉換周期數為N,那么第一個輸出碼的權重為1,所有輸出碼權重和為(N/3) ^3^ ,因此第一個輸出碼對最終輸出數據影響的比重為:1/((N/3) ^3^ )。而對CoI濾波器而言,第一個輸出碼的權重為(N-1),所有輸出碼權重和為N*(N-1)/2,因此第一個輸出碼對最終輸出數據影響的比重為:2/N. 當不進行復位操作時,直接的影響為第一個輸出碼(或前幾個輸出碼)所攜帶的量化噪聲很大,而相比采用CoI濾波器而言,采用Sinc3濾波器時第一個輸出碼的比重小了很多,因此這個因為沒有復位造成的超大量化噪聲被更好地稀釋,從而對輸出碼的影響相比采用CoI濾波器急劇降低,基本可以忽略不復位的影響。
(感興趣的讀者可以進一步證明,第一級積分器不復位對CoI濾波器的影響比第二級積分器不復位的影響大很多。)
總結
由上述模型可以發現,設計增量式Sigma-Delta調制器時,如果采用Sinc濾波器,那么即使在開始轉換的時候不進行復位,積分器仍然保存上次轉換結束所殘余的輸出值,也不會對輸出結果造成太多的誤差。因此,如果設計者所設計的增量式SD-ADC采用了Sinc濾波器,那么可以不設計額外的復位操作,尤其是連續轉換時,這樣仍然不會影響ADC的精度。
-
matlab
+關注
關注
185文章
2977瀏覽量
230602 -
濾波器
+關注
關注
161文章
7835瀏覽量
178286 -
adc
+關注
關注
98文章
6507瀏覽量
544915 -
調制器
+關注
關注
3文章
841瀏覽量
45183
發布評論請先 登錄
相關推薦
評論