將語音和聲音生成添加到產品中可以大大提高產品的可用性和適銷性,并且不需要添加單獨的數字信號處理器 (DSP) 或專門的音頻處理器來實現。微控制器 (MCU) 供應商已經實現了 DSP 擴展,為曾經被認為過于復雜而無法在專用 DSP 平臺上實現的算法帶來實時解碼。
此外,音頻處理提供了大量的折衷方案,設計人員可以利用這些折衷方案在相對低速的 8 位 MCU 上播放復雜的音頻。例如,可以在相對簡單的 MCU(如Microchip Technology )上實現標準自適應差分脈沖編碼調制 (ADPCM) 算法的簡單版本 PIC16無需任何 DSP 擴展。
旨在減少存儲大小的音頻編碼技術分為兩類。第一種方法稱為波形編碼,它使用波形本身的已知屬性。波形編碼的優點是它試圖在不知道信號是如何創建的情況下對信號進行編碼。這允許編解碼器應用于不同形式的音頻,即使該算法可能是為語音而設計的。
面向語音的波形編解碼器通常利用以下觀察結果:語音信號取小值而不是大值的概率更高。因此,語音處理器可以通過量化具有更精細步長的較小樣本和具有粗步長的大樣本來降低比特率。通過使用語音的一個固有特性可以進一步降低比特率:連續語音樣本之間的高相關性。
可以對連續樣本之間的差異進行編碼,而不是對語音信號本身進行編碼。這種方法是一種相對簡單的方法,它在每個樣本上重復,從一個樣本到下一個樣本的開銷很小。ADPCM 是使用這種技術的波形算法的一個例子。
另一種壓縮或編碼形式是使用創建音頻信號方式的模型。這可以顯著提高壓縮率,而不會對重構后的音頻質量產生負面影響。例如,通常用于蜂窩電話網絡的語音編解碼器使用聲道的簡化模型。
語音通常在較短的時間間隔內保持相對恒定,并且可以使用一組參數來定義如何重建短時間的語音:通常是音調和幅度。然后可以將這些參數而不是編碼樣本存儲或傳輸到接收器。該技術需要對輸入語音信號進行大量處理,并需要內存來存儲和分析語音區間。這種類型的處理器(稱為聲碼器或混合編碼器)的示例是執行線性預測編碼 (LPC) 或碼激勵線性預測編碼 (CELP) 的處理器。
GSM 電話標準使用 CELP 將實時語音壓縮為需要小于 10 kb/s 的帶寬的流。對于非電話用途,Speex 編解碼器提供了 CELP 算法的有效實現,并可作為開源代碼使用。許多 MCU 庫(例如 Microchip Technology 為 PIC32MX 系列開發的庫)都實現了 Speex 編解碼器。
MPEG2 第 3 層 (MP3) 音頻編解碼器使用人類聽覺模型而不是聲音系統來確定如何最好地壓縮音頻流。當今許多領先的音頻編解碼器都是有損的感知編解碼器,其工作原理是大腦無法聽到某些被其他更響亮的信號“掩蓋”的音頻信號。因此,它們不值得編碼,從而更容易以較低比特率的數據流渲染音頻。
圖 1:感知編解碼器的框圖。(來源:弗勞恩霍夫)
其他高質量音頻編解碼器使用波形形成的方法,這些是典型的無損算法,例如免費無損音頻編解碼器 (FLAC),其開發是為了解決為通用數據流開發的算法對音頻數據的問題。大多數傳統的面向文本的數據壓縮技術,例如 ZIP 和 GZip,都依賴于這樣一種理解,即文本信息中存在高度冗余,但流中的數據值之間幾乎沒有相關性。壓縮器構建常用數據字符的字典,然后使用更短的位序列進行識別。例如,一個空格字符可能占用三位;一個 ‘x’ 五個或六個,很少使用超過八位的符號。這是霍夫曼編碼的核心。然而,
例如,對文本文件壓縮器中使用的 Huffman 編碼的改進是 LZW 算法,它超越了單個符號到短序列——例如,“anti”在文本中比“atni”更常見。類似地,一些機器代碼指令和地址范圍在軟件中比其他的更常見。那些經常重復的序列在壓縮器構建的字典中被賦予最短的符號。非常罕見的序列的編碼版本可能會比源中的對應版本更長。
在音頻中,單個樣本通常相互之間具有很強的相關性,但序列并不完全重復。正如我們在 ADPCM 中看到的那樣,連續樣本的值通常相似,但至關重要的是,它們并不相同。這破壞了為文本或機器代碼設計的壓縮系統有效編碼樣本流的能力。FLAC 算法通過使用類似于 ADPCM 所采用的線性預測作為編碼樣本數據的第一階段來解決這個問題。這留下了一系列不相關的值——稱為殘差或誤差信號——可以進行熵編碼。FLAC 使用 Golomb-Rice 方法而不是 Huffman 編碼——這一系列代碼適用于小值比大值更可能出現的情況。
通常,Golomb 代碼使用可調參數 M 將值分為兩部分。第一個是除以M;第二個是余數。第一部分存儲為一元代碼——其中數字 n 由 n-1 個“0”數字表示,后跟終止“1”,反之亦然。這允許更密集地打包較小的值。這種編碼方案的 Rice 變體使 M 成為 2 的倍數,以提高微處理器的效率——例如,除法可以實現為簡單的移位操作。余數使用截斷二進制編碼進行編碼,這是另一種針對小殘差優化的方案。
對于嵌入式系統,MP3 4當需要高質量音頻但存儲空間非常寶貴時,這將是最常見的方案。該系統的核心是感知模型,它基于對大腦處理音頻信息方式的多年研究。一般來說,一個頻率的響亮聲音會掩蓋附近頻率的安靜聲音。它們不一定被完全屏蔽,但這意味著可以以較低的分辨率對具有安靜信號的頻帶進行編碼,并將更多的比特分配給具有較大信號的頻帶。
因此,第一階段是使用濾波器組將傳入的時域信號分成一組窄頻率范圍。然后對其進行分析以確定每個頻段的掩蔽閾值,并以此確定該頻段的允許噪聲水平。允許的噪聲級別將決定可以將多少位應用于該頻帶 - 位越少,重建音頻時將產生的量化噪聲量越大。
音頻本身使用改進的離散余弦變換 (MDCT) 進行處理,以將時域信號轉換為頻域信息。使用來自感知模型的信息,算法可以繼續進行量化。所選擇的技術是冪律量化器,它以較低的分辨率對較大的值進行編碼。這執行了一定程度的噪聲整形,提高了較小信號的準確性。
然后使用霍夫曼編碼對量化級別進行編碼——這部分算法是無損的,與使用霍夫曼編碼的其他數據壓縮一樣。即使在冪律量化和霍夫曼編碼之后,輸出數據流的速率也可能高于為編碼器設置的速率。需要提高量化級別來生成適合 MP3 的 128 kbit/s、96 kbit/s 或其他典型設置的流。
為了提供所需的輸出速率,量化器通常使用兩個嵌套的迭代循環來實現。內部循環是速率循環,修改整體編碼器速率,直到輸出流處于足夠低的比特率。這是通過應用更大的量化步長來實現的。外環使用感知模型提供的掩蔽閾值對量化噪聲進行整形。此外部循環要求的每項更改都需要進一步通過內部循環,以確保輸出比特率低于其閾值。外循環繼續進行,直到每個頻帶的噪聲低于掩蔽閾值。由于迭代次數較多,編碼過程很難保證實時運行。
MP3 采用了其他更復雜的方案,例如為 Ogg 格式開發的 Vorbis 開源編解碼器5,以及用于 MP3 標準后續版本的 AAC 編解碼器。然而,它們使用相同的廣泛方案,只是簡單地提高了光譜分辨率等因素。例如,AAC 使用的 MDCT 算法使用 1024 條頻率線,而不是 MP3 的 576 條。
由于不需要運行感知模型和兩個限速循環,因此從這些有損格式進行解碼的計算強度遠低于編碼——允許在各種嵌入式處理器上實現。此外,MP3 標準的設計者努力減少其包含的規范元素的數量。只有數據表示和解碼器被視為規范,即使那樣,解碼器也不是以精確位的方式指定的,而是以公式的形式指定的,該公式具有可用于檢查實現與使用雙精度算術執行的實現的測試。這使得使用定點或浮點算術實現解碼器成為可能。已經編寫了完全兼容的解碼器,它們使用短至 20 位的定點字。
MP3 解碼器完全在大量 32 位 MCU 的能力范圍內,例如采用 ARM7 或 Cortex-M3 處理器內核的那些。此外,對于 ARM 等流行架構,提供了可簡化 MP3 實現的參考代碼以及 Vorbis 和 FLAC 6轉碼器的完整源代碼。
在過去的 20 年中,研究人員開發了高效的方法來執行計算密集度最高的步驟 - DCT - 如果沒有快速 32 位乘法指令,則使用轉換來減少所需的加法總數。例如,Helix 實現在 ARM7 內核上運行時,可以支持 44.1 kHz 的采樣率,以在 26 MHz 的時鐘速率下以 128 kbit/s 的輸入流實現立體聲輸出。
如果有更高性能的 DSP 指令可用,則可以優化音頻處理,為系統功能留出更多空間。例如,意法半導體 STM32系列 MCU 中使用的 Cortex-M3 內核具有 32 位乘法和累加指令,非常適合處理音頻數據。它還執行分支推測以提高需要分支的循環中的性能。例如,用于生成余弦值的許多查找表算法使用少量分支。STM32F10x
_附帶一個 DSP 庫,除了轉碼外,它還實現了音頻處理中使用的許多功能。例如,該庫包括用于執行有限和無限脈沖響應濾波的例程,這些濾波通常用于操縱音頻流并去除或增強某些頻帶。FFT 函數可用于實時音頻分析。
其他架構也非常適合音頻壓縮和解壓縮算法。飛思卡爾 ColdFire 系列MCU 為音頻處理提供了成本優化的解決方案。MCF5249等設備實現增強型乘法累加單元,該單元非常適合運行音頻濾波器和相關算法,并包括用于與 ADC 和 DAC 通信的 I2S 端口。MCF5249 針對記錄和播放系統進行了優化,因為它包括與閃存和基于 IDE 的硬盤驅動器的直接接口。
Atmel AT32UC3A3支持高達 50 kHz 的音頻采樣率,并在其已經高效的指令流水線中添加了一組 DSP 指令。它可以通過 I2S 總線與音頻 ADC 通信,甚至包括自己的比特流 DAC,使其成為音頻播放設備的理想平臺。
DSP 擴展包括飽和算術,而不是像傳統 MCU 算術那樣使大值溢出寄存器并強制其回繞,而是簡單地允許值達到最大值。這提供了一個與音頻過濾器更兼容的結果,并且避免了過濾循環中需要分支來檢查溢出,從而大大提高了性能。DSP 擴展還添加了多種乘法指令。
Microchip PIC32MX基于 MIPS RISC 架構,提供處理 FLAC、MP3 和其他音頻編解碼器所需的核心性能水平。該公司還為多種算法提供音頻庫,包括 ADPCM 轉碼和 Speex。
ADI公司的ADSP-BF527在信號處理功能方面更進了一步,提供了廣泛的 DSP 指令,實現了完整的 MCU 功能,以幫助實現高級音頻應用,例如可能需要一系列高級語音和音頻編解碼器的 IP 語音電話以及用于多聲道音頻輸入和輸出。多達 12 個直接內存訪問 (DMA) 可從處理器內核卸載數據傳輸開銷,從而為 DSP 和控制操作提供更多空間。
音頻現在是許多嵌入式系統的關鍵部分,而不僅僅是音樂播放器和語音記錄器。可用的編解碼器和編碼技術使優化特定應用程序的存儲和播放成為可能。Digi-Key 等分銷商提供的各種具有音頻功能的 MCU 為設計人員提供了選擇最適合目標系統的設備的機會。
概括
本文概述了當今使用的關鍵音頻壓縮和編碼標準,并描述了許多適合運行它們的 MCU 架構和實現。
評論
查看更多