問題理解
使用數(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í)行一次信號增強(qiáng),也會帶來一些不利影響,。圖3中,,500-Hz信號增強(qiáng)6 dB。我們在模擬輸出中觀測到失真,,這是由于DAC削波,。
圖3:指定頻率帶的可能升壓效果
圖4同樣描述了這種概念。請注意,,當(dāng)傳遞到處理器內(nèi)存的更大總線寬時,,源數(shù)據(jù)的噪聲得到了繼承。如前所述,,數(shù)據(jù)下調(diào)量為最大總信號增強(qiáng)量,,以適應(yīng)增強(qiáng)區(qū)域。但是,,如圖5 所示,,即使增強(qiáng)參考點(diǎn)位于某個較好的位置,DAC信號也會受到輸出SNR的影響,。如果信號增強(qiáng)量并未極大地?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í)行一次信號增強(qiáng),,也會帶來一些不利影響。圖3中,,500-Hz信號增強(qiáng)6 dB,。我們在模擬輸出中觀測到失真,這是由于DAC削波,。
圖3:指定頻率帶的可能升壓效果
圖4同樣描述了這種概念,。請注意,當(dāng)傳遞到處理器內(nèi)存的更大總線寬時,,源數(shù)據(jù)的噪聲得到了繼承,。如前所述,數(shù)據(jù)下調(diào)量為最大總信號增強(qiáng)量,,以適應(yīng)增強(qiáng)區(qū)域,。但是,如圖5 所示,,即使增強(qiáng)參考點(diǎn)位于某個較好的位置,,DAC信號也會受到輸出SNR的影響。如果信號增強(qiáng)量并未極大地?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ù)值可以表示為一個定點(diǎn)數(shù)或者浮點(diǎn)數(shù)。表示為定點(diǎn)數(shù)的某個整數(shù)值由數(shù)字位和小數(shù)位組成,。表示為浮點(diǎn)數(shù)的某個整數(shù)值由指數(shù)位和尾數(shù)位組成,。本討論全部規(guī)定為定點(diǎn)數(shù)和定點(diǎn)運(yùn)算。
在數(shù)字處理過程中,,實數(shù)表示為一個具有固定精度的整數(shù)值,。這被稱作為量化法,而量化值是一個原始值的近似值,。整數(shù)值可以表示為一個定點(diǎn)數(shù)或者浮點(diǎn)數(shù),。表示為定點(diǎn)數(shù)的某個整數(shù)值由數(shù)字位和小數(shù)位組成。表示為浮點(diǎn)數(shù)的某個整數(shù)值由指數(shù)位和尾數(shù)位組成,。本討論全部規(guī)定為定點(diǎn)數(shù)和定點(diǎn)運(yùn)算,。定點(diǎn)數(shù)表示為小數(shù)點(diǎn)(十進(jìn)制小數(shù)點(diǎn))后固定數(shù)位的二進(jìn)制補(bǔ)碼整數(shù)。這些數(shù)字組成數(shù)值的小數(shù)部分,。小數(shù)點(diǎn)前面的數(shù)字為整數(shù)部分,,并表示數(shù)值的范圍。整數(shù)部分還包含數(shù)值的符號,。
進(jìn)入音頻處理器的數(shù)字?jǐn)?shù)據(jù)被認(rèn)為是位于-1和1-1LSB之間的一個實數(shù),。假設(shè)實值表示為一個16位定點(diǎn)數(shù), 則數(shù)值-1可以以二進(jìn)制表示為1000000000000000(或者十六進(jìn)制的 0x8000),。在二進(jìn)制補(bǔ)碼運(yù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 顯示了這種定點(diǎn)表示法,。
圖6:實數(shù)的定點(diǎn)表示法
這種表示法中,共有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ù)的過程。飽和是一種非線性運(yùn)算,,并導(dǎo)致出現(xiàn)嚴(yán)重的輸出諧波失真,。我們使用余量位來防止飽和。
信號位
信號和噪聲位影響系統(tǒng)性能,。數(shù)字音頻處理器增加量化噪聲,,整體性能是模擬電路噪聲和量化噪聲的結(jié)果。假設(shè)兩個噪聲源都為獨(dú)立隨機(jī)過程的結(jié)果,,則總系統(tǒng)噪聲性能可定義為:
其中S為均勻分布的隨機(jī)信號,,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è)為均勻分布的隨機(jī)信號,未加權(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,,但在中間處理點(diǎn)信號還是會溢出。為了防止溢出,,我們需要余量位—即除信號和噪聲位以外的位,。
共有兩個溢出源:
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顯示了音頻處理器中信號的圖示,。需要注意的重要一點(diǎn)是,余量位主要用于適應(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 信號增強(qiáng)了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)行補(bǔ)償。應(yīng)特別注意的是,,要確保升壓區(qū)域的信號不會使輸出放大器飽和,,因為它會導(dǎo)致出現(xiàn)失真信號。在處理器的最終輸出級同樣也有升壓,,目的是對信號調(diào)節(jié)進(jìn)行補(bǔ)償,。這是一些多節(jié)、0dB濾波器所要求的,,其信號調(diào)節(jié)的目的是防止一個或多個單節(jié)出現(xiàn)溢出,。就那些獲得0dB以上頻率的濾波器(現(xiàn)成的EQ濾波器)來說,中性信號電平被調(diào)節(jié)至0dB以下,。這種情況下,,并不要求末級升壓。結(jié)果是損失了平坦區(qū)域的SNR,。
一種更講究的解決方案是根據(jù)數(shù)字處理器應(yīng)用的音量增益來限制濾波器增益的大小,,其非常適合于耳機(jī)應(yīng)用。在高音量時,,降低頻率升壓并最終在全音量時為平坦,。
在一些情況下,頻率升壓保持恒定,而在高音量時對信號進(jìn)行壓縮,。這便是抗削波動態(tài)范圍壓縮器 (DRC) 功能:低音量時,,保持原始SNR;但隨著音量的增加,,調(diào)節(jié)度也成比例增加來防止出現(xiàn)失真,。
不管使用哪種方法,充分考慮人們對聲音和噪聲的感知過程都是很重要的,。人的聽覺有一個明顯的動態(tài)范圍,。耳機(jī)放大器在噪聲層和輸出功率之間進(jìn)行平衡,以最好地適應(yīng)這一范圍,。例如,,TLV320AIC3254音頻編解碼器能夠向典型32-Ω或者16-Ω耳機(jī)負(fù)載提供非常高的純 500 mVRMS 聲壓級 (SPL),同時具有滿量程以下100dB的噪聲底限(加權(quán)值),,其在人的聽覺閾值以下(請參見圖 10),。有時,甚至沒有必要在實施調(diào)節(jié)以后增加額外的放大率,,因為輸出功率遠(yuǎn)高于舒適聽覺水平,。
圖10:相對人類聽覺的耳機(jī)音量
作者:Jorge Arbona TI應(yīng)用工程師
Supriyo Palit TI軟件系統(tǒng)工程師