Δ技術(shù)可以用來實(shí)現(xiàn) ΣΔADC 和 ΣΔDAC ,是高精度、低噪聲 ADC/DAC 的主流技術(shù)。要理解 ΣΔADC 和 ΣΔDAC ,需要按照以下順序來學(xué)習(xí):
離散ΣΔ調(diào)制器 → ΣΔDAC
離散ΣΔ調(diào)制器 → 模擬ΣΔ調(diào)制器 → ΣΔADC
本文詳細(xì)講解離散ΣΔ調(diào)制器。閱讀后,你就能分析、設(shè)計(jì) ΣΔDAC 。
本文會先為讀者建立足夠的知識鋪墊;然后從直觀理解和建模分析的角度講解離散ΣΔ調(diào)制器的原理,包括一階ΣΔ調(diào)制器和高階ΣΔ調(diào)制器;最后用 Python 編寫和評估一階、二階、三階離散ΣΔ調(diào)制器的性能。
本文涉及離散信號處理的知識,需要讀者熟悉z變換的一些概念(除非只關(guān)注結(jié)論)。
如果要進(jìn)一步理解 ΣΔADC ,還需要閱讀 (下) 篇,理解模擬ΣΔ調(diào)制器:
ΣΔ(Sigma-Delta)技術(shù)詳解(下):模擬ΣΔ調(diào)制器73 贊同 · 12 評論文章
目錄
Ⅰ 基礎(chǔ)元件介紹
Ⅱ ADC的信噪比
Ⅲ ADC過采樣技術(shù)
Ⅳ 二值調(diào)制器
Ⅴ PWM調(diào)制器
Ⅵ 離散Δ調(diào)制器
Ⅶ 離散一階ΣΔ調(diào)制器
Ⅷ 離散高階ΣΔ調(diào)制器
Ⅸ 離散二階、三階ΣΔ調(diào)制器
Ⅹ 各種離散二值調(diào)制器的實(shí)現(xiàn)和評估
Ⅺ 總結(jié)
附:一階、二階、三階ΣΔ調(diào)制器的Python實(shí)現(xiàn)
Ⅰ 基礎(chǔ)元件介紹
本節(jié)介紹幾個(gè)離散信號處理中常見的元件,如表1。它們可以用計(jì)算機(jī)算法實(shí)現(xiàn),也可以用數(shù)字電路(比如FPGA)來實(shí)現(xiàn)。例如,比例器、加法器、減法器可以用組合邏輯來實(shí)現(xiàn),延遲器可以用D觸發(fā)器來實(shí)現(xiàn)。
表1中的幾種線性元件不必多說。這里我們需要介紹一下這里唯一的非線性元件——量化器。我們知道,對連續(xù)信號 x(t) 以采樣周期 Ts=1/fs 采樣就能得到離散信號 x[n] :
x[1]=x(Ts),x[2]=x(2Ts),...,x[n]=x(nTs)
把連續(xù)信號采樣為離散信號……把連續(xù)信號采樣為離散信號(1)
而再對離散信號的幅度進(jìn)行量化就能得到數(shù)字信號。量化器能把取任意實(shí)數(shù)的輸入信號 x[n] 轉(zhuǎn)化為取有限的 q 個(gè)實(shí)數(shù)的輸出信號 y[n] 。
對于 q=2,3,4,16 的量化器,我們繪制它的輸入 x[n] 和輸出 y[n] 之間函數(shù)圖如圖1。可以看出q是函數(shù)圖中的“臺階數(shù)”。
圖1:量化器的函數(shù)圖。其中x軸是量化器的輸入,y軸是量化器的輸出。
量化器能把取值無限的離散信號轉(zhuǎn)化為取值有限的數(shù)字信號,因此也稱為理想ADC。比如,理想 10-bit ADC 就是 q=210=1024 的量化器。
之所以要理解量化器,是因?yàn)榈湫偷碾x散ΣΔ調(diào)制器里面會用到一個(gè)二值量化器,它是 q=2 的量化器,它對于正數(shù)輸出+1,對于負(fù)數(shù)輸出-1,可以用比較器來實(shí)現(xiàn)。
量化器是非線性元件。眾所周知,非線性元件比較難以進(jìn)行分析。所幸我們很多時(shí)候可以把量化器近似為線性元件:
量化器線性近似y[n]=x[n]+e[n]……量化器線性近似(2)
其中量化噪聲:
e[n]=y[n]?x[n]
這看似是個(gè)沒什么用的循環(huán)定義,不過有時(shí)候 e[n] 能近似為與 x[n] 無關(guān)的白噪聲,此時(shí)用線性近似 (2) 就能簡化分析。
另外,即使當(dāng) x[n] 超出范圍 [?1.0,+1.0] 時(shí), y[n] 也會限制在 [?1.0,+1.0] 內(nèi),體現(xiàn)出限位器的特性。此時(shí)我們說量化器超量程了,此時(shí)量化噪聲 e[n] 會很大,在設(shè)計(jì)時(shí)要特別注意避免量化器的超量程。
Ⅱ ADC的信噪比
信噪比 (SNR) 是指系統(tǒng)輸入的信號功率與系統(tǒng)引入的噪聲功率之比,是衡量系統(tǒng)優(yōu)劣的重要參數(shù),越大越好。
下面我們來分析理想ADC(量化器)的 SNR 。它的噪聲全部來自量化噪聲 e[n] 。由圖1可知,相鄰兩個(gè)量化值之間相差:
δ=2/(q?1)
理想的相鄰兩個(gè)量化值之差的計(jì)算公式……理想ADC的相鄰兩個(gè)量化值之差δ的計(jì)算公式
在平均情況下,信號均勻分布在相鄰兩個(gè)量化值之間,根據(jù)均勻分布的方差,可以得出噪聲 e[n] 的功率為:
e2ˉ=δ212=13(q?1)2
理想的平均噪聲功率……理想ADC的平均噪聲功率(4)
我們向理想ADC輸入一個(gè)滿量程的正弦信號:
x[n]=sin(ωt+?)
該正弦信號的幅度為 [?1.0,+1.0] ,我們可以算出它的平均功率為:
Psin=limN→∞∑n=0Nx[n]2N=0.5
當(dāng)該正弦信號 x[n] 通過理想 ADC 時(shí),會疊加量化噪聲 (4) ,得到 SNR :
SNRsin=Psine2ˉ=0.513(q?1)2=32(q?1)2
理想信噪比……理想ADC信噪比
在工程中,我們習(xí)慣用分貝 (dB) 來表示 SNR :
SNRsin=10log10?(32(q?1)2)(dB)
=10log10?(32)+10log10?((q?1)2)(dB)
≈1.76+20log10?(q?1)(dB)
理想信噪比……理想ADC信噪比(5)
已知 N-bit 理想 ADC 的 q=2N ,代入公式(5)可以得到 N-bit 理想 ADC 的信噪比:
理想信噪比SNRsin≈1.76+6.02N(dB)……理想ADC信噪比(6)
實(shí)際ADC的噪聲來源不止是量化噪聲,還有電路引起的熱噪聲等,因此實(shí)際 N-bit 的 ADC 的 SNR 一定小于(6)。
為了評估實(shí)際ADC的優(yōu)劣,我們往往在實(shí)驗(yàn)中用滿量程正弦波輸入實(shí)際ADC,測出SNR,然后代入(6)反向計(jì)算出N,稱為ADC的有效位(ENOB)。ENOB代表了該ADC在測量滿量程正弦波時(shí),SNR相當(dāng)于多少bit的理想ADC。
注意:ENOB并不能代表ADC輸入直流時(shí)的分辨率,只能代表交流性能,而ADC的直流分辨率位數(shù)可能大于或小于它的ENOB。這部分內(nèi)容不做贅述。
用公式(6)計(jì)算理想ADC的SNR前,一定要檢查兩個(gè)條件是否滿足:
條件①:ADC未超量程。否則 y[n] 和 x[n] 之差就會很大,量化噪聲 e[n] 就不能視作均勻分布于相鄰量化值之間,則公式(4)不成立,無法推導(dǎo)出公式(6) 。
條件②:輸入信號 x[n] 的幅度要遠(yuǎn)大于相鄰兩個(gè)量化值之差 δ 。否則量化噪聲 e[n] 同樣不能視作均勻分布于相鄰量化值之間,公式(4)不成立,無法推導(dǎo)出公式(6) 。
注意:對于位數(shù) N 很小的ADC, q 會很小,δ 會很大,條件②很容易被違反。其中二值量化器( N=1,q=2,δ=2 )是一個(gè)極端,完全無法套用公式(6)來計(jì)算SNR,其SNR會比公式(6)算出來的 7.78 dB 小很多。
Ⅲ ADC過采樣技術(shù)
設(shè)我們有一個(gè)采樣率為 fs 的ADC,然后輸入給該 ADC 一個(gè)帶寬為 fB 的模擬信號。眾所周知,ADC 的理論帶寬是奈奎斯特帶寬 fs/2 ,也即我們要滿足 fs/2>fB ,才能保證高頻部分不會混疊到低頻。
除了要保證 fs/2>fB 外,我們還可以使用 ADC過采樣技術(shù)來提高SNR。方法是:
選取采樣率更快的 ADC (更大的 fs ),讓 fs/2 遠(yuǎn)大于fB ;
然后在 ADC 后加一個(gè)帶寬為 fB 數(shù)字低通濾波器。
考慮到 ADC 的量化噪聲和熱噪聲往往是白噪聲,均勻分布于奈奎斯特帶寬 [0,fs/2) 內(nèi)。加了數(shù)字低通濾波器后, f∈[0,fB) 內(nèi)的信號和噪聲被保留, f∈[fB,fs/2) 內(nèi)的噪聲被濾掉。因此噪聲會降低到原來的 fs/(2fB) ,SNR 會提升 fs/(2fB) 倍:
過采樣原始SNR過采樣=SNR原始×fs2fB
在分貝標(biāo)度上我們可以得到:
過采樣原始SNR過采樣=10log10?(SNR原始×fs2fB)(dB)
原始=SNR原始+10log10?fs2fB(dB)
過采樣技術(shù)帶來的信噪比提升……ADC過采樣技術(shù)帶來的信噪比提升(7)
這就是ADC的過采樣技術(shù)。其中我們稱 fs/(2fB) 為過采樣比。
公式(7)告訴我們,采樣率 fs 每提升10倍,SNR 就提升 10dB;采樣率 fs 每提升4倍,SNR 就提升 6.02dB,也即 ENOB 提升 1bit。
注意公式(7)成立的兩個(gè)條件:
條件①:使用的低通濾波器足夠理想,也即通帶和阻帶間增益足夠陡,阻帶的增益足夠??;
條件②:ADC 的噪聲近似白噪聲。
如果ADC的噪聲偏紅(更多地分布于低頻),由于低通濾波器無法濾掉這些低頻噪聲,則過采樣技術(shù)就收效甚微,無法獲得公式(7)那么多的SNR提升。
反之,若噪聲偏藍(lán)(更多地分布于高頻),過采樣技術(shù)就能獲得比公式(7)還好的SNR提升,本文要介紹的ΣΔADC 就用了該思路。
作為引子,我們看看對理想 ADC 使用過采樣技術(shù)達(dá)到的效果如何。我們把滿幅正弦波 x[n]=sin?(2πn/2048) 輸入不同 q 值的量化器,得到輸出 y[n] 如圖2(上)、量化噪聲 e[n] 如圖2(中)、y[n] 的 262144 個(gè)樣點(diǎn)的頻譜如圖2(下),并計(jì)算 SNR 展示在表2 第一行。
然后我們用過采樣技術(shù),在頻譜上截取帶寬 f表2 第二行(相當(dāng)于使用了理想低通濾波器)。根據(jù)公式(7)知,這樣可讓 SNR 提升 18dB,然而從表2 知,當(dāng) q 很小時(shí),過采樣技術(shù)帶來的 SNR 提升遠(yuǎn)不及 18dB。這是因?yàn)閺?strong>圖2(中)可知,當(dāng)量化不夠“細(xì)膩”,也就是 δ 不顯著小于 x[n] 的幅度時(shí),量化噪聲 e[n] 與 x[n] 呈強(qiáng)相關(guān),不能被近似為白噪聲,而是偏紅,導(dǎo)致過采樣技術(shù)收效甚微。
圖2:滿幅正弦波輸入理想ADC得到的時(shí)域輸出(上);量化噪聲(中);輸出的頻譜(下)
Ⅳ 二值調(diào)制器
二值調(diào)制器并不是一個(gè)元件,而是泛指一類能把輸入信號轉(zhuǎn)化為二值信號的元件。在本文中,二值信號是指取值僅為 -1.0 或 +1.0 的離散信號,也可以視為1bit數(shù)字信號。
衡量二值調(diào)制器的性能的方法是看它輸出的二值信號是否能在頻譜上盡量多的保留其輸入信號的信息。具體來說,我們對輸入信號和輸出信號分別做離散傅里葉變換(FFT),看它們的頻譜在一定帶寬內(nèi)是否相似,越相似越好。
上一節(jié)介紹的二值量化器就是一種二值調(diào)制器,但它的性能并不好,因?yàn)槠湟氲牧炕肼?e[n] 主要分布于低頻(偏紅),和信號混在同一帶寬內(nèi),用低通濾波器并不能把大多數(shù) e[n] 濾掉。
后文我們會看到幾種性能更好的二值調(diào)制器(PWM調(diào)制器、Δ調(diào)制器、ΣΔ調(diào)制器)。它們引入的噪聲 e[n] 呈現(xiàn)白色或藍(lán)色,用低通濾波器濾掉大多數(shù)高頻噪聲后,可以獲得較高的 SNR 。
二值調(diào)制器分為兩種:
離散二值調(diào)制器:輸入離散信號,輸出二值離散信號 (1bit數(shù)字信號) ,可用數(shù)字電路或計(jì)算機(jī)算法來實(shí)現(xiàn)。本文后文要講的PWM調(diào)制器、離散Δ調(diào)制器、離散ΣΔ調(diào)制器都屬于離散二值調(diào)制器。
模擬二值調(diào)制器:輸入連續(xù)信號,輸出二值離散信號 (1bit數(shù)字信號) ,可用模數(shù)混合電路來實(shí)現(xiàn)。(下)篇文章中要講的模擬ΣΔ調(diào)制器就屬于模擬二值調(diào)制器。
如圖3,模擬二值調(diào)制器可以用來實(shí)現(xiàn)ADC,離散二值化調(diào)制器可以用來實(shí)現(xiàn)DAC。后級都加了低通濾波器用來濾除二值信號中我們不關(guān)心的高頻噪聲,來盡量還原原始信號。
圖3:用二值調(diào)制器實(shí)現(xiàn)ADC和DAC
顯然,二值調(diào)制器的性能是這種 ADC 和 DAC 關(guān)鍵,因?yàn)槿绻嫡{(diào)制器性能差,產(chǎn)生的二值信號在我們關(guān)心的低頻帶寬內(nèi)混雜了過多的噪聲,那么即使低通濾波器再理想,也無法濾掉這種噪聲。
這也是為什么后文要花大篇幅來分析 離散ΣΔ調(diào)制器 ,掌握了離散ΣΔ調(diào)制器的分析方法,我們才能設(shè)計(jì)出 SNR 足夠高的 ΣΔDAC 。
相反,圖3中的低通濾波器設(shè)計(jì)相對簡單,只要滿足通帶和阻帶間增益足夠陡,阻帶的增益足夠小,它就能從二值信號中盡量濾掉我們不想要的高頻噪聲,保留低頻信號。濾波器的設(shè)計(jì)是《信號與系統(tǒng)》和《數(shù)字信號處理》中的基礎(chǔ)知識,而且 MatLab、Python 中有成熟的濾波器設(shè)計(jì)工具,因此本文不做贅述。
Ⅴ PWM調(diào)制器
PWM調(diào)制器是一種最直觀的二值調(diào)制器。PWM調(diào)制器用直觀的“占空比”法來產(chǎn)生二值信號 y[n] 。如圖4,它把相鄰 m 個(gè)樣點(diǎn)視作一個(gè)時(shí)間片,在時(shí)間片內(nèi)放置 r 個(gè) +1 和 (m?r) 個(gè) -1 ,因此該時(shí)間片內(nèi)的均值是:
yˉ=1×r+(?1)×(m?r)m=2rm?1
其中 r 是占空比, 1m 是PWM頻率。它們都是算法或數(shù)字電路中可以改變的參數(shù)。通常我們保持 m 固定,通過改變 r 來讓 yˉ=x ,也即讓輸出信號在時(shí)間片內(nèi)的均值等于輸入信號:
yˉ=x
?2rm?1=x
?rm=x+12
圖4:PWM調(diào)制
Ⅵ 離散Δ調(diào)制器
Δ調(diào)制器是另一種二值調(diào)制器,是ΣΔ調(diào)制器的前身。圖6是離散Δ調(diào)制器的系統(tǒng)框圖,其中Δ調(diào)制器只是左半部分,它輸出二值信號y[n]。右半部分是一個(gè)補(bǔ)償器,它輸出的w[n]不是二值信號。該補(bǔ)償器的參數(shù)需要根據(jù)積分器的參數(shù)來設(shè)計(jì)。在現(xiàn)實(shí)應(yīng)用中積分器和補(bǔ)償器是不同的實(shí)現(xiàn),比如模擬Δ調(diào)制器中的積分器是模擬積分器,而補(bǔ)償器是數(shù)字電路實(shí)現(xiàn)。
圖6:離散Δ調(diào)制器的系統(tǒng)框圖
圖7:Δ調(diào)制器在輸入正弦波時(shí)的現(xiàn)象
在后文中,約定小寫字母 (x[n], v[n], y[n]) 代表時(shí)域離散信號,大寫字母 (X, V, Y) 代表對應(yīng)的 z 變換后的信號。
我們先進(jìn)行直觀理解:設(shè) x[n] 是正弦信號,得到各個(gè)信號的波形圖如圖7??梢钥吹?v[n] 在試圖跟隨 x[n],這是因?yàn)楫?dāng) x[n]>v[n] 時(shí),二值量化器會輸出 y[n]=+1,而因?yàn)?v[n+1]=αv[n]+ky[n] ,只要 α 不是太小,就能讓 v[n+1]>v[n] ,也就是讓 v[n]增大。同理當(dāng) x[n]
有了直觀理解后,進(jìn)行理論分析,首先我們知道時(shí)域關(guān)系:
v[n+1]=αv[n]+ky[n]……(8)
考慮到 y[n]只取+1 和-1,所以 v[n]能達(dá)到的最高的變化率與 v[n] 的取值有關(guān),為:
|Δv|max=min((α?1)v,(1?α)v)+k……(9)
而滿幅正弦波 x[n]=sin?(2πnf/fs) 的變化率隨著 x[n] 的取值而變化,關(guān)系為:
|Δx|max=2πffscos?(arcsin?x)……(10)
為了讓 v[n] 能跟隨 x[n],必須保證 |Δv|max>|Δx|max ,即:
min((α?1)x,(1?α)x)+k>2πffscos?(arcsin?x)……(11)
解(11)得Δ調(diào)制器必須滿足約束:
k2?(1?α)2>(2πffs)2
調(diào)制器能成功跟隨的條件……Δ調(diào)制器能成功跟隨的條件(12)
下面我們推導(dǎo)Δ調(diào)制器在 z 變換域的傳遞函數(shù),注意我們把二值量化器進(jìn)行了線性近似,E 是它的量化噪聲。 另外,以下公式中的大寫字母都是 z 變換域的復(fù)變函數(shù),比如 Y 應(yīng)寫做 Y(z),這里省略了(z)。
Y=X+E?kz?11?αz?1Y
?Y=1?αz?11?(α?k)z?1(X+E)
調(diào)制器的傳遞函數(shù)……Δ調(diào)制器的傳遞函數(shù)(14)
(14)的傳遞函數(shù)有一個(gè)極點(diǎn) z=α?k ,要讓系統(tǒng)穩(wěn)定,令極點(diǎn)在單位圓內(nèi):
調(diào)制器穩(wěn)定的條件?1<α?k<1???……Δ調(diào)制器穩(wěn)定的條件(15)
從前文的直觀敘述我們知道,二值信號 y[n] 包含 v[n] 的增加/減小信息,當(dāng) x[n] 是直流時(shí),v[n] 在 x[n]上下跳躍,此時(shí) y[n]在+1, -1 間交替,并不包含直流信息。這一點(diǎn)我們也可以從傳遞函數(shù)(14)來理解,在直流(z → 1)時(shí),由于α一般接近于 1,導(dǎo)致 Y 非常小,說明直接使用 y[n] 作為輸出就會丟失 x[n] 的直流部分,因此對Δ調(diào)制器來說,加入圖6所示的補(bǔ)償器是必須的,該補(bǔ)償器的傳遞函數(shù)為 1?(α?k)z?11?αz?1 ,具有積分的效果,可以從 y[n] 中恢復(fù)出 x[n] 的直流信息。經(jīng)補(bǔ)償后,(14)前面的因子被消掉:
調(diào)制器補(bǔ)償后的傳遞函數(shù)W=X+E……Δ調(diào)制器補(bǔ)償后的傳遞函數(shù)(16)
習(xí)慣上,把傳遞函數(shù)表示成:
W=HxX+HeE
其中 Hx 稱為信號傳遞函數(shù); He 稱為噪聲傳遞函數(shù)。
我們發(fā)現(xiàn),經(jīng)補(bǔ)償后 Hx=He=1 ,這似乎意味著只要滿足約束條件(12)(15)就能隨意配置參數(shù)α和k,實(shí)則不然,因?yàn)槎盗炕鞯姆蔷€性,實(shí)踐中會觀察到 α=1 時(shí)量化噪聲 e[n] 近似白噪聲,而 e[n] 越小,e[n]越分布于低頻。因此實(shí)踐中往往令 α=1 ,再在(12)(15)的約束下配置一個(gè)盡量小的 k 。在模擬Δ調(diào)制器設(shè)計(jì)中,由于一些現(xiàn)實(shí)問題,比如運(yùn)放開環(huán)增益并不是無窮大,導(dǎo)致積分器緩慢泄漏,即 α 是一個(gè)略小于 1 的值(比如 0.99)都是完全能容忍的。不過 α 不能過小,否則會導(dǎo)致低頻噪聲很大。
為了驗(yàn)證以上結(jié)論,我們在(12)(15)的約束下設(shè)計(jì)出七種 α, k 的組合如表3。我們編寫代碼仿真,將正弦波 x[n]=0.9sin(2πn/4096) 輸入這些Δ調(diào)制器,計(jì)算出帶寬 f表3。可以看出在 α>0.97 時(shí) SNR 都還不錯(cuò),但隨著 α 繼續(xù)減小,SNR會持續(xù)惡化。
加補(bǔ)償?shù)摩ふ{(diào)制器的傳遞函數(shù)為 W=X+E ??紤]到當(dāng) α 接近 1 時(shí),E 為白噪聲,過采樣技術(shù)帶來的 SNR 提升滿足公式(7),即每過采樣 4 倍,SNR 提升 6.02dB 。注意:Δ調(diào)制器與 1-bit ADC 的區(qū)別就在于 1-bit ADC 的量化噪聲 E 不是白噪聲,導(dǎo)致過采樣技術(shù)失效;而Δ調(diào)制器不會使過采樣技術(shù)失效。
Ⅶ 離散一階ΣΔ調(diào)制器
對Δ調(diào)制器稍作修改就能得到一階ΣΔ調(diào)制器如圖8,它后面也有一個(gè)補(bǔ)償器(但不是必須的)。為了方便分析,設(shè)積分器無泄漏(α = 1)。實(shí)際使用中與Δ調(diào)制器同樣, α 不能與 1 相差過大,否則影響性能。另外,相比于Δ調(diào)制器,反饋回路中多了一個(gè)增益 g ,因此ΣΔ調(diào)制器有兩個(gè)參數(shù):k, g 。
圖8:離散一階ΣΔ調(diào)制器的系統(tǒng)框圖
我們依然先進(jìn)行直觀理解:設(shè) k=0.3, g=1.2 ,分別考察輸入 x[n] 為以下情況時(shí)的現(xiàn)象:
直流輸入 x[n]=0 ,如圖9(左),當(dāng) y[n]=?1 時(shí) u[n]=g ,由于積分器的存在導(dǎo)致 v[n] 上升, 導(dǎo)致二值量化器下次會輸出 y[n+1]=1 。反之,當(dāng) y[n]=1 時(shí)會讓 v[n] 下降,導(dǎo)致 y[n+1]=?1 。 總之, y[n] 會在+1 和-1 上反復(fù)跳躍。
直流輸入 x[n]=0.5 ,如圖9(右) ,當(dāng) y[n]=?1 時(shí) u[n]=0.5+g ,引起的 v[n] 的上升量為 v[n+1]?v[n]=k(g+0.5) ;同理當(dāng) y[n]=1 時(shí)引起的 v[n] 的下降量為 ?v[n+1]+v[n]=k(g?0.5) 。 這說明每次 v[n] 上升的更多而下降的更少,最終的效果是 v[n] 在 0 附近跳躍,但需要更多的上升步數(shù) 和更小的下降步數(shù),導(dǎo)致 y[n]=1 的情況更多,y[n]=?1 的情況更少。
直流輸入 x[n]=0.001 ,v[n] 每次的上升量為 k(g+0.001) ;下降量為 k(g?0.001) , 盡管上升量和下降量相差很小,但畢竟有微小區(qū)別,這使得在足夠長的時(shí)間內(nèi) y[n]=1 的情況略多, y[n]=?1 的情況略少。這說明理論上一階ΣΔ調(diào)制器有無限精確的直流分辨率!這是Δ調(diào)制器不具備的。 不過這依賴于足夠多的樣點(diǎn)以及后級數(shù)據(jù)處理手段。
正弦輸入 x[n]=0.9sin?(2πn/64) ,如圖10,可以看到當(dāng) x[n] 較大時(shí) y[n]=1 的情況更多;當(dāng) x[n] 較小時(shí) y[n]=?1 的情況更多。
圖9:一階ΣΔ調(diào)制器在輸入 x[n]=0 (左) 和 x[n]=0.5 (右) 時(shí)的現(xiàn)象
圖10:一階ΣΔ調(diào)制器在輸入正弦波時(shí)的現(xiàn)象
下面我們根據(jù)圖8推導(dǎo)ΣΔ調(diào)制器的傳遞函數(shù),注意二值量化器被進(jìn)行了線性近似,E 是它的量化噪聲:
Y=E+V
?Y=E+k1?z?1U
?Y=E+k1?z?1(X?gz?1Y)
?Y=kX+(1?z?1)E1?(1?gk)z?1
一階調(diào)制器的傳遞函數(shù)……一階ΣΔ調(diào)制器的傳遞函數(shù)(17)
(17)有一個(gè)極點(diǎn) z=1?gk ,要讓系統(tǒng)穩(wěn)定,令極點(diǎn)在單位圓內(nèi):
一階調(diào)制器穩(wěn)定的必要條件0
我們也可以在ΣΔ調(diào)制器后加入補(bǔ)償器。這樣可以消掉(17)的分母:
W=1?(1?gk)z?1kY
?W=1?(1?gk)z?1k×kX+(1?z?1)E1?(1?gk)z?1
?W=X+(1?z?1)kE
一階調(diào)制器補(bǔ)償后的傳遞函數(shù)……一階ΣΔ調(diào)制器補(bǔ)償后的傳遞函數(shù)(18)
實(shí)踐中 gk 并不會設(shè)的太小,因此(17)中的分母 (1?(1?gk)z?1)?1 幾乎不影響低頻( z→1 )的相移和增益的平坦性,因此ΣΔ調(diào)制器的補(bǔ)償器不是必須的,通常我們省略掉補(bǔ)償器,而不像Δ調(diào)制器必須進(jìn)行補(bǔ)償。
現(xiàn)在假設(shè)我們不加補(bǔ)償,也即直接使用圖8中的 Y 作為輸出。根據(jù)(17),我們可以得出ΣΔ調(diào)制器的信號增益和噪聲增益:
Hx=k1?(1?gk)z?1
He=(1?z?1)1?(1?gk)z?1
調(diào)制器的信號傳遞函數(shù)和噪聲傳遞函數(shù)……ΣΔ調(diào)制器的信號傳遞函數(shù)Hx和噪聲傳遞函數(shù)He(19)
考慮到我們只關(guān)注低頻,也即 z 在單位圓上接近 z=1 的位置,此時(shí)噪聲傳遞函數(shù) He 趨近于一 階無窮小,這說明如果我們關(guān)心的信號 x[n] 分布于低頻,則 ΣΔ 調(diào)制器只會引入很小的噪聲,SNR很高。
為了直觀說明這個(gè)特點(diǎn),我們使用《信號與系統(tǒng)》中學(xué)過的頻率響應(yīng)法來畫出ΣΔ調(diào)制器的噪聲頻譜 (噪聲幅頻特性曲線)。具體方法是:把 z=exp?(j2πf/fs) (z 取單位圓上的點(diǎn))代入(19),繪制 |He| 的函數(shù)圖,得到如圖13中的藍(lán)線,可以看出 |He| 隨著 f 的減小而減小,這說明:如果圖8中的二值量化器量化噪聲 E 是白噪聲,則ΣΔ調(diào)制器輸出的噪聲偏藍(lán)。因此只要我們關(guān)注的頻率足夠低,帶內(nèi)噪聲就會很小,得到的 SNR 也會非常高。
Ⅷ 離散高階ΣΔ調(diào)制器
將一階ΣΔ調(diào)制器中的減法-積分器結(jié)構(gòu)復(fù)制M份就能得到M階直連型ΣΔ調(diào)制器如圖12。推導(dǎo)其傳遞函數(shù):
Y=E+k1?z?1(?gz?1+k1?z?1(?g2z?1+k1?z?1(...k1?z?1(?gMz?1Y+X))))
?Y=z?1?(1?gk)(gk)M+1z?1?(1?gk)(1?z?1)M+1(kMX+(1?z?1)ME)
階直連型調(diào)制器的傳遞函數(shù)……M階直連型ΣΔ調(diào)制器的傳遞函數(shù)(20)
圖12:離散M階ΣΔ調(diào)制器的系統(tǒng)框圖
現(xiàn)在考察該傳遞函數(shù)(20)的穩(wěn)定性,也就是看左邊的因子項(xiàng)的極點(diǎn)是否都在單位圓內(nèi)。我們利用數(shù)值計(jì)算得到一階到五階的穩(wěn)定條件如表4。注意這是線性系統(tǒng)的穩(wěn)定條件!由于因?yàn)榱炕鞯姆蔷€性,該系統(tǒng)還存在非線性失穩(wěn)的可能,因此表4只是系統(tǒng)穩(wěn)定的必要條件。
然后考察幅頻特性,若我們補(bǔ)償?shù)?20)中左邊的因子,得到信號傳遞函數(shù) Hx=kM ,噪聲傳遞函數(shù) He=(1?z?1)M 。顯然 He 在 z=1 處有n重零點(diǎn),這意味著當(dāng)頻率很?。?f<圖13。可以看出在帶寬 f<0.16fs 內(nèi),階數(shù)越高,帶內(nèi)噪聲一定越小。
圖13:理想ΣΔ調(diào)制器的理論噪聲增益:奈奎斯特帶寬內(nèi)的線性坐標(biāo)(左);低頻內(nèi)的對數(shù)坐標(biāo)(右)
這看似是個(gè)非常好的結(jié)論,意味著我們只要按圖12的結(jié)構(gòu)堆疊階數(shù),理論上就能在我們關(guān)心的低頻帶寬內(nèi)得到無限低的噪聲。然而,在階數(shù) M>3 時(shí),量化器的非線性往往會產(chǎn)生非線性失穩(wěn):我們可以把量化器看作一個(gè)增益元件,當(dāng)量化器的輸入 vM[n] 越大時(shí),增益反而越小,因?yàn)橄到y(tǒng)構(gòu)成環(huán)路,增益過小會導(dǎo)致環(huán)路失穩(wěn)。除了非線性失穩(wěn)問題,高階情況下各積分器的輸出 vi[n] 的范圍往往不易控制,若不精心設(shè)置系統(tǒng),很可能導(dǎo)致 vi[n] 遠(yuǎn)超出范圍 [-1,+1] ,在實(shí)際電路實(shí)現(xiàn)中,可能超出器件的線性工作區(qū)。
所幸我們有很多辦法來規(guī)避這些問題,讓高階ΣΔ調(diào)制器變得可行:
配置圖12中的增益參數(shù) 。比如增加 g 來讓環(huán)路有足夠的增益;減小 k 來控制 vi[n] 的范圍。實(shí)際上各個(gè)積分器的增益 k 可取不同值,反饋路徑的增益 g 也可取不同值,來達(dá)到更優(yōu)的結(jié)果。本文只考慮它們都相同的情況。
在圖12的基礎(chǔ)上增加新的信號通路(比如前向通路)來達(dá)到同樣的目的。
拋棄圖12的積分器高階級聯(lián)結(jié)構(gòu),而是使用多個(gè)低階ΣΔ調(diào)制器級聯(lián)來等效出高階的效果。
方法2和3更復(fù)雜且效果好,被廣泛用在當(dāng)今的ΣΔADC集成芯片中。下文我們僅僅簡單地用方法1來讓二階和三階ΣΔ調(diào)制器變得可行。
Ⅸ 離散二階、三階ΣΔ調(diào)制器
根據(jù)圖12,二階ΣΔ調(diào)制器的系統(tǒng)框圖如圖14;三階ΣΔ調(diào)制器的系統(tǒng)框圖如圖15。
圖14:離散二階ΣΔ調(diào)制器的系統(tǒng)框圖
圖15:離散三階ΣΔ調(diào)制器的系統(tǒng)框圖
根據(jù)公式(12)得出,二階ΣΔ調(diào)制器的傳遞函數(shù):
Y=k2X+(1?z?1)2E1?(1?gk)(2+gk?z?1)z?1……(21)
以及三階ΣΔ調(diào)制器的傳遞函數(shù):
Y=k3X+(1?z?1)31?(1?gk)(3+2gk+g2k2?(3+gk)z?1+z?2)z?1……(22)
如表5,筆者用代碼仿真的方法確定了能夠穩(wěn)定,且效果較好的二階ΣΔ調(diào)制器的參數(shù) (M=2, k=0.6, g=1.2),以及較好的三階ΣΔ調(diào)制器的參數(shù) (M=3, k=0.3, g=1.3)。為了幫助直觀理解,我們用該二階和三階ΣΔ調(diào)制器繪制了一段時(shí)域波形如圖16和圖17 。
圖16:二階ΣΔ調(diào)制器在輸入正弦波時(shí)的現(xiàn)象
圖17:三階ΣΔ調(diào)制器在輸入正弦波時(shí)的現(xiàn)象
然后我們考察這些配置下的噪聲傳遞函數(shù)。把我們選擇的一階ΣΔ調(diào)制器的參數(shù) (M=1, k=0.45, g=1.2) 、二階ΣΔ調(diào)制器的參數(shù)(M=2, k=0.6, g=1.2) 、三階ΣΔ調(diào)制器的參數(shù)(M=3, k=0.3, g=1.3) 分別代入 (17)、 (21) 和 (22) 并繪制噪聲傳遞的幅頻曲線 |He| ,如圖18 ,可以看出,階數(shù)越高,噪聲增益越低。
圖18:本文的實(shí)驗(yàn)使用的幾種ΣΔ調(diào)制器配置(見表5)的理論噪聲增益
Ⅹ 各種離散二值調(diào)制器的實(shí)現(xiàn)和評估
本節(jié)對幾種離散二值調(diào)制器進(jìn)行評估。我們用 Python 3 實(shí)現(xiàn)了上文中的二值調(diào)制器(部分代碼見附錄),并找到幾種效果不錯(cuò)的配置如表5。
直觀起見,取輸入信號 x[n]=0.9sin(2πn/256) ,繪制各調(diào)制器的輸出如圖19,樣點(diǎn)的數(shù)量為256??梢钥闯觯撼甩ふ{(diào)制器外,其余的調(diào)制器均體現(xiàn)出 x[n] 越大則輸出的均值越大的規(guī)律。而Δ調(diào)制器要經(jīng)補(bǔ)償后才能看出這個(gè)規(guī)律。
圖19:輸入為 x[n]=0.9sin(2πn/256) 時(shí)各個(gè)調(diào)制器產(chǎn)生的輸出
然后取輸入 x[n]=0.9sin?(2πn/2048) 繪制 218 個(gè)點(diǎn)的頻譜如圖20 。可以看出不同的調(diào)制器有不同的底噪,Δ調(diào)制器好于PWM調(diào)制器;ΣΔ調(diào)制器好于Δ調(diào)制器;高階ΣΔ調(diào)制器好于低階ΣΔ調(diào)制器。另外,Δ調(diào)制器的底噪呈現(xiàn)白色,而所有ΣΔ調(diào)制器的底噪都呈現(xiàn)出頻率越低,噪聲越小的現(xiàn)象,這符合之前的理論分析。
圖20:輸入為 x[n]=0.9sin(2πn/2048) 時(shí)各個(gè)調(diào)制器輸出的信號的頻譜(2^18個(gè)點(diǎn))
最后,取不同的正弦波幅度和頻率,用 220 個(gè)點(diǎn)的頻譜計(jì)算帶寬 f表6。注意:在計(jì)算頻譜和SNR時(shí),為了防止頻譜泄漏,時(shí)間窗口都截取 x[n] 的完整周期,且窗口長度是周期長度的2的次冪倍。
Ⅺ 總結(jié)
本文帶讀者“入門”了ΣΔ技術(shù),內(nèi)容包括:
理想ADC的信噪比計(jì)算。
ADC過采樣技術(shù);以及其在量化階數(shù)q較小時(shí)的局限性——量化噪聲不再是白噪聲,導(dǎo)致過采樣技術(shù)收效甚微。
離散二值調(diào)制器、模擬二值調(diào)制器的基本概念;以及如何用前者實(shí)現(xiàn)DAC,用后者實(shí)現(xiàn)ADC。
最直觀的二值調(diào)制器——PWM調(diào)制器。
ΣΔ調(diào)制器的前身——Δ調(diào)制器,分析出其量化噪聲呈白噪聲,從而讓過采樣技術(shù)生效。
一階離散ΣΔ調(diào)制器,分析出其量化噪聲偏藍(lán),從而讓過采樣技術(shù)獲得奇效。
高階離散ΣΔ調(diào)制器:從z變換的角度解釋階數(shù)高的好處,也指出了高階面臨的穩(wěn)定性問題。
比較了離散PWM調(diào)制器、Δ調(diào)制器、離散一二三階ΣΔ調(diào)制器的信噪比。
離散ΣΔ調(diào)制器可以實(shí)現(xiàn)ΣΔDAC。如果對ΣΔADC的基礎(chǔ)——模擬ΣΔ調(diào)制器感興趣,請閱讀(下)篇:
ΣΔ(Sigma-Delta)技術(shù)詳解(下):模擬ΣΔ調(diào)制器73 贊同 · 12 評論文章
附:一階、二階、三階ΣΔ調(diào)制器的Python實(shí)現(xiàn)
# -*- coding:utf-8 -*- # python3 # 離散ΣΔ調(diào)制器(一階、二階、三階) import numpy as np import matplotlib.pyplot as plt # 運(yùn)行參數(shù) -------------------------------------------------------------------------------- MARGIN = 16384 # 初始丟棄點(diǎn)數(shù) TIME = 1048576 # 有效點(diǎn)數(shù) PERIOD_X = 2048 # 正弦周期 AMP_X = 0.9 # 正弦幅度 BAND_RATIO = 0.5/240 # 過采樣比 MODULATORS = [ # 參與評估的調(diào)制器配置,格式: [ 名稱 , 階數(shù) , k , g ] ------------ ['ΣΔ1' , 1 , 0.5 , 1.2 ] , ['ΣΔ2' , 2 , 0.6 , 1.2 ] , ['ΣΔ3' , 3 , 0.3 , 1.3 ] , ] def sigma_delta_mod(X, M, k, g): # ΣΔ 調(diào)制函數(shù) --------------------------------------- Y = np.zeros(len(X)) # 輸出信號 V = np.zeros([M, len(X)]) # 中間信號 for t in range(len(X)): # 遍歷時(shí)間 V[0][t] = V[0][t-1] + k*(X[t] - Y[t-1]*g**M ) # 積分操作 for m in range(1, M): # 遍歷階數(shù) V[m][t] = V[m][t-1] + k*(V[m-1][t] - Y[t-1]*g**(M-m)) # 積分操作 Y[t] = 1.0 if V[M-1][t] > 0 else -1.0 # 量化操作 return Y if __name__ == '__main__': # 主程序 -------------------------------------------- X = np.sin(np.arange(MARGIN+TIME)*2*np.pi/PERIOD_X) * AMP_X # 構(gòu)造正弦波 for (label, M, k, g) in MODULATORS: Y = sigma_delta_mod(X, M, k, g) # 調(diào)制 Y = Y[MARGIN:] # 丟棄邊界 FFT_A = np.abs(np.fft.fft(Y))[1:int(TIME*BAND_RATIO)] + 10e-8 # 計(jì)算頻譜 FFT_F = np.arange(1,int(TIME*BAND_RATIO)) / TIME # 計(jì)算頻譜橫軸 peak = np.argmax(FFT_A) # 計(jì)算峰值 snr = 1.0/(sum(FFT_A**2)/sum(FFT_A[peak-4:peak+4]**2)-1.0) # 計(jì)算SNR plt.plot(FFT_F, FFT_A, label=label ) print('%s SNR=%.1fdB' % (label, 10*np.log10(snr) ) ) plt.xlabel('Frequency (normalized to sample frequency)') plt.yscale('log') plt.legend() plt.grid(True)
審核編輯 黃宇
-
dac
+關(guān)注
關(guān)注
43文章
2294瀏覽量
191064 -
調(diào)制器
+關(guān)注
關(guān)注
3文章
841瀏覽量
45162
發(fā)布評論請先 登錄
相關(guān)推薦
評論