問題理解
使用數(shù)字濾波器時需要考慮的一個重要問題是信號電平對其數(shù)字到模擬域轉(zhuǎn)換產(chǎn)生的影響。假設(shè)系統(tǒng)為處理單元提供數(shù)字信號,,并在沒有進行任何處理的情況下,,使用一種理想的 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,由于在輸出端對其進行削波處理,,因此對超出這些限制的信號進行放大處理會使信號失真(假設(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同樣描述了這種概念,。請注意,,當傳遞到處理器內(nèi)存的更大總線寬時,源數(shù)據(jù)的噪聲得到了繼承,。如前所述,,數(shù)據(jù)下調(diào)量為最大總信號增強量,以適應(yīng)增強區(qū)域,。但是,,如圖5 所示,即使增強參考點位于某個較好的位置,,DAC信號也會受到輸出SNR的影響,。如果信號增強量并未極大地損害總系統(tǒng)SNR,,則簡單的調(diào)節(jié)或許是一種可行的解決方案。一些低功耗編解碼器擁有100dB的SNR,,其允許在不犧牲原始16位源SNR的情況下,,進行一定量的調(diào)節(jié)。
圖4:全數(shù)字信號鏈的信號組成
圖5:使用調(diào)節(jié)時的信號組成
問題理解
使用數(shù)字濾波器時需要考慮的一個重要問題是信號電平對其數(shù)字到模擬域轉(zhuǎn)換產(chǎn)生的影響,。假設(shè)系統(tǒng)為處理單元提供數(shù)字信號,,并在沒有進行任何處理的情況下,使用一種理想的 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,,由于在輸出端對其進行削波處理,,因此對超出這些限制的信號進行放大處理會使信號失真(假設(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同樣描述了這種概念,。請注意,當傳遞到處理器內(nèi)存的更大總線寬時,源數(shù)據(jù)的噪聲得到了繼承,。如前所述,,數(shù)據(jù)下調(diào)量為最大總信號增強量,以適應(yīng)增強區(qū)域,。但是,,如圖5 所示,即使增強參考點位于某個較好的位置,,DAC信號也會受到輸出SNR的影響,。如果信號增強量并未極大地損害總系統(tǒng)SNR,則簡單的調(diào)節(jié)或許是一種可行的解決方案,。一些低功耗編解碼器擁有100dB的SNR,其允許在不犧牲原始16位源SNR的情況下,,進行一定量的調(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ù)點(十進制小數(shù)點)后固定數(shù)位的二進制補碼整數(shù),。這些數(shù)字組成數(shù)值的小數(shù)部分,。小數(shù)點前面的數(shù)字為整數(shù)部分,并表示數(shù)值的范圍,。整數(shù)部分還包含數(shù)值的符號,。
進入音頻處理器的數(shù)字數(shù)據(jù)被認為是位于-1和1-1LSB之間的一個實數(shù)。假設(shè)實值表示為一個16位定點數(shù),, 則數(shù)值-1可以以二進制表示為1000000000000000(或者十六進制的 0x8000),。在二進制補碼運算中,0x8000對應(yīng)一個等于–32768的整數(shù)值。這就意味著,,該整數(shù)值除以32768可以得到實值的量化近似值,。二進制的16位最大正數(shù)為0111111111111111(或者十六進制的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ù)而負溢出轉(zhuǎn)換為最小負數(shù)的過程,。飽和是一種非線性運算,并導(dǎo)致出現(xià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ù)字濾波器的噪聲影響低于目標SNR,。這些額外位被稱作噪聲位,。相比有限脈沖響應(yīng)(FIR)濾波器,噪聲對IIR濾波器的影響更加明顯,。噪聲位數(shù)還取決于數(shù)字濾波器的采樣頻率和截止頻率,。隨著采樣頻率上升,要求的噪聲位數(shù)也增加,。隨著截止頻率下降,,要求噪聲位數(shù)也隨之增加。48-kHz工作時,,14到16噪聲位便足以維持40-Hz濾波器的目標SNR,。
圖7:雙二階濾波器實施
余量位
除了信號和噪聲位,還需要更多的位來防止溢出,。這些位被稱作余量位,。端到端音頻處理鏈一般會保持信號電平。這就意味著,,如果0-dB信號為信號鏈的輸入,,則輸出為0dB或者更低。(一般會有一個能將信號擺動限制到零以下幾分貝的信號壓縮器,。)如果我們使用升壓濾波器來放大某些的信號頻帶,,則其它頻帶一般會被衰減,以阻止信號升至0dB以上,。就后一種情況而言,,當輸入信號電平為0dB時(也稱作中性信號電平),輸出信號會低于0dB,,且僅放大后的頻帶會在輸出端達到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)增益上限的閉型表達式是一個復(fù)雜的過程,。實際上,,信號處理器提供額外余量(DAC 限制以上)的原因之一是允許瞬態(tài)值余量。我們可能會需要進行一些測量,,來計算額外余量,。某些情況下,可能需要對SNR做一些讓步,,以處理飽和帶來的失真問題,,同時還可能會需要增加模擬增益來讓信號歸于0dB。
使用調(diào)節(jié)方法,,有時需要在模擬輸出級中添加額外增益(升壓)來進行補償,。應(yīng)特別注意的是,要確保升壓區(qū)域的信號不會使輸出放大器飽和,,因為它會導(dǎo)致出現(xiàn)失真信號,。在處理器的最終輸出級同樣也有升壓,目的是對信號調(diào)節(jié)進行補償,。這是一些多節(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)用,。在高音量時,,降低頻率升壓并最終在全音量時為平坦。
在一些情況下,,頻率升壓保持恒定,,而在高音量時對信號進行壓縮。這便是抗削波動態(tài)范圍壓縮器 (DRC) 功能:低音量時,,保持原始SNR,;但隨著音量的增加,調(diào)節(jié)度也成比例增加來防止出現(xiàn)失真,。
不管使用哪種方法,,充分考慮人們對聲音和噪聲的感知過程都是很重要的。人的聽覺有一個明顯的動態(tài)范圍,。耳機放大器在噪聲層和輸出功率之間進行平衡,,以最好地適應(yīng)這一范圍。例如,,TLV320AIC3254音頻編解碼器能夠向典型32-Ω或者16-Ω耳機負載提供非常高的純 500 mVRMS 聲壓級 (SPL),,同時具有滿量程以下100dB的噪聲底限(加權(quán)值),其在人的聽覺閾值以下(請參見圖 10),。有時,,甚至沒有必要在實施調(diào)節(jié)以后增加額外的放大率,因為輸出功率遠高于舒適聽覺水平,。
圖10:相對人類聽覺的耳機音量
作者:Jorge Arbona TI應(yīng)用工程師
Supriyo Palit TI軟件系統(tǒng)工程師