將語(yǔ)音和聲音生成添加到產(chǎn)品中可以大大提高產(chǎn)品的可用性和適銷性,并且不需要添加單獨(dú)的數(shù)字信號(hào)處理器 (DSP) 或?qū)iT的音頻處理器來(lái)實(shí)現(xiàn)。微控制器 (MCU) 供應(yīng)商已經(jīng)實(shí)現(xiàn)了 DSP 擴(kuò)展,為曾經(jīng)被認(rèn)為過(guò)于復(fù)雜而無(wú)法在專用 DSP 平臺(tái)上實(shí)現(xiàn)的算法帶來(lái)實(shí)時(shí)解碼。
此外,音頻處理提供了大量的折衷方案,設(shè)計(jì)人員可以利用這些折衷方案在相對(duì)低速的 8 位 MCU 上播放復(fù)雜的音頻。例如,可以在相對(duì)簡(jiǎn)單的 MCU(如Microchip Technology )上實(shí)現(xiàn)標(biāo)準(zhǔn)自適應(yīng)差分脈沖編碼調(diào)制 (ADPCM) 算法的簡(jiǎn)單版本 PIC16無(wú)需任何 DSP 擴(kuò)展。
旨在減少存儲(chǔ)大小的音頻編碼技術(shù)分為兩類。第一種方法稱為波形編碼,它使用波形本身的已知屬性。波形編碼的優(yōu)點(diǎn)是它試圖在不知道信號(hào)是如何創(chuàng)建的情況下對(duì)信號(hào)進(jìn)行編碼。這允許編解碼器應(yīng)用于不同形式的音頻,即使該算法可能是為語(yǔ)音而設(shè)計(jì)的。
面向語(yǔ)音的波形編解碼器通常利用以下觀察結(jié)果:語(yǔ)音信號(hào)取小值而不是大值的概率更高。因此,語(yǔ)音處理器可以通過(guò)量化具有更精細(xì)步長(zhǎng)的較小樣本和具有粗步長(zhǎng)的大樣本來(lái)降低比特率。通過(guò)使用語(yǔ)音的一個(gè)固有特性可以進(jìn)一步降低比特率:連續(xù)語(yǔ)音樣本之間的高相關(guān)性。
可以對(duì)連續(xù)樣本之間的差異進(jìn)行編碼,而不是對(duì)語(yǔ)音信號(hào)本身進(jìn)行編碼。這種方法是一種相對(duì)簡(jiǎn)單的方法,它在每個(gè)樣本上重復(fù),從一個(gè)樣本到下一個(gè)樣本的開(kāi)銷很小。ADPCM 是使用這種技術(shù)的波形算法的一個(gè)例子。
另一種壓縮或編碼形式是使用創(chuàng)建音頻信號(hào)方式的模型。這可以顯著提高壓縮率,而不會(huì)對(duì)重構(gòu)后的音頻質(zhì)量產(chǎn)生負(fù)面影響。例如,通常用于蜂窩電話網(wǎng)絡(luò)的語(yǔ)音編解碼器使用聲道的簡(jiǎn)化模型。
語(yǔ)音通常在較短的時(shí)間間隔內(nèi)保持相對(duì)恒定,并且可以使用一組參數(shù)來(lái)定義如何重建短時(shí)間的語(yǔ)音:通常是音調(diào)和幅度。然后可以將這些參數(shù)而不是編碼樣本存儲(chǔ)或傳輸?shù)?a target="_blank">接收器。該技術(shù)需要對(duì)輸入語(yǔ)音信號(hào)進(jìn)行大量處理,并需要內(nèi)存來(lái)存儲(chǔ)和分析語(yǔ)音區(qū)間。這種類型的處理器(稱為聲碼器或混合編碼器)的示例是執(zhí)行線性預(yù)測(cè)編碼 (LPC) 或碼激勵(lì)線性預(yù)測(cè)編碼 (CELP) 的處理器。
GSM 電話標(biāo)準(zhǔn)使用 CELP 將實(shí)時(shí)語(yǔ)音壓縮為需要小于 10 kb/s 的帶寬的流。對(duì)于非電話用途,Speex 編解碼器提供了 CELP 算法的有效實(shí)現(xiàn),并可作為開(kāi)源代碼使用。許多 MCU 庫(kù)(例如 Microchip Technology 為 PIC32MX 系列開(kāi)發(fā)的庫(kù))都實(shí)現(xiàn)了 Speex 編解碼器。
MPEG2 第 3 層 (MP3) 音頻編解碼器使用人類聽(tīng)覺(jué)模型而不是聲音系統(tǒng)來(lái)確定如何最好地壓縮音頻流。當(dāng)今許多領(lǐng)先的音頻編解碼器都是有損的感知編解碼器,其工作原理是大腦無(wú)法聽(tīng)到某些被其他更響亮的信號(hào)“掩蓋”的音頻信號(hào)。因此,它們不值得編碼,從而更容易以較低比特率的數(shù)據(jù)流渲染音頻。

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
























評(píng)論