前言
眾所周知,增量式SD-ADC相比傳統(tǒng)結(jié)構(gòu)而言,需要在每次測量開始之前進行復位,以此清零積分器積分電容上的剩余電荷以及數(shù)字濾波器中寄存器。然后,在ADC連續(xù)轉(zhuǎn)換時,清零這一操作需要額外操作一次。如果不進行清零直接進行轉(zhuǎn)換,ADC的精度會損失多少?本文針對這個問題進行了Matlab建模,分析了在兩種常用數(shù)字濾波器,級聯(lián)積分濾波器(CoI)和SINC濾波器下這一情況的影響。
調(diào)制器及測試平臺的Matlab實現(xiàn)
本文Matlab建模了一個常用的二階Sigma-Delta調(diào)制器模型,在這個模型中沒有進行系數(shù)縮放,具體代碼如下:
clear
format long
Vref=2.5;
M=256; % Sinc濾波器抽取率
L=3; % Sinc濾波器階數(shù)
N=10000; % 測試的直流輸入點數(shù)
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濾波器的轉(zhuǎn)換誤差')
figure(2)
plot(Vin,E_coi,'b');
title('使用CoI濾波器的轉(zhuǎn)換誤差')
這個代碼實現(xiàn)的功能包括:
- 一個二階單比特量化的Sigma-Delta調(diào)制器;
- 產(chǎn)生N個從-1.5~1.5的直流值輸入調(diào)制器;
- 分別使用Sinc3濾波器和CoI濾波器對調(diào)制器輸出進行處理;
- 計算ADC在兩種濾波器下分別的轉(zhuǎn)換誤差。
其中,兩種濾波器Matlab函數(shù)的實現(xiàn)代碼分別為:
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
復位/不復位時兩種濾波器的轉(zhuǎn)換誤差對比
存在復位時,在代碼中每次轉(zhuǎn)換開始之前將兩個積分器的輸出的初值設(shè)置為0,如下代碼所示:
Vout1(1)=0;
Vout2(1)=0;
這種情況下,兩種濾波器的轉(zhuǎn)換誤差如下圖所示:
上圖中使用兩種濾波器的轉(zhuǎn)換誤差幾乎相近,這與文獻[1]中的結(jié)論相符,即:在相同的轉(zhuǎn)換時鐘周期下,Sinc3濾波器可以實現(xiàn)與CoI幾乎相同的轉(zhuǎn)換誤差。
不復位時,調(diào)制器的積分器1和積分器2的輸出會保持為上一次結(jié)束時的終態(tài)值,實際中這一值會和輸入電壓大小,熱噪聲等調(diào)制器的非理想因素相關(guān),因此很難在模型中根據(jù)原理給出。為了簡便起見,本文模型通過產(chǎn)生一個±VREF的隨機數(shù)賦給積分器1和積分器2的輸出初態(tài)來實現(xiàn)近似的效果,代碼如下所示:
Vout1(1)=rand(1)*5-2.5;
Vout2(1)=rand(1)*5-2.5;
這種情況下,兩種濾波器的轉(zhuǎn)換誤差如下圖所示:
如上圖所示,不復位時,使用sinc3濾波器并未使轉(zhuǎn)換精度降低太多,而使用CoI濾波器轉(zhuǎn)換精度急劇下降。這是因為兩者對輸出碼處理的權(quán)重不同導致的。對Sinc3濾波器而言,在假設(shè)轉(zhuǎn)換周期數(shù)為N,那么第一個輸出碼的權(quán)重為1,所有輸出碼權(quán)重和為(N/3) ^3^ ,因此第一個輸出碼對最終輸出數(shù)據(jù)影響的比重為:1/((N/3) ^3^ )。而對CoI濾波器而言,第一個輸出碼的權(quán)重為(N-1),所有輸出碼權(quán)重和為N*(N-1)/2,因此第一個輸出碼對最終輸出數(shù)據(jù)影響的比重為:2/N. 當不進行復位操作時,直接的影響為第一個輸出碼(或前幾個輸出碼)所攜帶的量化噪聲很大,而相比采用CoI濾波器而言,采用Sinc3濾波器時第一個輸出碼的比重小了很多,因此這個因為沒有復位造成的超大量化噪聲被更好地稀釋,從而對輸出碼的影響相比采用CoI濾波器急劇降低,基本可以忽略不復位的影響。
(感興趣的讀者可以進一步證明,第一級積分器不復位對CoI濾波器的影響比第二級積分器不復位的影響大很多。)
總結(jié)
由上述模型可以發(fā)現(xiàn),設(shè)計增量式Sigma-Delta調(diào)制器時,如果采用Sinc濾波器,那么即使在開始轉(zhuǎn)換的時候不進行復位,積分器仍然保存上次轉(zhuǎn)換結(jié)束所殘余的輸出值,也不會對輸出結(jié)果造成太多的誤差。因此,如果設(shè)計者所設(shè)計的增量式SD-ADC采用了Sinc濾波器,那么可以不設(shè)計額外的復位操作,尤其是連續(xù)轉(zhuǎn)換時,這樣仍然不會影響ADC的精度。
-
matlab
+關(guān)注
關(guān)注
189文章
3001瀏覽量
234112 -
濾波器
+關(guān)注
關(guān)注
162文章
8137瀏覽量
182042 -
adc
+關(guān)注
關(guān)注
99文章
6708瀏覽量
549207 -
調(diào)制器
+關(guān)注
關(guān)注
3文章
901瀏覽量
46568
發(fā)布評論請先 登錄
正激變換器的兩種復位方式

Σ-Δ模數(shù)轉(zhuǎn)換器之數(shù)字濾波器類型與用途
Δ-Σ 調(diào)制器是如何工作的?
了解這兩種濾波器原理,各式盡在掌握
隔離型Σ-Δ調(diào)制器的簡化框圖
濾波器設(shè)計與信號處理的MATLAB實現(xiàn)
電光調(diào)制器,電光調(diào)制器工作原理是什么?
FPGA實現(xiàn)OFDM調(diào)制器設(shè)計

CIC濾波器在調(diào)制器應(yīng)用中的性能研究

基于Matlab的FIR帶通濾波器設(shè)計與實現(xiàn)

評論