問題理解
使用數(shù)字濾波器時需要考慮的一個重要問題是信號電平對其數(shù)字到模擬域轉(zhuǎn)換產(chǎn)生的影響。假設(shè)系統(tǒng)為處理單元提供數(shù)字信號,并在沒有進(jìn)行任何處理的情況下,使用一種理想的 DAC將其轉(zhuǎn)換為模擬,如圖1所示。本例中,我們將0-dBFS數(shù)字信號供給DAC,并把它轉(zhuǎn)換成模擬域。滿量程振幅信號編解碼器規(guī)范中說明了數(shù)字編碼和模擬輸出振幅之間的關(guān)系。如果滿量程振幅規(guī)范為0.707 VRMS(即1peak),這就意味著滿量程0-dBFS數(shù)字正弦波將會產(chǎn)生1-Vpeak的正弦波,如圖所示。
如果DAC的限制為–2n–1和2n–1–1,由于在輸出端對其進(jìn)行削波處理,因此對超出這些限制的信號進(jìn)行放大處理會使信號失真(假設(shè)飽和邏輯),如圖2所示。請注意,大多數(shù)信號處理器一般在向DAC提供數(shù)據(jù)以前都允許一定量的余量。處理器內(nèi)存中的數(shù)據(jù)保持不失真很重要。圖2描述了超出限制時可能會出現(xiàn)輸出削波的一些DAC輸入限制。
圖1:表示為1-Vpeak模擬信號的滿量程數(shù)字信號
圖2:數(shù)字域的過多增益可使信號超出DAC的上下限
這個問題的一種解決方案是保證放大信號時不超出DAC的限制(即保證不將正增益應(yīng)用于源信號)。然而,許多情況下,這種解決方案的效果并不那么明顯。在某個具體頻率范圍內(nèi),相對于滿量程DAC輸入振幅執(zhí)行一次信號增強,也會帶來一些不利影響。圖3中,500-Hz信號增強6 dB。我們在模擬輸出中觀測到失真,這是由于DAC削波。
圖3:指定頻率帶的可能升壓效果
圖4同樣描述了這種概念。請注意,當(dāng)傳遞到處理器內(nèi)存的更大總線寬時,源數(shù)據(jù)的噪聲得到了繼承。如前所述,數(shù)據(jù)下調(diào)量為最大總信號增強量,以適應(yīng)增強區(qū)域。但是,如圖5 所示,即使增強參考點位于某個較好的位置,DAC信號也會受到輸出SNR的影響。如果信號增強量并未極大地?fù)p害總系統(tǒng)SNR,則簡單的調(diào)節(jié)或許是一種可行的解決方案。一些低功耗編解碼器擁有100dB的SNR,其允許在不犧牲原始16位源SNR的情況下,進(jìn)行一定量的調(diào)節(jié)。
圖4:全數(shù)字信號鏈的信號組成
圖5:使用調(diào)節(jié)時的信號組成
問題理解
使用數(shù)字濾波器時需要考慮的一個重要問題是信號電平對其數(shù)字到模擬域轉(zhuǎn)換產(chǎn)生的影響。假設(shè)系統(tǒng)為處理單元提供數(shù)字信號,并在沒有進(jìn)行任何處理的情況下,使用一種理想的 DAC將其轉(zhuǎn)換為模擬,如圖1所示。本例中,我們將0-dBFS數(shù)字信號供給DAC,并把它轉(zhuǎn)換成模擬域。滿量程振幅信號編解碼器規(guī)范中說明了數(shù)字編碼和模擬輸出振幅之間的關(guān)系。如果滿量程振幅規(guī)范為0.707 VRMS(即1peak),這就意味著滿量程0-dBFS數(shù)字正弦波將會產(chǎn)生1-Vpeak的正弦波,如圖所示。
如果DAC的限制為–2n–1和2n–1–1,由于在輸出端對其進(jìn)行削波處理,因此對超出這些限制的信號進(jìn)行放大處理會使信號失真(假設(shè)飽和邏輯),如圖2所示。請注意,大多數(shù)信號處理器一般在向DAC提供數(shù)據(jù)以前都允許一定量的余量。處理器內(nèi)存中的數(shù)據(jù)保持不失真很重要。圖2描述了超出限制時可能會出現(xiàn)輸出削波的一些DAC輸入限制。
圖1:表示為1-Vpeak模擬信號的滿量程數(shù)字信號
圖2:數(shù)字域的過多增益可使信號超出DAC的上下限
這個問題的一種解決方案是保證放大信號時不超出DAC的限制(即保證不將正增益應(yīng)用于源信號)。然而,許多情況下,這種解決方案的效果并不那么明顯。在某個具體頻率范圍內(nèi),相對于滿量程DAC輸入振幅執(zhí)行一次信號增強,也會帶來一些不利影響。圖3中,500-Hz信號增強6 dB。我們在模擬輸出中觀測到失真,這是由于DAC削波。
圖3:指定頻率帶的可能升壓效果
圖4同樣描述了這種概念。請注意,當(dāng)傳遞到處理器內(nèi)存的更大總線寬時,源數(shù)據(jù)的噪聲得到了繼承。如前所述,數(shù)據(jù)下調(diào)量為最大總信號增強量,以適應(yīng)增強區(qū)域。但是,如圖5 所示,即使增強參考點位于某個較好的位置,DAC信號也會受到輸出SNR的影響。如果信號增強量并未極大地?fù)p害總系統(tǒng)SNR,則簡單的調(diào)節(jié)或許是一種可行的解決方案。一些低功耗編解碼器擁有100dB的SNR,其允許在不犧牲原始16位源SNR的情況下,進(jìn)行一定量的調(diào)節(jié)。
圖4:全數(shù)字信號鏈的信號組成
圖5:使用調(diào)節(jié)時的信號組成
量化與數(shù)字表示法
在數(shù)字處理過程中,實數(shù)表示為一個具有固定精度的整數(shù)值。這被稱作為量化法,而量化值是一個原始值的近似值。整數(shù)值可以表示為一個定點數(shù)或者浮點數(shù)。表示為定點數(shù)的某個整數(shù)值由數(shù)字位和小數(shù)位組成。表示為浮點數(shù)的某個整數(shù)值由指數(shù)位和尾數(shù)位組成。本討論全部規(guī)定為定點數(shù)和定點運算。
在數(shù)字處理過程中,實數(shù)表示為一個具有固定精度的整數(shù)值。這被稱作為量化法,而量化值是一個原始值的近似值。整數(shù)值可以表示為一個定點數(shù)或者浮點數(shù)。表示為定點數(shù)的某個整數(shù)值由數(shù)字位和小數(shù)位組成。表示為浮點數(shù)的某個整數(shù)值由指數(shù)位和尾數(shù)位組成。本討論全部規(guī)定為定點數(shù)和定點運算。定點數(shù)表示為小數(shù)點(十進(jìn)制小數(shù)點)后固定數(shù)位的二進(jìn)制補碼整數(shù)。這些數(shù)字組成數(shù)值的小數(shù)部分。小數(shù)點前面的數(shù)字為整數(shù)部分,并表示數(shù)值的范圍。整數(shù)部分還包含數(shù)值的符號。
進(jìn)入音頻處理器的數(shù)字?jǐn)?shù)據(jù)被認(rèn)為是位于-1和1-1LSB之間的一個實數(shù)。假設(shè)實值表示為一個16位定點數(shù), 則數(shù)值-1可以以二進(jìn)制表示為1000000000000000(或者十六進(jìn)制的 0x8000)。在二進(jìn)制補碼運算中,0x8000對應(yīng)一個等于–32768的整數(shù)值。這就意味著,該整數(shù)值除以32768可以得到實值的量化近似值。二進(jìn)制的16位最大正數(shù)為0111111111111111(或者十六進(jìn)制的0x7FFF)。對應(yīng)整數(shù)值為32767。將其除以32768換算系數(shù),得到這種模式表示的最大實數(shù)。該數(shù)值為32767/32768 = 0.999969482421875。圖6 顯示了這種定點表示法。
圖6:實數(shù)的定點表示法
這種表示法中,共有15個小數(shù)位和1個整數(shù)位,同時也為符號位。這就意味著,量化以前實數(shù)必須位于-1和0.999969482421875之間。如果實數(shù)超過或者低于這一范圍,其便無法以給定格式表示,因為 16 位寄存器會溢出。為了容納更大的實數(shù),我們需要增加整數(shù)部分,代價是減少小數(shù)部分。這種格式也被稱作1.15格式(1=數(shù)字位,而15=符號位)。數(shù)字處理器的輸入始終以 1.n 格式表示,其中n為小數(shù)位數(shù)(15、19、23或者31)。0dBFS值對應(yīng)于滿量程正弦波的RMS值,而該正弦波的幅值為 (2n–1)/2n。給定格式的最大實數(shù)以2n表示。用于表示某個信號的位數(shù)被稱作信號位寬或者數(shù)據(jù)位寬。
溢出與飽和
處理單元計算產(chǎn)生值大于數(shù)據(jù)位寬值時出現(xiàn)溢出。溢出一般與累加器的計算有關(guān),其相同符號的連續(xù)數(shù)值相加,然后存儲起來。即使出現(xiàn)溢出以后,累加器一般還是會繼續(xù)累加,因為只要不超出邊界仍然還是會得到正確的最終結(jié)果。
在其被存儲為信號值以前,累加器輸出就已飽和。飽和是一個正溢出轉(zhuǎn)換為最大正數(shù)而負(fù)溢出轉(zhuǎn)換為最小負(fù)數(shù)的過程。飽和是一種非線性運算,并導(dǎo)致出現(xiàn)嚴(yán)重的輸出諧波失真。我們使用余量位來防止飽和。
信號位
信號和噪聲位影響系統(tǒng)性能。數(shù)字音頻處理器增加量化噪聲,整體性能是模擬電路噪聲和量化噪聲的結(jié)果。假設(shè)兩個噪聲源都為獨立隨機過程的結(jié)果,則總系統(tǒng)噪聲性能可定義為:
其中S為均勻分布的隨機信號,NC為DAC電路噪聲,而NQ為量化噪聲。使用100-dB DAC和120-dB信號處理器,會產(chǎn)生99.96 dB的總SNR。
我們應(yīng)該注意到,總SNR也受到源—數(shù)字音頻處理器輸入的限制。如果輸入為16位數(shù),則系統(tǒng)的信號量化噪聲比(SQNR)至多為96 dB(假設(shè)為均勻分布的隨機信號,未加權(quán))。因此,在這種情況下,就算是更高位的內(nèi)部表示(更低的 NQ)也不會有明顯的改善。
噪聲位
如前所述,信號位數(shù)決定數(shù)字音頻系統(tǒng)的性能。有時,濾波器響應(yīng)計算會需要更多的位數(shù)。
濾波器實施包括一個信號流經(jīng)并被存儲為濾波器延遲元的數(shù)據(jù)通路。信號和延遲值乘以濾波器抽頭相關(guān)系數(shù)。系數(shù)量化也對系統(tǒng)性能產(chǎn)生非常重要的作用。信號和系數(shù)值的積被存儲在累加器中,其一般比信號具有更高的位寬。后續(xù)的積在累加器中相加(更高位寬),而最終濾波器輸出再以信號精度存儲(更低位寬)。
請思考圖7所示雙二階濾波器實現(xiàn)。圖中,輸入和輸出信號均以“A 位”表示。A和b系數(shù)以“B 位”表示。輸入信號及其延遲元乘以系數(shù),并在累加器相加。乘法器和累加器一共為 A+B位寬。之后,輸出信號被Q模塊量化,然后存儲為一個A位數(shù)。這樣便產(chǎn)生量化誤差,其為數(shù)字濾波器的噪聲源;因此,需要額外的位來確保數(shù)字濾波器的噪聲影響低于目標(biāo)SNR。這些額外位被稱作噪聲位。相比有限脈沖響應(yīng)(FIR)濾波器,噪聲對IIR濾波器的影響更加明顯。噪聲位數(shù)還取決于數(shù)字濾波器的采樣頻率和截止頻率。隨著采樣頻率上升,要求的噪聲位數(shù)也增加。隨著截止頻率下降,要求噪聲位數(shù)也隨之增加。48-kHz工作時,14到16噪聲位便足以維持40-Hz濾波器的目標(biāo)SNR。
圖7:雙二階濾波器實施
余量位
除了信號和噪聲位,還需要更多的位來防止溢出。這些位被稱作余量位。端到端音頻處理鏈一般會保持信號電平。這就意味著,如果0-dB信號為信號鏈的輸入,則輸出為0dB或者更低。(一般會有一個能將信號擺動限制到零以下幾分貝的信號壓縮器。)如果我們使用升壓濾波器來放大某些的信號頻帶,則其它頻帶一般會被衰減,以阻止信號升至0dB以上。就后一種情況而言,當(dāng)輸入信號電平為0dB時(也稱作中性信號電平),輸出信號會低于0dB,且僅放大后的頻帶會在輸出端達(dá)到0dB。這樣會降低音頻信號的平均音量水平。
盡管信號電平維持在0dB,但在中間處理點信號還是會溢出。為了防止溢出,我們需要余量位—即除信號和噪聲位以外的位。
共有兩個溢出源:
1、音頻處理鏈可以具有一個(在某些具體頻率值)增益大于0dB 的濾波器。該濾波器可以為一個級聯(lián)濾波器鏈(例如:低通、高通和/或帶通濾波器等)的組成部分,其總增益為0dB,或者也可以是一個放大中性信號電平相關(guān)具體頻率帶的頻率選擇濾波器(例如:現(xiàn)成的EQ濾波器)。請注意,如果實數(shù)以1.n格式表示(其中n為小數(shù)位數(shù)),則數(shù)字的大小始終小于1。因此,如果使用一個0dB以上增益(大于1的實數(shù))的濾波器,則輸入值為 0dB(等于1的一個實數(shù))時濾波器的輸出值將會溢出。為了防止在這類情況下出現(xiàn)溢出,我們需要更多的余量位。
2、增益小于或者等于0dB的濾波器會有大于1的瞬態(tài)實值。為了確保這些瞬態(tài)值不溢出,需要使用余量位。
圖8顯示了音頻處理器中信號的圖示。需要注意的重要一點是,余量位主要用于適應(yīng)中間信號增長。預(yù)計在最終處理模塊的末端,輸出將會恰好位于信號位寬內(nèi)。另外,低信號振幅時,輸出仍然會在限制以內(nèi),而不會失真;但是,高信號振幅時,輸出將會飽和,并引起失真。為了防止出現(xiàn)失真,最好是在最終輸出以前讓信號衰減。
圖8:余量位信號表示法
調(diào)節(jié)
調(diào)節(jié)用于避免增益超出0dB的濾波器出現(xiàn)飽和。我們可以專門使用一個升壓濾波器,獲得某個特定頻率。即使是一個多節(jié)低通濾波器也會有一個雙二階節(jié),其實際獲得某些高于有效余量的頻率(總響應(yīng)仍然為0dB)。在這種情況下,使用還是不使用調(diào)節(jié)方法,取決于輸入信號電平乘以總濾波器響應(yīng)的最大增益。如果乘積大于有效DAC余量,則可以使用調(diào)節(jié)方法來避免飽和。
一種調(diào)節(jié)方法是讓系統(tǒng)的傳輸函數(shù)衰減一定量,該量的大小等于濾波器傳輸函數(shù)的最大振幅。調(diào)節(jié)因數(shù)可以定義為:
其中0≤ω ≤ π。第二種方法是將輸入信號做S調(diào)節(jié)。圖9展示了調(diào)節(jié)傳輸函數(shù)的效果。滿量程正弦波為傳輸函數(shù)的輸入,其讓平坦頻率衰減6dB。相對于–6dBFS,1-kHz 信號增強了6 dB。
圖9:傳輸函數(shù)調(diào)節(jié)
在一些情況下,由于濾波器結(jié)構(gòu)和瞬態(tài)信號序列,濾波器的輸出會高于0dB,盡管其并沒有0dB以上的增益。如果單個內(nèi)存單元為0dB,且符號與抽頭相反,則FIR濾波器可以使信號增益增加的量為濾波器抽頭絕對值的和。濾波器響應(yīng)不能超出0dB,因此要使用額外余量。IIR濾波器額外余量的計算較為復(fù)雜,因為它們有許多反饋單元,同時要找到?jīng)Q定瞬態(tài)增益上限的閉型表達(dá)式是一個復(fù)雜的過程。實際上,信號處理器提供額外余量(DAC 限制以上)的原因之一是允許瞬態(tài)值余量。我們可能會需要進(jìn)行一些測量,來計算額外余量。某些情況下,可能需要對SNR做一些讓步,以處理飽和帶來的失真問題,同時還可能會需要增加模擬增益來讓信號歸于0dB。
使用調(diào)節(jié)方法,有時需要在模擬輸出級中添加額外增益(升壓)來進(jìn)行補償。應(yīng)特別注意的是,要確保升壓區(qū)域的信號不會使輸出放大器飽和,因為它會導(dǎo)致出現(xiàn)失真信號。在處理器的最終輸出級同樣也有升壓,目的是對信號調(diào)節(jié)進(jìn)行補償。這是一些多節(jié)、0dB濾波器所要求的,其信號調(diào)節(jié)的目的是防止一個或多個單節(jié)出現(xiàn)溢出。就那些獲得0dB以上頻率的濾波器(現(xiàn)成的EQ濾波器)來說,中性信號電平被調(diào)節(jié)至0dB以下。這種情況下,并不要求末級升壓。結(jié)果是損失了平坦區(qū)域的SNR。
一種更講究的解決方案是根據(jù)數(shù)字處理器應(yīng)用的音量增益來限制濾波器增益的大小,其非常適合于耳機應(yīng)用。在高音量時,降低頻率升壓并最終在全音量時為平坦。
在一些情況下,頻率升壓保持恒定,而在高音量時對信號進(jìn)行壓縮。這便是抗削波動態(tài)范圍壓縮器 (DRC) 功能:低音量時,保持原始SNR;但隨著音量的增加,調(diào)節(jié)度也成比例增加來防止出現(xiàn)失真。
不管使用哪種方法,充分考慮人們對聲音和噪聲的感知過程都是很重要的。人的聽覺有一個明顯的動態(tài)范圍。耳機放大器在噪聲層和輸出功率之間進(jìn)行平衡,以最好地適應(yīng)這一范圍。例如,TLV320AIC3254音頻編解碼器能夠向典型32-Ω或者16-Ω耳機負(fù)載提供非常高的純 500 mVRMS 聲壓級 (SPL),同時具有滿量程以下100dB的噪聲底限(加權(quán)值),其在人的聽覺閾值以下(請參見圖 10)。有時,甚至沒有必要在實施調(diào)節(jié)以后增加額外的放大率,因為輸出功率遠(yuǎn)高于舒適聽覺水平。
圖10:相對人類聽覺的耳機音量
作者:Jorge Arbona TI應(yīng)用工程師
Supriyo Palit TI軟件系統(tǒng)工程師