Post

2nd CIFF ΔΣADC模擬與實作(中)

2nd CIFF ΔΣADC模擬與實作(中)

本文將繼續上篇模擬的理想2nd CIFF ΔΣADC,搭建Sinc Filter與FIR Filter,來達成Decimation與濾波,最後觀察輸出訊號的時域與頻域表現。

上一篇 : 2nd CIFF ΔΣADC模擬與實作(上)

下一篇 : 2nd CIFF ΔΣADC模擬與實作(下)

1.Sinc Filter

Sinc filter的頻率響應與Sinc函數相同,由主瓣與旁瓣組成,瓣與瓣之間的notch不具任何增益,由於ΔΣADC在高頻區域具有高能量的量化雜訊,可以透過Sinc filter先初步對量化雜訊進行濾波。

由於傅立葉變換具有對偶性(duality),因此 Sinc filter 在時域的結構,其實對應到頻域中的矩形響應(rectangular response);反過來說,理想低通濾波器在頻率域的「磚牆型(brick-wall)」響應,在時間域則對應到 Sinc 函數。

Desktop Vew

由impulse response看的出Sinc filter基本上就是對輸入訊號進行滑動平均(moving average),故其電路設計相對其他濾波器而言簡單,把輸入的離散訊號經過不同延遲後並加總即可構成Sinc filter。

這裡舉例一個Sinc1 filter,其結構與權重為1的4tap FIR相同,每個離散輸入x(n)都會經過一個延遲後再與其他tap加總,形成Sinc filter的輸出y(n),若輸入訊號為0或1,那輸出訊號則有5種可能,分別為0,1,2,3,4。

Desktop Vew

\[\Large H(z)=\frac{Y(z)}{X(z)} = 1 + z^{-1} + z^{-2} + z^{-3}\]

2.CIC Filter

CIC filter(Cascaded Integrator-Comb)是一種實現Sinc Filter的結構,主要是將Sinc filter拆成積分器與微分器來實現,並加入降採樣電路,同時具備高階拓展能力,是一種實現Sinc Filter的高效方法。

一階 CIC filter 先將輸入訊號送入積分器進行累加,再經由降採樣電路在固定的 decimation factor 間隔下取樣保留部分積分結果,最後透過梳狀結構的微分器將取樣值做相減運算,以抵消積分造成的低頻累積並完成低通濾波與降採樣處理。

Desktop Vew

輸入序列x(n)是由前級ΔΣ調製器輸出,意味著積分器的操作頻率(Fs)與調製器的取樣頻率相同,接著透過一個降採樣電路,其降採比例為N,故經過N次的Ts才會觸發一次取樣,而後面的微分器則是以Fs/N的頻率進行操作,與降採電路共用相同操作頻率Fs/N。

列出CIC filter的轉移函數

\[\Large H(z) = \frac{1 - z^{-N}}{1 - z^{-1}}\]

若假設降採樣率N=4則

\[\Large H(z) = \frac{1 - z^{-4}}{1 - z^{-1}}\]

為了要證明此CIC filter與上一章的Sinc Filter具有相同轉移函數,將1-z^-4進行展開獲得

\[\Large H(z) = \frac{1 - z^{-1} + z^{-1} - z^{-2} + z^{-2} - z^{-3} + z^{-3} - z^{-4}}{1 - z^{-1}}\]

把分子項提出1-z^-1

\[\Large H(z) = \frac{(1 - z^{-1})(1 + z^{-1} + z^{-2} + z^{-3})}{1 - z^{-1}}\]

約分後可得

\[\Large H(z) = 1 + z^{-1} + z^{-2} + z^{-3}\]

確實與上一章的Sinc Filter具有相同轉移函數,若在降採率N較高的情況下CIC結構可以大幅度的減少暫存器的數量。

Note: ST的”AN4990 Application note”有從Sinc filter電路演化到CIC filter的詳盡過程與數學推導。

3. 3rd CIC Filter

上述僅為一階的CIC Filter,其頻率響應為Sinc(wt),若想進一步抑制高頻成分,可以設計更高階數的Sinc來抑制量化雜訊。

三階的Sinc filter(Sinc3 filter),其頻率響應為Sinc^3(wt),同樣可以透過CIC的結構來達成,將積分器與微分器分別串接三級即可組成3rd CIC Filter。

Desktop Vew

由於積分器與微分器都是線性系統,若三級串接則轉移函式可以寫成

\[\Large H(z) = \frac{(1 - z^{-4})^{3}}{(1 - z^{-1})^{3}} = (\frac{1 - z^{-4}}{1 - z^{-1}})^{3}\]

也等效於三個Sinc filter串聯的轉移函式

使用Verilog-A來描述3rd CIC Filter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//IDEAL_FILTER_CIC_3RD Verilog-A from BensonTai
`include "constants.vams"
`include "disciplines.vams"

module IDEAL_FILTER_CIC_3RD (VIN,CLK,VOUT);

input VIN,CLK;
output VOUT;
electrical VIN,CLK,VOUT;

// =========================Parameters
parameter integer OSR = 128;

// =========================Internal states
integer sample_count;
integer INTG1,INTG2,INTG3;

integer DIFF1,DIFF1_D;
integer DIFF2,DIFF2_D;
integer DIFF3,DIFF3_D;
real COMB_OUT;

analog begin
    @(cross(V(CLK)-0.5, +1)) begin

		// =========================Integrator
		INTG1 = INTG1 + (V(VIN)>0.5 ? 1:0);
		INTG2 = INTG2 + INTG1;
		INTG3 = INTG3 + INTG2;

		// =========================Down sampler
		sample_count = sample_count + 1;

		if (sample_count == OSR) begin
			sample_count = 0;

			// =========================Differentiator
			DIFF2 = INTG3-DIFF1_D;
			DIFF1_D=INTG3;

			DIFF3 = DIFF2 - DIFF2_D;
			DIFF2_D = DIFF2;

			COMB_OUT = DIFF3 - DIFF3_D;
			DIFF3_D = DIFF3;
			
        end
    end
	V(VOUT) <+ transition(COMB_OUT/OSR/OSR/OSR, 0, 1p);
end

endmodule

程式大致上是描述出各個節點的數值就差不多了,值得注意的是最後輸出COMB_OUT除上OSR^3是為了要把輸出的電壓正規化到0到1之間。

4.FIR Filter

另外設計一個截止頻率為0.4*Nyqist rate的51tap FIR,進一步抑制CIC filter高頻部分的雜訊,在這邊筆者盡可能的壓低帶寬,用高OSR來換取ΔΣADC的解析度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//IDEAL_FILTER_FIR Verilog-A from BensonTai
`include "constants.vams"
`include "disciplines.vams"

module IDEAL_FILTER_FIR (CLK, IN, OUT);

input CLK;
input IN;
output OUT;

electrical CLK, IN, OUT;

// =========================
// FIR coefficients
// =========================
parameter integer N = 51;

parameter real h[0:50] = {
 -1.249047e-18, -1.056236e-03, -7.693410e-04,  9.563232e-04,  1.976083e-03,
 -2.620691e-18, -3.265385e-03, -2.568520e-03,  3.234633e-03,  6.519908e-03,
 -6.211702e-18, -9.825739e-03, -7.365685e-03,  8.881349e-03,  1.725606e-02,
 -1.065044e-17, -2.478427e-02, -1.841767e-02,  2.229953e-02,  4.422244e-02,
 -1.424145e-17, -7.146981e-02, -6.043033e-02,  9.231763e-02,  3.020273e-01,
  4.005234e-01,  3.020273e-01,  9.231763e-02, -6.043033e-02, -7.146981e-02,
 -1.424145e-17,  4.422244e-02,  2.229953e-02, -1.841767e-02, -2.478427e-02,
 -1.065044e-17,  1.725606e-02,  8.881349e-03, -7.365685e-03, -9.825739e-03,
 -6.211702e-18,  6.519908e-03,  3.234633e-03, -2.568520e-03, -3.265385e-03,
 -2.620691e-18,  1.976083e-03,  9.563232e-04, -7.693410e-04, -1.056236e-03,
 -1.249047e-18};

// =========================
// delay line
// =========================
real x_buf[0:50];
integer i;
real acc;

// =========================
// clocked behavior
// =========================
analog begin

  @(cross(V(CLK) - 0.5, +1)) begin

    // shift register
    for (i = 50; i > 0; i = i - 1) begin
      x_buf[i] = x_buf[i-1];
    end

    // new sample
    x_buf[0] = V(IN);

    // FIR accumulation
    acc = 0.0;
    for (i = 0; i < N; i = i + 1) begin
      acc = acc + h[i] * x_buf[i];
    end

  end

  V(OUT) <+ acc;

end

endmodule

5.Simulation Result

把調製器的輸出接上3rd CIC filter後再接上FIR filter形成ΔΣADC,同時對三個輸出QOUT, QCIC, QFIR進行分析。

Desktop Vew

參數設定 :

Desktop Vew

這裡新增了T_START與T_STOP,T_START確保能讓FFT工具在FIR filter穩態後進行分析,而T_STOP是由相關取樣算出來的週期加上T_START所定義。

執行模擬後可以獲得

Desktop Vew

放大時域的時間軸,並且對頻譜的頻率取對數 :

Desktop Vew

在時域上面的紅線是調製器的輸出QOUT,綠線是CIC filter的輸出,CIC filter在三個周期內就能使輸出穩定,而藍線是FIR filter的輸出,若51tap的FIR則需要51個週期才能使輸出穩定,其響應較慢。

若對QOUT ,QCIC, QFIR分別取FFT,得到右邊的頻譜圖,頻譜中的線條顏色與個自時域顏色相同。紅線是調製器的輸出,在高頻部分具有高功率的量化雜訊,經過CIC filter後可以獲得綠線,由於CIC filter進行了降採樣,所以在156.25kHz(20M/128)上有一個由Sinc^3產生的notch,也就是降採樣後的輸出頻率。

頻譜上的藍線則是FIR filter的輸出,截止頻率設計在31.25kHz(156.25k/2 * 0.4),在31.25kHz至78.125kHz具有顯著的抑制能力,表示ΔΣADC的操作範圍於31.25kHz以下,可以換算OSR為320倍,設計上算是偏高的過取樣率。

Note: 繪製Spectrum的時候需滿足相關取樣,並使用Blackman window最小化頻譜洩漏,尤其是ΔΣ這種Noise shaping ADC更需注意。

最後使用FFT工具計算輸出的ENOB,積分帶寬上限設定為78.125kHz(Nyquist rate),CIC filter輸出約為13.8bit,而FIR filter則為18.0bit,體現了ΔΣADC透過過採樣與雜訊整形所帶來的解析度提升。

Desktop Vew

This post is licensed under CC BY 4.0 by the author.