24小時聯系電話:18217114652、13661815404
中文
技術專題
嵌入式應用的音頻設計簡介
嵌入式應用的音頻設計簡介
嵌入式應用程序通常需要再現聲音。無論您需要簡單的提示、鈴聲、鈴聲還是音樂剪輯,能夠重現預先錄制的音頻都可以極大地增強許多嵌入式應用程序的 UI(用戶界面)。
請注意,本文的目的不是討論什么聽起來可以接受,因為音頻“質量”是個人和主觀的。
音頻數字化基礎
除非聲音是完全合成的,否則原始音頻源是模擬信號。請記住,現實世界是模擬的。
然而,由于嵌入式系統本質上是數字信號,因此必須將模擬信號轉換為數字信號才能進行存儲。最后,這種以數字方式存儲和處理的信號必須以模擬形式播放。
數字化音頻信號意味著將連續時間信號轉換為離散樣本序列。最直接影響嵌入式系統中數字音頻存儲和處理的兩個因素是采樣率和位深度,或用于表示單個樣本的位數。
對于這兩個數量,它們越低對系統資源的使用越好。反過來,這些取決于輸入信號的特性。
采樣率受 Nyquist-Shannon 采樣定理的約束。它指出重現帶限信號所需的最小采樣率(奈奎斯特率)是信號帶寬的兩倍。所以,要想降低信號的采樣率,只需降低信號的帶寬即可。
這一要求并不像乍一看那樣嚴格。盡管音頻信號通常定義為具有 20 Hz 至 20 KHz 的帶寬,但大多數人無法聽到 20 KHz 的音調。
當然,如果音頻輸出換能器、揚聲器系統不能再現如此高的音頻頻率,那么使用能夠適應這個頻率的采樣率就沒有什么意義了。
作為參考,普通電話的音頻帶寬為 400 至 3400 Hz。雖然聲音的保真度并不高,但用戶仍然可以識別正在說的話,甚至可以識別來電者的聲音。甚至可以通過電話播放質量相當低但仍可識別的音樂。
在數字化音頻信號時要考慮的第二個因素是位深度。這實質上是用于表示每個樣本的位數,可能的離散級別的總數為 2 n,其中 n 是位數。
模數轉換器 (ADC) 通常用于此目的。順便說一句,請注意,在這種情況下,n 可能不完全是 ADC 規范中規定的位數。
真正的 ADC 具有線性化和量化誤差。運算放大器等輸入信號調節器可能會引入更多錯誤。
位深度的更好估計是所選 ADC 的有效位數 (ENOB)。該數字將小于或最多等于 ADC 的位寬。
由于通常很難準確計算 ENOB,一個好的經驗法則是簡單地假設 ENOB 比公布的 ADC 規格少 2 位。
使用這一點,假設 12 位 ADC 實際上是一個真正的 10 位 ADC。當然,位深越大,數字化錯誤越少。位深度不足會導致在信號再現中產生稱為量化噪聲的效應。此鏈接顯示量化錯誤聽起來像什么。
在嵌入式系統中,內存以字節為單位,因此位深通常是 8 的倍數,例如 8 位或 16 位。因此,即使 ADC 只能進行 12 位數字化,每個樣本也將存儲在下一個更高的 8 位存儲器中,在本例中為 16 位。
將四個 12 位樣本存儲為 6 個字節而不是 8 個字節需要太多的處理,就像每個 12 位樣本存儲為 16 位的情況一樣。
預處理和存儲音頻信號
在小型嵌入式系統中,音頻大多以線性脈沖編碼調制(通常稱為 PCM)或 WAVeform Audio (WAV) 格式存儲。這兩種格式密切相關,是目前所有用于數字處理和存儲的可用音頻編碼技術中最簡單的一種。
PCM 是上一節中描述的技術。音頻信號以固定間隔進行采樣,每個樣本的寬度為 n 位,其中 n 是位深。
例如,要存儲以 44.1 KHz 和 16 位位深度的 Red Book CD 質量采樣的一秒音樂,每個通道需要 705600 字節的數據;立體聲的兩倍。WAV 格式只是帶有附加信息(如播放列表、提示點等)的 PCM 信息。因此,它比原始 PCM 數據稍大。
如果由于硬件限制而無法接受此存儲要求,則有多種方法可以減小存儲數據的大小。一種是將音頻以壓縮格式存儲,例如 MP3。還可以使用多種其他格式,具有無損或有損壓縮。
如前所述,這些通常不用于小型嵌入式系統,因為壓縮算法可能非常復雜。在這種情況下,可以使用外部 MP3 硬件解碼器。
但是,如果系統有足夠的處理能力和內存,例如Raspberry Pi 4,則在固件中運行MP3解碼是非??尚械?。
如果源以模擬格式提供,則可以采用模擬壓縮技術來降低信號的動態范圍,并采用模擬濾波器來降低帶寬。
通過減少信號的動態范圍,可以為每個樣本使用較低的位深度,而不會引入過多的量化噪聲。
另一方面,限制帶寬允許降低采樣率。這兩者都有助于減少給定聲音剪輯的存儲要求。如果聲音再現端本來就不能再現原始信號,這將是非常有效的。
例如,如果揚聲器不能產生高于 10 KHz 的信號,那么將輸入信號頻率分量保持在該頻率以上就沒有什么意義了。
現在,如果信號已經是數字形式,那么可以使用此處提供的 Audacity 等軟件包來壓縮和重新采樣該信號。
即使信號最初以模擬格式提供,這也有效。在這種情況下,信號可以先在桌面聲卡上數字化,然后進行處理以降低帶寬和采樣率。
輸出音頻
根據硬件的不同,存儲的音頻可以作為模擬信號輸出,也可以以數字形式輸出,以進一步處理成實際聲音。
在第一種情況下,PCM 音頻可以通過數模轉換器或 DAC 進行處理。如果存儲格式已經在 PCM 中,則在將其發送到 DAC 之前不需要進一步處理。
否則,在 MP3 音頻等情況下,必須先將其轉換為 PCM。輸出是信號的模擬表示。要獲得原始模擬信號,需要對 DAC 輸出進行低通濾波以去除采樣時鐘。
這通常通過無源或有源模擬濾波器來實現。使用 DAC 的問題之一是,如果信號是立體聲,則需要兩個 DAC,每個都有自己的低通濾波器。
一些微控制器有 一個 I 2 S 接口而不是內置 DAC。I 2 S 或 Inter-IC Sound 專門設計用于傳輸音頻信號,并且通信是單向的,與聽起來有些相似的 I 2 C 通信協議相反。
它使用三線鏈路傳輸立體聲信號。左右通道實際上是按順序發送的,具體取決于字選擇線的狀態,如下圖 1 所示。 I 2 S 通信協議的有趣特性之一包括 SCK 時鐘頻率不是特定的定義。
每個通道傳輸的比特數也沒有具體定義。這允許在傳輸任何采樣率和位深度的 PCM 音頻時具有相當大的靈活性。順便說一下,由于這種靈活性,I 2 S 還被用于傳輸除聲音之外的其他類型的數據。
圖1 - I 2 S 信令方案
音頻播放
因為聲音本質上是模擬的,所以再現聲音的換能器,本質上是揚聲器,也是一個必須用模擬信號驅動的模擬組件。
無論模擬信號是來自 DAC 還是解碼的 I 2 S 數字流,它都太弱而無法產生任何顯著幅度的聲音。因此,需要放大器來驅動換能器。
音頻放大器分為兩大類:模擬或數字。模擬放大器進一步分為 A 類或 AB 類類型,而數字音頻放大器通常稱為 D 類放大器。
如果放大器設計良好,A 類的主要優點是低失真。在不涉及太多細節的情況下,A 類放大器依賴于晶體管始終偏置在其線性工作點的輸出級。
對于晶體管來說,這是具有最線性放大特性的狀態。不幸的是,這也是晶體管持續耗散功率的狀態,無論信號是否存在。A 類放大器通常使用分立晶體管實現,通常不用于嵌入式應用。
AB 類放大器依賴于采用兩個晶體管或兩組并聯晶體管、雙極晶體管或 MOSFET 的輸出級。一個晶體管在輸入的正極部分導通,而另一個在輸入的負極部分導通。
在無輸入信號期間,晶體管的導通很小,因此浪費的功率很小。嵌入式系統中使用的 AB 類放大器通常采用芯片形式,很少使用所有分立元件來實現。
在嵌入式應用中最廣泛使用的音頻功率放大器類型是 D 類類型。首先,輸入信號被轉換為脈寬調制或 PWM 信號。在此方案中,輸入信號以規則但非常短的間隔進行采樣。
在每個這樣的間隔期間,輸出完全打開或完全關閉,打開與關閉的比率與特定采樣間隔開始時的采樣輸入信號的幅度成正比。結果輸出是代表輸入模擬信號的可變寬度的開/關信號流。
當它被饋送到晶體管(通常是 MOSFET)時,其輸出將在 PWM 信號的開/關轉換之后處于截止或飽和模式。由于處于飽和或截止狀態的晶體管耗散的功率非常小,這使得 D 類放大器非常高效。
換句話說,對于給定的功率輸出,該放大器的尺寸將比之前描述的類型小得多。這就是 D 類音頻功率放大器廣泛用于嵌入式系統的原因。
請注意,D 類放大器的輸出端需要一個模擬低通濾波器以去除采樣頻率分量。由于這個頻率通常很高,濾波器的尺寸可以做得很小。
也有同時具有I 2 S接口和D類功率放大器的單芯片。這款 TI 芯片就是一個例子。還有一些便宜的、現成的模塊,例如這個。
對于揚聲器本身,最常見的選擇是電動揚聲器。
圖 2 – Boss Audio DD3600 D 類單聲道放大器內部
輸出音頻信號在線圈中產生磁場,磁場反過來與永磁體相互作用,使線圈移動。線圈實際上連接在一個隔膜上,該隔膜取代了它周圍的空氣,從而產生了聲音。它們以不同的尺寸和功率處理能力存在。
此外,由于設計單個揚聲器來處理整個音頻范圍并不容易,因此高保真系統通常有兩種不同的揚聲器類型來分別處理整個音頻頻譜的低端和高端。這些揚聲器分別稱為低音揚聲器和高音揚聲器。