音頻編解碼器是現(xiàn)代數(shù)字電話的基石。它是將可聽語音轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)并再次轉(zhuǎn)換回可聽語音的組件。本文使用MAXQ3120的A/D通道和外部DAC對標(biāo)準(zhǔn)μ律和A律格式的語音進(jìn)行編碼和解碼。這留下了大量的處理能力可用于執(zhí)行其他與電信相關(guān)的功能,例如呼叫進(jìn)度檢測和生成、PCM 成幀和靜默信道檢測。
介紹
現(xiàn)代電話是數(shù)字化的。帶有數(shù)百個(gè)電觸點(diǎn)的喋喋不休的Strowger開關(guān),數(shù)英里的雙絞線電纜,就像扎染意大利面條,以及曾經(jīng)點(diǎn)綴在鄉(xiāng)村的微波塔,已經(jīng)一去不復(fù)返了。如今,語音流量會(huì)盡早轉(zhuǎn)換為數(shù)字形式,并與數(shù)千個(gè)其他語音呼叫、電子郵件和網(wǎng)頁一起在光纖上進(jìn)行傳輸。
數(shù)字電話推動(dòng)了信息時(shí)代,并繼續(xù)通過互聯(lián)網(wǎng)協(xié)議語音(VoIP)等技術(shù)改變通信格局。然而,一個(gè)事實(shí)仍然存在——在這條線的某個(gè)地方,語音必須轉(zhuǎn)換為比特,然后比特又轉(zhuǎn)換為語音。
這是編解碼器的工作。這個(gè)詞是編碼器/解碼器的縮寫,設(shè)備在概念上很簡單。它由一個(gè)模數(shù)轉(zhuǎn)換器 (ADC) 組成,用于將輸入音頻轉(zhuǎn)換為比特流,一個(gè)數(shù)模轉(zhuǎn)換器 (DAC) 將接收到的比特流轉(zhuǎn)換為音頻,以及一個(gè)接口,用于在可能附加其他編解碼器的總線之間插入和移除數(shù)字化音頻。
通常,編解碼器是獨(dú)立的混合信號(hào)半導(dǎo)體。只要編解碼器用于簡單的應(yīng)用程序(例如終端交換機(jī)的線卡)就可以了。然而,通常需要對傳輸?shù)囊纛l執(zhí)行某種預(yù)處理(例如峰值限制、動(dòng)態(tài)范圍壓縮或頻譜整形)或?qū)邮盏囊纛l進(jìn)行后處理(例如降噪)。對于獨(dú)立編解碼器來說,這是一個(gè)問題,因?yàn)橐坏?a href="http://m.1cnz.cn/analog/" target="_blank">模擬音頻呈現(xiàn)給(或取自)編解碼器,就沒有進(jìn)一步的機(jī)會(huì)執(zhí)行處理 - 編解碼器直接與 PCM 高速公路接口。在這些情況下,系統(tǒng)設(shè)計(jì)人員有兩個(gè)難以處理的選擇:要么在模擬域中執(zhí)行此處理(通常價(jià)格昂貴且可能噪聲大),要么放棄使用獨(dú)立的單芯片編解碼器,并使用獨(dú)立的精密ADC和DAC芯片在數(shù)字域中執(zhí)行處理。這兩種選擇都不理想。 本文介紹了一種將MAXQ3120與外部DAC配合使用的方法,作為語音編解碼器,能夠?qū)θ胝竞统稣疚涣鬟M(jìn)行額外的處理。
編解碼器基礎(chǔ)知識(shí)
早在考慮數(shù)字電話之前,就已經(jīng)確定必須保持從約300Hz到約3.5kHz的頻率范圍才能使語音信號(hào)保持可理解性。超出此范圍的頻率會(huì)影響語音信號(hào)的保真度,但不會(huì)影響清晰度。(事實(shí)上,事實(shí)證明,帶限信號(hào)比寬帶信號(hào)更容易理解。根據(jù)奈奎斯特標(biāo)準(zhǔn),即信號(hào)的采樣頻率必須至少是目標(biāo)最高頻率的兩倍,所有語音編解碼器都以每秒8,000個(gè)樣本的速度工作 - 超過所需3.5kHz的兩倍 - 并且每個(gè)樣本都轉(zhuǎn)換為數(shù)字碼字。
然而,碼字的大小帶來了一個(gè)問題。在任何數(shù)字系統(tǒng)中,都需要在信號(hào)完整性和字?jǐn)?shù)之間進(jìn)行權(quán)衡。為了獲得最佳保真度,系統(tǒng)設(shè)計(jì)人員可以選擇較大的字大小,但更多的位需要更大的帶寬,并且?guī)捫枰ㄥX。或者,設(shè)計(jì)人員可以選擇較小的字大小以節(jié)省帶寬成本,但語音質(zhì)量會(huì)受到影響。測試表明,小碼字(大約八位)可以提供良好的語音質(zhì)量,但前提是說話者以安靜、一致的聲音說話。語音音量的正常變化會(huì)使發(fā)射機(jī)飽和,導(dǎo)致削波和失真。人們可以降低增益以消除高電平的這種削波,但正常的聲音電平只會(huì)使用四到五位,使柔和的聲音聽起來沙啞和不自然。為了適應(yīng)各種人聲,從最柔和的耳語到最響亮的喊叫,似乎需要十二到十四位的分辨率。
解決方案是使用非線性編解碼器(見圖1)。這些編解碼器利用了這樣一個(gè)事實(shí),即耳朵對響亮聲音中的小錯(cuò)誤比對柔和聲音中的小錯(cuò)誤更寬容。在圖中,沉默以零線為中心;柔和的聲音僅偏離中心線的一小部分,而大的聲音偏離得更大。在這些器件中,零線周圍的代碼比遠(yuǎn)離零線的代碼更密集,從而使編解碼器能夠?yàn)榈碗娖叫盘?hào)提供可接受的結(jié)果,同時(shí)保持高電平信號(hào)的良好動(dòng)態(tài)范圍。
圖1.這是典型PCM編解碼器的響應(yīng)曲線。零相對振幅附近的區(qū)域包含的代碼比曲線末端多得多,使編解碼器能夠保持高語音保真度和寬動(dòng)態(tài)范圍。
在數(shù)字方面,有必要與PCM高速公路接口。通常,在公共總線(PCM 高速公路)上將多個(gè)編解碼器連接在一起,而不是使用一組單獨(dú)的電線將每個(gè)編解碼器連接到其關(guān)聯(lián)的中繼設(shè)備。為了協(xié)調(diào)傳輸,編解碼器共享一個(gè)公共位時(shí)鐘,并通過單個(gè)幀脈沖發(fā)出信號(hào)以開始發(fā)送或接收。在常見的北美標(biāo)準(zhǔn)中,1 個(gè)編解碼器可以駐留在 PCM 高速公路上,該高速公路由某種類型的序列器邏輯以每秒 544,000,125 位的速度計(jì)時(shí)。每<>μs,第一個(gè)編解碼器接收一個(gè)幀脈沖,并將<>位發(fā)送到高速公路上。在八個(gè)位時(shí)鐘之后,第二個(gè)編解碼器接收其幀脈沖,依此類推。在所有 <> 個(gè)編解碼器傳輸完數(shù)據(jù)后,序列器提供一位時(shí)間用于信令目的,然后重復(fù)序列。因此,數(shù)字生成如下:
[(8 bits per sample x 24 channels) + 1 signaling bit] x 8,000 samples per second = 1,544,000 bits
per second
PCM 編解碼器的類型
世界已經(jīng)對電話中使用的PCM編解碼器的幀速率(以及采樣率)進(jìn)行了標(biāo)準(zhǔn)化。可悲的是,世界幾乎沒有其他標(biāo)準(zhǔn)化。有兩種類型的轉(zhuǎn)碼算法需要考慮:在歐洲使用的 A-law 和主要在美國和日本使用的 μ-law。并且有兩種基本的線路速率正在使用:美國的DS1(1.544Mb / s)和歐洲的E1(2.048Mb / s)。本文介紹的設(shè)計(jì)是DS1(也稱為T1)編解碼器,能夠在A定律或μ定律模式下工作。
μ法編解碼器根據(jù)以下公式對樣本進(jìn)行編碼:
其中μ是等式的特征,通常為 255。
A 定律編解碼器根據(jù)略有不同的公式進(jìn)行編碼:
其中A是方程的特征,通常為87.6;或者在某些情況下,為 87.7。請注意,對于接近零的值,A 律函數(shù)是線性的;僅當(dāng)輸入值大于 1/A 時(shí),它才會(huì)變?yōu)閷?shù)。
在實(shí)際操作中,這兩個(gè)壓縮定律會(huì)產(chǎn)生非常相似的曲線。此外,在實(shí)踐中,這些線性公式實(shí)際上從未使用過。相反,需要分段線性近似來減輕計(jì)算開銷。但是,此處介紹的設(shè)計(jì)通過查找表實(shí)現(xiàn)了這些確切的公式。
微控制器成為編解碼器
MAXQ3120包含兩個(gè)精密16位ADC通道和一個(gè)帶16位累加器的16 x 40乘法器。雖然沒有DAC通道,但有低成本的精密串行DAC可以滿足這種能力。剩下的就是構(gòu)建軟件來連接這些外圍設(shè)備。
編碼
編碼有三個(gè)步驟:將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),對數(shù)字化樣本進(jìn)行重采樣和濾波,最后使用 A 律或μ律轉(zhuǎn)碼將樣本壓縮為 8 位表示。
首先是A/D轉(zhuǎn)換步驟,這也是最簡單的,因?yàn)镸AXQ3120內(nèi)置了ADC通道。MAXQ3120每16μs產(chǎn)生一個(gè)新的48位結(jié)果。這意味著系統(tǒng)在384MHz的處理器時(shí)鐘上有8個(gè)指令周期來處理樣本。
幸運(yùn)的是,處理樣本很簡單,只需讀取ADC并將數(shù)據(jù)存儲(chǔ)在循環(huán)緩沖器中即可。緩沖區(qū)始終包含 32 個(gè)最新的 16 位樣本。MAXQ3120包含256個(gè)16位字RAM;因此,循環(huán)緩沖區(qū)僅消耗單個(gè)通道可用RAM的12.5%。
雖然ADC每48μs產(chǎn)生一個(gè)樣本,但通信網(wǎng)絡(luò)每125μs需要一個(gè)新的樣本。因此,無論我們對信號(hào)做什么,都必須對其進(jìn)行重新采樣。一種簡單的方法是,當(dāng)接收到幀脈沖時(shí),只接受最新的采樣進(jìn)行轉(zhuǎn)換,而丟棄所有其他樣本,但MAXQ3120可以做得更好。
在每個(gè)幀脈沖上,編解碼器軟件開始對循環(huán)緩沖器中的累積樣本施加31抽頭FIR濾波器。該濾波器在3.3kHz時(shí)具有5db點(diǎn),因此提供抗混疊和額外的重建功能,從而降低ADC通道中的噪聲。濾波器過程的結(jié)果是 16 位樣本,可用于 A 律或μ法壓縮。
表 1.前十個(gè)μ法和A法法典
Code | μ-Law | A-Law |
0 | 0000 | 0000 |
1 | 0005 | 000F |
2 | 000乙 | 001F |
3 | 0011 | 002F |
4 | 0018 | 003F |
5 | 001F | 004F |
6 | 0026 | 005F |
7 | 002D | 006F |
8 | 0035 | 007F |
9 | 003D | 008F |
有幾種方法可以將值從 16 位線性轉(zhuǎn)換為其代碼;直接計(jì)算和分段近似是兩種流行的方法。我們沒有使用這兩種方法,而是利用MAXQ3120相對較大的程序空間,設(shè)置兩個(gè)128字表,一個(gè)用于μ律編碼和解碼,另一個(gè)用于A律。啟動(dòng)時(shí),將輪詢外部引腳,并根據(jù)該引腳的級別將其中一個(gè)表加載到 RAM 中。編碼過程的操作如下:
取 16 位線性 PCM 樣本的絕對值。跟蹤符號(hào)位。
現(xiàn)在對適用的表執(zhí)行二叉搜索:將 PCM 樣本與表的中間值進(jìn)行比較。如果小于中間值,則僅考慮表的下半部分;如果大于中間值,則僅考慮上半部分。重復(fù)此步驟,直到只剩下兩個(gè)表?xiàng)l目,然后選取最接近的表?xiàng)l目。
要發(fā)出的代碼是表?xiàng)l目的索引。例如,如果樣本值0x006D并且轉(zhuǎn)換為 A-law,則上表中最接近的值將是 0x006F。其指數(shù)為7;這是要發(fā)出的代碼。
最后,應(yīng)用原始樣本值的符號(hào)。 生成的八位數(shù)字是對數(shù) PCM 值。然而,這還不是結(jié)束。網(wǎng)絡(luò)上發(fā)出的 PCM 值不僅僅是二進(jìn)制補(bǔ)碼值。相反,每個(gè)轉(zhuǎn)碼法都有適用的特殊規(guī)則。
對于μ法:
負(fù)數(shù)具有零號(hào)位;正值有一個(gè)符號(hào)位。
幅度值反轉(zhuǎn):因此,0 由 11111111b1 表示,而 +0 由 11111110b<> 表示。這保證了傳輸流中大量的一位(許多類型的物理層傳輸機(jī)制僅在一位上具有電平轉(zhuǎn)換;因此,高數(shù)量的一位使時(shí)鐘恢復(fù)更容易。
有一個(gè)“正零”值和一個(gè)“負(fù)零”值,分別由0b11111111和0b01111111表示。
最大的負(fù)數(shù)是 -127,用 0b00000000 表示。但是,為了保持時(shí)序完整性,許多系統(tǒng)不允許全零值,這些系統(tǒng)通過反轉(zhuǎn)位1自動(dòng)阻止全零碼。這使得代碼流發(fā)生了不可逆轉(zhuǎn)的更改(0b00000000 變?yōu)?0b00000010),但對于音頻傳輸,它不會(huì)對感知聲音產(chǎn)生太大變化 - 兩個(gè)代碼都非常響亮!(此設(shè)計(jì)不執(zhí)行此功能,但很容易進(jìn)行更改。
對于A法:
就像在μ定律中一樣,負(fù)數(shù)有一個(gè)零號(hào)位。
就像在μ定律中一樣,有一個(gè)“負(fù)零”值和一個(gè)“正零”值,分別由 0b00000000 和 0b10000000 表示。
在傳輸之前,每個(gè)A定律單詞都與0x55進(jìn)行異或運(yùn)算;有效地反轉(zhuǎn)字節(jié)中的其他位。與μ定律的反轉(zhuǎn)一樣,這保證了高密度,使時(shí)鐘恢復(fù)更容易。
譯碼
解碼八位PCM樣本比編碼容易得多,因?yàn)闊o需對信號(hào)進(jìn)行重新采樣。應(yīng)用 PCM 法律規(guī)則后,將保留一個(gè) 16 位有符號(hào)量級值。將該值用作適用 PCM 表的索引(考慮登錄);結(jié)果是一個(gè) <> 位有符號(hào)值,可以傳送到 DAC。
本項(xiàng)目選擇的轉(zhuǎn)換器是MAX5722雙通道DAC。這是一款 12 位 DAC,采用經(jīng)濟(jì)型 5722 引腳 μMAX 封裝。與大多數(shù)DAC一樣,MAX1需要外部電壓基準(zhǔn)。幸運(yùn)的是,MAXQ25上有一個(gè)3120.<>V帶隙基準(zhǔn),適合此目的。
MAX5722為串行接口DAC,這意味著微控制器必須創(chuàng)建適合DAC的串行流。DAC接口是同步的,因此不需要連續(xù)時(shí)鐘,只需要片選低時(shí)的時(shí)鐘。這允許僅使用微控制器的通用I/O使用三線接口。
請注意,在本設(shè)計(jì)中,ADC通道的輸入范圍為-1.0V至+1.0V,而DAC輸出通道的輸入范圍為0.0V至+1.25V。在實(shí)際的電信應(yīng)用中,例如線卡,這些電平可能會(huì)轉(zhuǎn)換為其他模擬電平(例如,通常將1Ω阻抗中的600mW定義為0dBm,這是電信網(wǎng)絡(luò)中通常遇到的最大電平)。如果保持輸入和輸出電平相同對于應(yīng)用很重要,請參考MAX5722數(shù)據(jù)資料,了解產(chǎn)生雙極性輸出的詳細(xì)信息。
PCM 總線
現(xiàn)在我們知道了如何將模擬波形轉(zhuǎn)換為壓縮的PCM格式并返回,只剩下一個(gè)問題:與PCM總線接口。
大多數(shù)情況下,與PCM高速公路的接口涉及連接到四線總線:終端將數(shù)據(jù)放置在其上的傳輸數(shù)據(jù)線;中繼設(shè)備在其上放置數(shù)據(jù)以及終端接收數(shù)據(jù)的接收數(shù)據(jù)線;通常對每個(gè)終端唯一的幀同步線,當(dāng)總線包含用于該終端的數(shù)據(jù)時(shí),該同步線會(huì)發(fā)出脈沖以指示;還有一個(gè)位時(shí)鐘。由于我們的編解碼器旨在作為終端設(shè)備,它將接收位時(shí)鐘和幀脈沖,在接收數(shù)據(jù)線上接收數(shù)據(jù),并在發(fā)送數(shù)據(jù)線上傳輸其數(shù)據(jù)。
在T1系統(tǒng)中,時(shí)鐘運(yùn)行在1.544MHz。這意味著當(dāng)幀脈沖到達(dá)時(shí),我們必須在短短幾個(gè)時(shí)鐘周期內(nèi)非常快速地做出響應(yīng)。一位時(shí)間略高于625ns,或五個(gè)指令周期。由于此時(shí)間遠(yuǎn)小于典型的中斷延遲(當(dāng)考慮中斷、上下文保存和開銷時(shí)),因此僅用中斷響應(yīng)幀脈沖信號(hào)還不夠快,必須找到另一種解決方案。
該方案是使用MAXQ3120中的三個(gè)定時(shí)器之一,在幀脈沖到達(dá)前幾微秒中斷處理器。然后,當(dāng)幀脈沖最終到達(dá)時(shí),處理器已被中斷,已保存其上下文,并準(zhǔn)備將每個(gè)周期專用于 PCM 總線任務(wù)。它的工作原理如下:設(shè)置一個(gè)計(jì)時(shí)器在 110μs 后過期。在所有位移出后,在每個(gè)幀事件結(jié)束時(shí)啟動(dòng)計(jì)時(shí)器。在T1系統(tǒng)中,兩個(gè)樣品在10.4μs內(nèi)移出。當(dāng)定時(shí)器中斷處理器時(shí),軟件立即開始尋找?guī)}沖的前緣。這是系統(tǒng)中唯一的中斷。其他所有內(nèi)容都會(huì)被輪詢,并且可以等到將 PCM 數(shù)據(jù)上下總線的重要任務(wù)完成。
一旦幀脈沖到達(dá),處理器就會(huì)保持非常繁忙的狀態(tài)。它必須移動(dòng)發(fā)送緩沖器并將輸出位寫入端口,然后在五個(gè)周期內(nèi)讀取輸入位并移位接收緩沖器。MAXQ3120在<>個(gè)周期內(nèi)完成此操作。
您可能會(huì)注意到,此討論以 T1 總線為中心,但 E1 呢?在2.048MHz時(shí),E1系統(tǒng)每比特僅允許略高于488ns或少于四個(gè)指令周期。因此,E1 PCM 總線的管理需要外部硬件的幫助。例如,由位時(shí)鐘驅(qū)動(dòng)的廉價(jià)移位寄存器將減輕位電平時(shí)序的嚴(yán)格要求。
附加功能
編解碼器已完成。但是,由于獨(dú)立編解碼器價(jià)格低廉且數(shù)量豐富,因此從微控制器構(gòu)建編解碼器是沒有意義的,當(dāng)然,除非作為設(shè)計(jì)師,您別有用心。以下是一些可能促使設(shè)計(jì)人員考慮此類系統(tǒng)的想法:
預(yù)過濾當(dāng)信號(hào)采用線性PCM格式時(shí),這是對信號(hào)應(yīng)用均衡、動(dòng)態(tài)范圍壓縮、噪聲門控或任何其他操作的絕佳機(jī)會(huì)。雖然MAXQ3120不是傳統(tǒng)意義上的DSP,但這些功能很容易在處理器可用的馬力范圍內(nèi)。
帶內(nèi)信令提取高效、簡單的算法可用于檢測線性 PCM 流中的帶內(nèi)音調(diào)。可以利用這些算法來檢測DTMF數(shù)字,并使用這些算法來實(shí)現(xiàn)某些特性和功能。還可以使用音調(diào)檢測,通過精確檢測撥號(hào)音(在北美,350Hz + 440Hz)、站鈴(440Hz + 480Hz)和忙音(480Hz + 620Hz)來確定呼叫進(jìn)度。
會(huì)議橋將通道 1 的接收音頻混合并將其與通道 2 的傳輸音頻組合在一起很簡單,反之亦然。通過這樣做,您有效地為兩個(gè)渠道創(chuàng)建了一個(gè)數(shù)字會(huì)議橋。由于網(wǎng)橋是數(shù)字的,因此不會(huì)損失語音質(zhì)量。如果希望橋接兩個(gè)以上的通道,只需添加更多的MAXQ3120器件即可。
結(jié)論
雖然MAXQ3120并非專門針對電信行業(yè),但其片內(nèi)精密ADC和DSP功能為設(shè)計(jì)人員提供了廣泛的機(jī)會(huì)來創(chuàng)建定制的硬件和軟件解決方案。各種開發(fā)工具的可用性使設(shè)計(jì)任務(wù)變得簡單。
審核編輯:郭婷
-
轉(zhuǎn)換器
+關(guān)注
關(guān)注
27文章
8742瀏覽量
147779 -
dac
+關(guān)注
關(guān)注
43文章
2309瀏覽量
191411 -
編解碼器
+關(guān)注
關(guān)注
0文章
268瀏覽量
24283
發(fā)布評論請先 登錄
相關(guān)推薦
評論