| 引言
今天的電話已數(shù)字化。而在過去,它往往意味著咔嗒作響的、包含數(shù)百個電氣觸點的史端橋式開關(guān),數(shù)英里的雙絞線電纜就象多彩的意大利面條,星羅棋布于鄉(xiāng)村野外的微波塔。今天,話音業(yè)務(wù)在最開始的時候就被轉(zhuǎn)換成了數(shù)字形式,并和成百上千的其他話音、電子郵件和網(wǎng)頁等信息一同,由一條光纖傳輸。 數(shù)字電話催生了信息時代,并繼續(xù)以新的技術(shù),如因特網(wǎng)話音(VoIP),改變著通信工業(yè)的前景。然而,有一個事實沒有變 - 必須在線路上的某個點,將話音轉(zhuǎn)換為數(shù)字,并將數(shù)字轉(zhuǎn)換回話音。 這正是CODEC (編解碼器)的工作。這個名稱是coder/decoder (編碼器/解碼器)的縮寫,是一種概念上非常簡單的器件。它包含一個模擬到數(shù)字轉(zhuǎn)換器(ADC),用于將音頻轉(zhuǎn)換為位流;一個數(shù)字到模擬轉(zhuǎn)換器(DAC),用于將收到的位流轉(zhuǎn)換回音頻;和一個接口,用于和其他CODEC共享總線,并通過總線插入和取回數(shù)字化的音頻信息。 通常,一個CODEC就是一片獨立的混合信號半導(dǎo)體器件。對于簡單應(yīng)用,這種方案能夠很好地工作,例如端局交換機中的線卡。然而,很多時候我們還希望對要發(fā)送的音頻信號作一些預(yù)處理(例如限幅、動態(tài)范圍壓縮或頻譜整形等),或?qū)κ盏降囊纛l信號作一些后處理(例如噪聲抑制)。對于獨立式CODEC而言,這些處理任務(wù)比較難以實現(xiàn)。這是因為模擬音頻信號一經(jīng)CODEC轉(zhuǎn)換,就再也沒有機會作進一步地處理了 - 獨立式CODEC直接連接到了PCM干線。這種情況下,系統(tǒng)設(shè)計者就只有兩種很笨拙的選擇了:或者在模擬域執(zhí)行這種處理(通常很昂貴且可能引入噪聲),或者放棄使用這種獨立式的單片CODEC,而改用獨立的精密ADC和DAC芯片,并在數(shù)字域進行處理。這兩種方式都不理想。本文給出一種新的方案,它采用MAXQ3120微控制器和外部DAC作音頻CODEC,同時能夠?qū)θ胝竞统稣疚涣鬟M行額外的處理。 CODEC基礎(chǔ)
在數(shù)字電話還很遙遠的時候,人們就認識到保持一個話音信號清晰可辨的必要頻段大約為300Hz至3.5kHz。此范圍之外的頻率對于語音信號的保真度有貢獻,但對于清晰度無益(事實表明,限制帶寬的信號比寬帶信號反而更易于辨析)。根據(jù)Nyquist定律,對于信號的采樣率必須至少為其最高頻率的兩倍,因此所有話音CODEC都工作于每秒8,000個采樣 - 多于所要求的3.5kHz的兩倍 - 每個采樣都被轉(zhuǎn)換為一個數(shù)字化的碼字。
然而,碼字的長度又帶來另一個問題。在任何數(shù)字系統(tǒng)中,都必須在信號的完整性和字長間做出妥協(xié)。為獲得高保真,系統(tǒng)設(shè)計者應(yīng)選擇較大的字長,但位數(shù)越多帶寬越高,而帶寬是要付出成本的。另一方面,如果設(shè)計者選擇較小的字長以節(jié)省帶寬成本,話音質(zhì)量就會有所損失。實驗表明較小的字長 - 大約八位 - 也可以提供較好的話音質(zhì)量,但前提是講話者必須是在安靜的環(huán)境中用恒定的話音講話。這種情況下正常的音量變化就會造成發(fā)送器飽和,導(dǎo)致箝位和失真。降低增益當(dāng)然可以消除高音量時的箝位問題,但正常音量可用的位數(shù)卻減少至四到五位,使比較輕的話音聽起來有刮擦聲且不自然。為了適應(yīng)人類話音的整個范圍,從最輕的低語到大聲的喊叫,看起來有必要采用十二到十四位分辨率。 最佳方案是非線性CODEC (見圖1)。這種類型的CODEC利用了這樣一件事實:我們的耳朵對于響亮聲音的小誤差更“寬容”,而對于微弱聲音的小誤差很敏感。圖1中,靜默狀態(tài)位于零線附近;輕微的話音相對于中心線有小量偏移,而響亮的話音偏移較多。在這樣的器件中,零線附近的編碼密度高于遠離零線處的編碼密度,使CODEC既能為低電平信號提供滿意的性能,同時為高電平信號提供足夠的動態(tài)范圍。 
圖1. 典型PCM CODEC的響應(yīng)曲線。在零相對幅度附近的區(qū)間編碼密度高于曲線端點處,使CODEC既保持了話音的高度清晰,又具有很寬的 動態(tài)范圍。 在數(shù)字側(cè),器件必須與PCM干線接口。各CODEC并不是通過單獨的一組線連接到其相應(yīng)的中繼設(shè)備上,而是一定數(shù)量的CODEC一同被連接到一條共享的總線 - PCM干線上。為了協(xié)調(diào)傳輸過程,這些CODEC共用一個位時鐘,而用單獨的幀脈沖指揮每個器件開始發(fā)送和接收。按照北美標(biāo)準(zhǔn),24個CODEC共享一條PCM干線,某種類型的時序器邏輯以1,544,000位/秒的速率控制著其運行節(jié)奏。每過125µs,第一個CODEC收到一個幀脈沖并發(fā)送八位數(shù)據(jù)到干線上。8個位時鐘后,第二個CODEC收到其幀脈沖,依此類推。所有24個CODEC發(fā)完數(shù)據(jù)后,時序器提供一位的時間用于傳送信令,然后重復(fù)上述過程。這樣,總的數(shù)據(jù)量為: [(8 bits per sample x 24 channels) + 1 signaling bit] x 8,000 samples per second = 1,544,000 bits per second PCM CODEC的類型
用于電話的PCM CODEC已有了全世界統(tǒng)一的幀速率(采樣率)。不幸的是,在其它方面幾乎沒有統(tǒng)一的全球標(biāo)準(zhǔn)。常用的編碼方案有兩種:用于歐洲的A率和主要用于美國和日本的µ率。有兩種基本線速率正在使用:美國的DS1 (1.544Mbps)和歐洲的E1 (2.048Mbps)。本文所討論的設(shè)計為DS1 (或稱為T1) CODEC,工作于A率或µ率模式。
µ率CODEC按照以下規(guī)則對采樣信號進行編碼:  其中µ是本規(guī)則的特征參數(shù),典型為255。 A率CODEC的編碼方式略有不同:  其中A是本規(guī)則的特征參數(shù),通常為87.6,有些情況下為87.7。需要注意的是,當(dāng)接近于零時,A率函數(shù)是線性的;只有當(dāng)輸入大于1/A后它才變?yōu)閷?shù)。 在具體實踐中,這兩種壓擴率所形成的曲線非常近似。并且,實際應(yīng)用中從未使用這些線性公式。為了減輕運算開銷,常常采用分段線性逼近的方式。然而,在本設(shè)計中,我們通過查表的方式嚴格按照這些規(guī)則來做。 將一個微控制器變?yōu)镃ODEC
MAXQ3120包含有兩個精密的16位ADC通道、一個16 x 16乘法器以及一個40位累加器。雖然MAXQ3120不含DAC通道,有很多低成本的精密串行DAC可用于此功能。剩下的工作就是構(gòu)建一個軟件來連接這些外圍器件。 編碼
可通過三步完成編碼:轉(zhuǎn)換模擬信號為數(shù)字量,對數(shù)字采樣進行再抽樣并濾波,最后,用A率或µ率編碼轉(zhuǎn)換方式壓縮采樣至八位。
第一步是A/D轉(zhuǎn)換,最容易實現(xiàn),因為ADC通道已內(nèi)置于MAXQ3120。MAXQ3120每48µs產(chǎn)生一個新的16位轉(zhuǎn)換結(jié)果。這意味著對于8MHz的處理器時鐘,系統(tǒng)可以有384個指令周期來處理采樣。 幸好,采樣的處理只是簡單地讀取ADC并將數(shù)據(jù)存儲于一個環(huán)形緩沖器。緩沖器總是保存著32個最近的16位采樣結(jié)果。MAXQ3120有256字的16位RAM。這樣,每個通道的環(huán)形緩沖器僅消耗全部可用RAM的12.5%。 ADC每48µs采一個樣,但通信網(wǎng)絡(luò)每125µs需要一個新的采樣。因此,無論我們?nèi)绾翁幚硇盘?都必須對其進行再抽樣。最簡陋的方法之一就是,當(dāng)收到一個幀脈沖時,只接受最近的一個采樣來做進一步的轉(zhuǎn) |