感謝閱讀。
上一篇講述了Um接口的物理信道,這一篇將講述語音是如何“裝進”物理信道的。換句話說,上一篇講的是“路”,這一篇講的是“貨”。更具體的,這一篇講的是“貨”是怎么來的,也就是語音信號的“數(shù)字化”過程。
部分示圖和推算引用自曹志剛的《現(xiàn)代通信原理》和陳愛軍的《深入淺出通信原理》,版權(quán)歸原作者所有。為了內(nèi)容的可讀性和風(fēng)格的統(tǒng)一性,我重新進行了繪制和標注,如果存在理解不到位而產(chǎn)生的錯誤...… 這個歸我(要不還能咋地)。由于編輯器不支持輸入公式,文中對推算只能進行有限的表述,請大家結(jié)合示圖理解。
言歸正傳。
GSM系統(tǒng)的目標,是把通話一方的聲音傳送到另一方,反向亦然。在這一點上,GSM和PSTN(Public Switched Telephone Network,公共交換電話網(wǎng)絡(luò)…… 就是你家里那個座機啦)是相同的,“數(shù)字化”的原理也是相似的。
大家小時候也許玩過,用細線串接兩個紙杯底部,把線拉直便是一個簡易的通話系統(tǒng)(我們才這么無聊,現(xiàn)在小朋友都玩真手機了)。發(fā)送方對著紙杯說話,聲波使紙杯產(chǎn)生振動,振動通過細線傳送,接收方紙杯產(chǎn)生相同的振動,于是聽到發(fā)送方的聲音。這里暫且把這個系統(tǒng)稱為CUP吧。
GSM和CUP有什么不同呢?
CUP通過細線傳送聲波,只適合短距離通信。我們常說過去通信靠吼,CUP還真不如吼傳得遠。不過要是不會“千里傳音”,長距離通信還是交給GSM吧。GSM沒有直接傳送聲波,這是實現(xiàn)長距離通信的關(guān)鍵。在GSM看來,網(wǎng)絡(luò)傳送的是“信息”而不是“聲音”。發(fā)送方從“聲音”轉(zhuǎn)換為“信息”,接收方則從“信息”恢復(fù)出“聲音”。
GSM終端將聲波轉(zhuǎn)換為電平信號,再轉(zhuǎn)換為無線信號,這就比CUP傳送的遠得多,通過中繼可以實現(xiàn)更長距離的傳送。第一步又稱為聲電轉(zhuǎn)換,一百多年前貝爾就已經(jīng)實現(xiàn)了。終端通過電磁感應(yīng)將聲波轉(zhuǎn)換為隨時間連續(xù)變化的電平值,即語音信號。這就是網(wǎng)絡(luò)需要傳送的“信息”。(不太嚴格的) 電磁感應(yīng)是法拉第發(fā)現(xiàn)的(名字不幸被賈布斯盯上了),說的是:閉合電路的部分導(dǎo)體在磁場中切割磁感線時,由于磁通量發(fā)生變化,導(dǎo)體會產(chǎn)生感應(yīng)電流。動圈式話筒應(yīng)用了電磁感應(yīng)原理,將聲波轉(zhuǎn)換為膜片振動,帶動套在磁極上的線圈運動,線圈切割磁感線產(chǎn)生感應(yīng)電流。(示圖中運動的是磁極而不是線圈,大家將就看看吧… 運動是相對的嘛) 第二步有兩種方式可選擇:模擬通信或數(shù)字通信。很長一段時間里,電話、電臺和電視都使用模擬通信方式。模擬通信簡單來說就是“依葫蘆畫瓢”,發(fā)送方根據(jù)語音信號產(chǎn)生波形“一模一樣”的波動信號(比如AM調(diào)制,已調(diào)信號的包絡(luò)和基帶信號的波形是相同的),接收方從波動信號恢復(fù)出語音信號。這種通信方式我們稱為模擬通信。(CUP也可看作模擬通信系統(tǒng))
思路很直接,問題也很多。
模擬信號容易受噪聲和干擾影響而產(chǎn)生失真,電話的雜音和電視的雪花都是信號失真的反映。模擬信號失真難以消除,長距離傳送失真還會積累,在無線環(huán)境中尤為明顯。模擬信號難以加密,信息容易被竊聽,這也是第一代移動通信系統(tǒng)(如TACS)的缺點之一。
如果把語音信號看成一段小曲(一連串高低起伏的音符),模擬通信就像發(fā)送終端跟著用戶A哼哼,接收終端聽到再唱給用戶Z聽??梢韵胂?,用戶Z聽的和用戶A唱的多少有點差別,原因可能是唱的人跑調(diào),或是聽的人五音不全,甚至是環(huán)境太嘈雜了。
如果小曲經(jīng)過傳唱(BTS、BSC、MSC)可能就差的更遠了。想象有這么一群人,A唱給B聽,B唱給C聽…… 經(jīng)過若干人傳唱后,最后Z聽到的會是什么樣。也許A唱的是“你是我的主打歌”,而Z聽到的卻是“你是我的豬大哥”。這就是信號的“失真”。
數(shù)字通信的思路,是把小曲記錄成簡譜,再轉(zhuǎn)換成兩線譜。兩線譜只有兩個音:低音Do和高音Do。在具體實現(xiàn)上,就是發(fā)送方把語音信號轉(zhuǎn)換成“0”和“1”構(gòu)成的數(shù)字信號(如何表示“0”和“1”有多種形式)。這個過程我們稱為“信源編碼”,或通俗的稱為“數(shù)字化”。
發(fā)送方看見“1”就唱高音Do,看見“0”就唱低音Do,接收方根據(jù)聽到的音調(diào)記錄數(shù)字信號,再解碼恢復(fù)出簡譜。高音Do和低音Do差別明顯,比音高相近的音符容易區(qū)分,即使跑點兒調(diào)(信號失真)也能猜個八九不離十。數(shù)字通信對信道的要求低于模擬通信,抗干擾性顯然強于模擬通信。
除此以外,數(shù)字通信還有很多優(yōu)點:長距離傳送可中繼放大,消除失真的積累;接收方可檢測是否存在誤碼,甚至可進行糾錯(本質(zhì)是增加冗余信息,犧牲帶寬換取可靠性);可應(yīng)用加密保護和完整性保護,以確保信息不被竊聽或篡改。
GSM是第二代移動通信系統(tǒng)(所謂的2G網(wǎng)絡(luò)),自然采用數(shù)字通信方式。GSM希望接收方盡量還原語音信號,又希望編碼不太長以節(jié)省帶寬 —— 換句話說,就是編碼效率要高。怎么把時間連續(xù)、幅度連續(xù)的語音信號轉(zhuǎn)換為數(shù)字信號,才可以達到GSM的期望呢?
首先得對語音信號分段。
在CUP中是沒有分段的,發(fā)送方說話細線就跟著振動,紙杯之間聲波是連續(xù)傳送的(把線一掐通話會立刻中斷)。在GSM中無線信道可不會跟著發(fā)送方說話振動,不說別的,物理信道在時間上就不是連續(xù)的(“時隙”的物理意義,終端每隔約4.615毫秒發(fā)送一次數(shù)據(jù)),怎么和發(fā)送方說話同步振動呢?(我認為這也是模擬信道和數(shù)字信道的一個差異)
在GSM看來,從語音信號轉(zhuǎn)換為數(shù)字信號和從數(shù)字信號恢復(fù)為語音信號都是終端的事,網(wǎng)絡(luò)主要負責(zé)傳送數(shù)字信號。終端將時間連續(xù)的語音信號分段,轉(zhuǎn)換為數(shù)字信號再交給網(wǎng)絡(luò)傳送。物理信道是否時間連續(xù)并不重要,只要終端產(chǎn)生信號的速率和網(wǎng)絡(luò)傳送信號的速率匹配即可,關(guān)于這點后面再來驗證。
和PSTN、VoLTE相同,GSM將語音每20毫秒分成一段。為什么取這么短呢?如果每10秒分成一段,終端要等用戶說完10秒才開始轉(zhuǎn)換,就算信號瞬間傳送到另一端,對方聽到的聲音也是10秒前產(chǎn)生的,對于時延敏感的語音業(yè)務(wù)顯然不可行。為了減輕對用戶感知的影響,分段時長必須足夠短。(也可以減輕個別分段傳送失敗的影響。)
接著,終端將20毫秒語音信號轉(zhuǎn)換為數(shù)字信號。語音信號的時間和幅度都是連續(xù)的,取值具有無限多可能性(跟實數(shù)一樣多),要轉(zhuǎn)換為有限長度的編碼必須先離散化。在時間(橫軸)上的離散化稱為采樣,在幅度(縱軸)上的離散化稱為量化。
采樣和量化就是把小曲記錄成簡譜的過程。
如果我唱“兩只老虎”給你聽,你會怎么記錄呢?一般的歌曲,音符長度是規(guī)整的,比如一拍、兩拍、四拍等,假設(shè)只有這三種音符,每一拍記錄一次音高就可以了,因為你“確信”接下來這一拍都是這個音高。如果我唱了個兩拍的Do,你就記錄成兩個Do。這個過程就是采樣。(這里放個“兩只老虎”的鏈接,是不是覺得寫個簡譜So Easy,感覺自己滿滿的都是藝術(shù)細胞?) 如果我是個靈魂歌手,對你的考驗就大了。假如你聽到一個Do和Re之間的音,就要判斷我唱的是Do還是Re。你把音域以Do、Re、Me、Fa、So、La、Ti為中心劃分為七個區(qū)間(對不起,我不是張靚穎),不管你聽到的音多不準總會落入一個區(qū)間,記錄為相應(yīng)的音符就可以了,換句話說,聽起來像哪個就記成哪個。這個過程就是量化。
可是我來脾氣了:誰說我在唱“兩只老虎”啦,誰要你修音啦,我唱的再難聽,也得如實記錄下來。為了能更好的記錄和還原我“美妙”的歌聲,你提高了采樣頻率,劃分了更多量化區(qū)間,信心滿滿的來找我,結(jié)果發(fā)現(xiàn)我在唱“忐忑”,于是你內(nèi)心崩潰了。(這里放一個“忐忑”的鏈接,大家感受一下這種“忐忑”的心情) 數(shù)字通信的挑戰(zhàn),就在于不能預(yù)判輸入會是什么樣(要是知道對方會說什么還打啥電話,語音信號是隨機信號,這是后續(xù)分析的重要前提)。你無法知道最短音符是一拍,如果我唱了個二分之一拍音符,每一拍采樣一次就會錯過這個變化;你也無法知道音域只有一個八度,如果我變身張靚穎,你記下一大堆高音Do,什么都還原不出來。由此可見,數(shù)字通信只適用于特定范圍的信號,對應(yīng)的頻率和幅度范圍,我們不太嚴格的稱為“動態(tài)范圍”。
即使在動態(tài)范圍內(nèi),無論如何增加量化區(qū)間,輸出總是和輸入存在偏差。就像我們用簡譜去記錄原生態(tài)歌曲(有可能比“忐忑”還忐忑),總是無法完全還原這些歌曲的神韻。這就是“數(shù)字化”引入的失真。
如果聽覺角度不好理解,我換成視覺解釋一下。我的高中數(shù)學(xué)老師很厲害,拿著粉筆一揮就是一個圓(我總覺得和體型有關(guān),對不起了尊敬的紀老師)。不過,大部分人是學(xué)不來的,我們是怎么畫圓的呢—— 我們會先打上一圈點,感覺差不多了再連成一個圓。(也可理解為從正多邊形逼近于圓,祖沖之也是這么干的)
GSM終端也這樣記錄和恢復(fù)語音信號的波形,終端以固定間隔記錄電平值,相當(dāng)于記錄打點位置,這個過程就是采樣。采樣獲得的電平值是個實數(shù),取值仍然具有無窮多可能,終端將其劃歸為某個區(qū)間,并以中間值替代作為重建值,這個過程就是量化。
采樣頻率越高,量化區(qū)間越多,重建信號越接近語音信號,但相應(yīng)的編碼越長,網(wǎng)絡(luò)傳送的信息越多,需要的帶寬越大,這里存在一個平衡??梢钥吹剑@里提到的信源編碼,本質(zhì)上依然是“依葫蘆畫瓢”,這種編碼我們稱為“波形編碼”。 來看一下采樣數(shù)對失真的影響。黃色曲線表示語音信號,藍色鋸齒線表示重建信號。采樣數(shù)為28時,重建信號和語音信號相對接近,采樣數(shù)下降到14時失真顯著增大,采樣數(shù)下降到7時失真已經(jīng)無法接受。量化區(qū)間數(shù)對信號失真的影響相似。
具體說一下采樣。
GSM采樣頻率為8KHz,20毫秒語音信號包含160個樣本。直覺上采樣頻率多高都無法避免失真,但GSM認為8KHz就足夠了,這個結(jié)論主要基于兩位老人家的發(fā)現(xiàn),一位是傅立葉,另一位是奈奎斯特。(有的人活著,他已經(jīng)死了;有的人死了,他還在折磨學(xué)習(xí)通信的孩子…)
傅立葉說:我有一個大膽的想法!周期信號都可以分解為成諧波關(guān)系的正弦波和余弦波。這句話的數(shù)學(xué)表述就是我們常說的“傅立葉級數(shù)”。若干年后,狄利克雷(或稱為狄里赫利)證明了傅立葉的猜想在一定條件下是成立的,這些條件當(dāng)然就是“狄利克雷條件”。
狄利克雷條件說的是: <1>函數(shù)在任意的有限區(qū)間內(nèi)連續(xù),或存在有限數(shù)量的第一類間斷點(即左極限、右極限都存在的間斷點); <2>在一個周期內(nèi),函數(shù)存在有限數(shù)量的極大值或極小值; <3>函數(shù)在單個周期內(nèi)絕對可積。
更具體的,傅立葉級數(shù)有兩種表述形式,第一種是三角函數(shù),將f(t)分解為常數(shù)項、余弦級數(shù)和正弦級數(shù)。第二種是復(fù)指數(shù)函數(shù),可根據(jù)歐拉公式由第一種轉(zhuǎn)換得到。系數(shù)cn和an、bn的關(guān)系如下:<1>c0 =a0/2; <2>n>0時,cn=(an-jbn)/2;<3>n<0時,cn=c|n|,即正負頻率成分的系數(shù)相同。 即使不經(jīng)過嚴格的證明,也可以想象周期函數(shù)為什么可以分解為正弦級數(shù)和余弦級數(shù)。一方面,周期相同的周期函數(shù)疊加依然是周期函數(shù),正弦函數(shù)和余弦函數(shù)是周期函數(shù),如果基波cosωt和sinωt周期為T,則T也是n次諧波cosnωt和sinnωt的周期,因而成諧波關(guān)系的正弦函數(shù)和余弦函數(shù)疊加依然是周期函數(shù)。另一方面,任何函數(shù)均可分解為一個奇函數(shù)[ f(t) - f(-t) ] / 2和一個偶函數(shù)[ f(t) f(-t) ] / 2,且奇函數(shù)疊加依然是奇函數(shù),偶函數(shù)疊加依然是偶函數(shù),而正弦函數(shù)和余弦函數(shù)正好分別是奇函數(shù)和偶函數(shù)。
由此可見,將周期函數(shù)分解為正弦級數(shù)和余弦級數(shù)是可能的,如果你接受了這個設(shè)定(來不及解釋了,快上車),剩下的事情就是計算系數(shù)an和bn了。計算的訣竅是在等式兩側(cè)同時乘以cosnωt(或sinnωt),再進行積分。計算過程利用了三角函數(shù)的正交特性,即當(dāng)m<>n時,cosmωt x cosnωt(或sinmωt x sinnωt等組合)在一個周期內(nèi)積分為0。這樣等式右側(cè)的級數(shù)就只留下了an或bn那一項不為0。
我們來嘗試分解一個周期為T,幅度為-E/2或 E/2的方波信號。由計算結(jié)果可見:an=0,即分解后只包含正弦波,這很容易理解,示圖中的方波是奇函數(shù),因而分解后不包含余弦波(偶函數(shù));n為偶數(shù)時bn=0,即分解后只包含基波和奇數(shù)次諧波,其角速率(ω=2π/T=2πf)分別為ω0、3ω0、5ω0…… 角速率(或頻率)越高的諧波分量越小。 再反過來驗證一下。如果把級數(shù)的前n項疊加,可以看到n越大輸出波形越趨近于方波。n=5時疊加出方波雛形,n=11時已經(jīng)接近方波,n=31相對于n=21線條更趨于平滑,但波形差別已經(jīng)很小,可見高頻成分對輸出影響越來越小,和計算結(jié)果相吻合。 傅立葉級數(shù)有什么用呢?
用戶不是復(fù)讀機,語音信號也不是周期信號。傅立葉又說了:非周期信號,可以看作周期無限長的周期信號。當(dāng)基波的周期T趨向于無窮大時,其諧波頻率的間隔(即基波頻率f)則趨向于無窮小。傅立葉級數(shù)的求和運算轉(zhuǎn)換為積分運算。
因而,非周期信號也可分解為正弦波和余弦波,只是頻率成分不再是離散的,而是連續(xù)的。我們把不同頻率的權(quán)重稱為頻譜系數(shù),這是一個以角速率ω(或頻率f)為自變量的函數(shù),可記錄為F(ω)。通過f(t)計算F(ω)的(信號分解)過程稱為“傅立葉變換”,通過F(ω)計算f(t)的(信號合成)過程則稱為“傅立葉反變換”。 反過來,周期信號也可看作非周期信號的特例。周期信號的頻譜具有三個特點:<1>離散性:頻譜是離散而不是連續(xù)的;<2>諧波性:分量不為零的頻率均為基波的整數(shù)倍;<3>收斂性:或n大于某個值時F(ω)=0,或n趨近于無窮大時F(ω)趨近于0。
傅立葉變換的意義在于改變我們看信號的角度。
傅立葉告訴我們:萬物皆表象(傅立葉:對,是我說的)。時域中幅度隨時間的不同變化,等同于頻域中頻譜的不同構(gòu)成。語音信號在時域看沒什么特征,在頻域看特征卻相當(dāng)明顯:當(dāng)角頻率ω大于一定值時,頻譜系數(shù)F(ω)趨近為零。我們把具有這種特征的信號稱為“帶限信號”。
實際上,聲音信號基本都是“帶限信號”。比如說,西班牙吉他有六根琴弦,細弦比粗弦振動頻率高,發(fā)出的音也高。如果縮短琴弦振動的長度,提高振動頻率,就可以發(fā)出更高的音。吉他手彈高音時,手總是按在細弦最靠下的位置。不過這已經(jīng)是上限了,他們再怎么自我陶醉,也無法讓吉他發(fā)出更高的音。
人的聲帶就像一把吉他,振動頻率也是有范圍的,主音一般在85~1100Hz之間,因而語音信號也是一個“帶限信號”。奈奎斯特說:對于“帶限信號”,只要采樣頻率不小于原始信號最大頻率的兩倍,就可以從采樣完全恢復(fù)出原始信號。這就是“奈奎斯特采樣定理”或“香農(nóng)采樣定理”(俄羅斯人稱為“科捷利尼科夫采樣定理”,大家都記不住,所以說名字不要起的太長)。
簡單理解一下采樣定理。
在時域中,采樣相當(dāng)于原始信號和采樣脈沖(周期沖激信號)相乘,如圖所示,f(t)為原始信號,p(t)為采樣脈沖(假設(shè)采樣頻率為fs,則p(t)周期為Ts=1/fs),g(t) = f(t) x p(t)(這里的x表示乘積)即為采樣信號。 根據(jù)“時域相乘等同于頻域卷積”,在頻域中,采樣相當(dāng)于原始信號和采樣脈沖進行卷積,即G(f) = F(f) * P(f)(這里的*表示卷積),采樣脈沖的頻譜是一系列間隔為fs、強度為fs的沖激信號,原始信號和沖激信號δ( f – nfs )卷積相當(dāng)于將原始信號頻譜搬移到nfs位置,因而,采樣相當(dāng)于以fs為間隔對原始信號頻譜進行周期性拓展。 從采樣信號頻譜可見,當(dāng)fs > 2fi時(fi為原始信號最大頻率),通過低通濾波器可將原始信號過濾出來。如果fs減小,周期性拓展的頻譜相互靠近;如果fs減小到2fi,頻譜會連在一起;如果fs進一步減小,頻譜就會出現(xiàn)交疊(此時無法完全的恢復(fù)原始信號),我們把這種現(xiàn)象稱為“混疊”(Aliasing)。顯然,避免混疊的條件是采樣頻率fs不小于原始信號最大頻率fi的兩倍。
GSM是設(shè)計給“人”使用的,采樣頻率只要滿足人聲的需求就好,8KHz對低于1.1KHz的主音是足夠的,對高于1.1KHz的泛音就有點吃力了,這也是電話里的聲音不夠“保真”的原因之一。(人類的聽覺范圍是20Hz ~20KHz,而CD采樣頻率是44.1KHz,所以CD音質(zhì)對人而言已經(jīng)相當(dāng)保真,但放給電話那頭聽就不是那么回事了。)
再具體說一下量化。
前面提到,量化是把幅度劃分為多個區(qū)間,記錄采樣值落入的區(qū)間,并以代表值(離散值)替代采樣值(連續(xù)值)進行信號重建。量化不是什么新鮮概念,生活中也不時會用到。比如描述一個人的年齡,如果告訴你這個人二十幾歲,你就有了大致的印象,如果讓你猜多少歲,二十五總不會差太多。
每十年劃分成一個區(qū)間,大致描述了是少年、青年還是中年,不過有時這樣太粗放了。十一歲男生還會告同桌的狀,到十九歲都學(xué)會撩妹了,都用十幾歲來描述會丟失太多信息。把區(qū)間縮小為一年,就可以更準確的傳達年齡的信息。當(dāng)然,還可以縮小為一月或一天,但在大多數(shù)場合沒什么意義,區(qū)間大小取決于對精度的要求。(就好像我非要告訴你,這個人已經(jīng)二十七歲五個月十三天了,如果不是你提的要求我就會像個神經(jīng)?。?/span>
來看一個簡單的例子。先給輸入電平設(shè)定一個量化范圍,均勻劃分為8個區(qū)間,按電平高低編號為1~8,并對區(qū)間序號進行二進制編碼。取每個區(qū)間的中間值為量化電平,記為y1、y2… yk。采樣時刻記為t1、t2… tn,采樣電平記為s1、s2… sn。 我們來看幾個采樣電平的量化,s1、s7、s8分別落在序號4、6、8區(qū)間,輸出編碼為0112、1012和1112,接收方將編碼還原為區(qū)間序號,并以量化電平y(tǒng)4、y6、y8替代采樣電平s1、s7、s8進行信號重建。(具體實現(xiàn)中,量化和編碼往往是同時進行的,區(qū)間序號只是為了幫助大家理解,并不是必須的)
量化的本質(zhì)是一種映射。
用數(shù)學(xué)語言表達,量化是在量化范圍[-V, V]內(nèi),把連續(xù)幅度值的無限數(shù)集合{xk}映射成離散幅度值的有限數(shù)集合{yk}。量化器Q(x)的輸入是信號幅度x,輸出是L個量化值yk(k=1,2, … ,L)中的一個取值。當(dāng)x落在xk與xk 1之間時,輸出電平為yk。xk稱為分層電平或判決閾值,Δk=xk 1-xk稱為量化間隔,yk稱為量化電平或重建電平。
更進一步的,如果在量化范圍內(nèi)量化間隔Δk是相等的,則稱為均勻量化。還是以年齡為例,將“量化范圍”0~80歲分為L=8個“量化區(qū)間”,“量化間隔”Δk都為10歲,“分層電平”xk為0、10、20…... 80,“重建電平”yk為5、15、25…... 75。如果“輸入電平”x為27,則落入20~30區(qū)間,輸出“重建電平”為25,“量化誤差”為2。
顯然,示圖中的例子也是均勻量化。只看t1、t7、t8問題不大,但看t1~t6會發(fā)現(xiàn)采樣電平s1~s6均落入序號4的區(qū)間,輸出編碼均為0112,重建信號時t1~t6的曲線會變成一條直線,電平值均為量化電平y(tǒng)4,采樣電平s1~s6的差異被抹平。這個量化器不是很理想。
怎樣才是理想的量化器呢?
在發(fā)送方,量化電平Q(x)和輸入電平x之間總是存在量化誤差(量化誤差σq=輸入電平x-量化電平Q(x))。在接收方,量化誤差的影響表現(xiàn)為量化噪聲(σq平方的期望值),與輸入信號x的概率密度px(x)有關(guān)??偭炕肼暿遣贿^載噪聲和過載噪聲之和。(σs平方=σq平方 σqo平方)
在通信系統(tǒng)中,我們用信號噪聲比S/N來衡量信號的失真程度,在量化中N就是量化噪聲。顯然,N越小則S/N越大。在某種程度上,輸入信號功率S的大小是不可控的(不可預(yù)知的隨機信號),而輸出噪聲功率N的大小是可控的(可以努力控制的),很容易產(chǎn)生這樣的想法:令量化噪聲最小的就是最佳量化器。
換句話說:“最佳量化”是在給定輸入信號概率密度px(x)與量化電平數(shù)L的條件下,求出一組分層電平值{xk}與量化電平值{yk},使量化噪聲為最小值。推算可知:分層電平應(yīng)取在相鄰重建電平的中點;重建電平應(yīng)取在量化間隔的質(zhì)心上(px(x)為均勻分布時質(zhì)心就是相鄰分層電平的中點)。這和我們的直覺是一致的。 進一步推算可知,均勻量化器的不過載量化噪聲與px(x)無關(guān),只與量化間隔Δ有關(guān),如果給定量化范圍[-V, V],則只與量化電平數(shù)L有關(guān)。因而,要改善示例的均勻量化器,方法就是增加量化電平數(shù)L,即增加量化區(qū)間的數(shù)量,這和我們的直覺也是一致的。 均勻量化器很簡單,但應(yīng)用在語音信號上有一定的局限性。均勻量化器的量化噪聲和輸入信號概率密度(x)無關(guān),只有輸入信號是均勻分布時(如圖像信號),均勻量化器才是最佳量化器。可是語音信號并不是均勻分布的 —— 語音信號有兩個特點,一個是變動范圍大,嗓門、情緒或環(huán)境都會影響音量大小;另一個是以小信號為主,畢竟喜歡大呼小叫的人并不多。這些特點對信號噪聲比S/N有直接的影響。
語音信號的概率密度px(x)可近似的用拉普拉斯分布表示。假設(shè)語音信號功率為S,令D=√S/V,n為輸出編碼位數(shù)(即n=log2L),可推算出:當(dāng)D<0.2時,過載噪聲可忽略,[S/N]dB≈ 6.02n 4.77 20lgD;當(dāng)S很大時,過載噪聲起主要作用,[S/N]dB≈ 6.1/D。于是,我們得到了輸入為語音信號時均勻量化器的S/N特性。 可見,在不過載范圍內(nèi),S和N呈線性關(guān)系(輸出編碼數(shù)n每增加1位,S/N增益約為6.02dB);在過載范圍內(nèi),S/N明顯下降。注意,示圖中自變量為20lgD。
如果在期望S/N(例如25dB)位置水平的畫一條線,可以看出n不同取值時輸入信號功率的動態(tài)范圍大小。顯然,n取值越大(量化級數(shù)L越大)則動態(tài)范圍越大,相應(yīng)的帶寬需求也越大。(此前,動態(tài)范圍定義為不過載的電平輸入范圍,這里重新定義為滿足S/N大于期望值的功率輸入范圍,不僅限定了輸入信號功率的最大值,也限定了最小值)。
在PSTN中,由于發(fā)送方音量的差異,語音信號功率變動范圍接近30dB,又由于話機和終端機距離的差異(和GSM不同,PSTN數(shù)字化在終端機進行,話機和終端機之間傳送的是模擬信號),線路損耗變動范圍也接近30dB,因而,量化器的輸入信號功率變化范圍接近40~50dB(在這一點上GSM有優(yōu)勢,不需要考慮線路損耗)。
由均勻量化器的S/N特性可以推算,要滿足S/N大于25dB(長途話音質(zhì)量),且動態(tài)范圍達到40~50dB(對應(yīng)上述輸入信號功率變化范圍),n要不小于12。由采樣頻率為8KHz,n=12意味著編碼速率為96Kbps —— 這是一個相當(dāng)高的要求,要知道早期的貓(Modem)速率也不過28Kbps啊。
此外,均勻量化器在各個區(qū)間的量化噪聲N是相同的,S越大S/N就越大(換句話說,就是相同的量化誤差在不同區(qū)間對S/N的影響是不同的,這很好理解,同樣是相差1歲,5歲和6歲的差別,要遠遠大于75歲和76歲的差別)。可是,語音信號大部分都是小信號,系統(tǒng)主要受限于小信號的低S/N,大信號的高S/N并沒什么意義,怎樣可以使量化器的S/N平均一些呢?
我們來做一些“優(yōu)化”。在大信號段,信號功率大,對量化噪聲的容忍度就高,可以將量化間隔Δ加大;在小信號段,信號功率小,對量化噪聲的容忍度就低,可以將量化間隔Δ減小。這樣,就可以在不增加量化級數(shù)L的情況下改善小信號的S/N(犧牲大信號“多余”的S/N)。由于量化間隔Δ不再是相同的,均勻量化變成了非均勻量化。
非均勻量化怎么實現(xiàn)呢?
非均勻量化不直接對輸入信號進行量化,而是對輸入信號非線性變換后再進行均勻量化,間接實現(xiàn)非均勻量化。更具體的,量化器通過非線性變換函數(shù)z=f(x)將采樣電平x轉(zhuǎn)換為z,再對z進行均勻量化。當(dāng)然,接收方需要通過逆變換進行還原。我們希望f(x)對大信號進行壓縮,對小信號進行擴張,因而f(x)又稱為壓擴函數(shù)。
通過令取最小值的方法,可以推算出所謂“最佳壓擴特性”的f(x)和對應(yīng)S/N特性,不過得到的f(x)過于復(fù)雜,難以實現(xiàn)。同時,“最佳”f(x)總量化噪聲最小,但動態(tài)范圍不大,并沒有得到推廣應(yīng)用。為了同時滿足高S/N和大動態(tài)范圍,我們需要S/N特性曲線比較平坦的量化器。什么樣的f(x)可以滿足需求呢?
答案是對數(shù)型函數(shù)。令f(x)=(lnx)/B,可以推算出,在量化范圍[0, V]內(nèi)S/N是由量化級數(shù)L、量化范圍V和常數(shù)B決定的固定值,這樣就有條件同時保證S/N和動態(tài)范圍。對數(shù)型函數(shù)對小信號進行了擴張,對大信號進行壓縮,也符合我們的期望。 不過,還有兩個問題要解決。一個是f(x)=(lnx)/B要求x為正,只適用于量化范圍[0, V],要擴展到量化范圍[-V, V]并保持正負對稱,只能取x的絕對值進行量化,并在編碼增加一位作為極性碼(表示電平的正負);另一個是當(dāng)x小于1時,z轉(zhuǎn)為負值,當(dāng)x趨近于0時,z趨近于-∞,這種特性是無法實現(xiàn)的。
實際上,使用對數(shù)型函數(shù),主要是利用對大信號的壓縮特性,對小信號的擴張?zhí)匦裕梢杂闷渌瘮?shù)替代。更理想的特性,是當(dāng)x趨近于0時,z也趨近于0,這樣量化范圍[-V,0]和[0, V]可以同時映射在z軸上。按照這個思路,CCITT G.712建議提出了兩個改進方案:A律對數(shù)壓縮和μ律對數(shù)壓縮。(我國和歐洲采用的是A律,而美國和日本采用的是μ律,我們重點看A律就好啦)
更具體的,A律對數(shù)壓縮函數(shù)定義為:x在[0,1/A]區(qū)間,f(x) = Ax / (1 lnA);在[1/A,1]區(qū)間,f(x) = (1 lnAx)/ (1 lnA)。μ律對數(shù)壓縮函數(shù)定義為:x在[0,1]區(qū)間,f(x) = ln(1 μx) / ln(1 μ)。A和μ為壓擴參數(shù),表示壓擴程度。(注意,此處x為歸一化輸入,即x = |原始輸入xo| / V) 可以看到,A律壓縮將歸一化量化范圍[0,1](對應(yīng)原始量化范圍[0, V])分為兩段:[0,1/A]和[1/A,1],當(dāng)x取值為1/A時,lnAx正好為0,是對數(shù)型函數(shù)輸出正值和負值的分界點。在[1/A,1]范圍f(x)使用的依然是對數(shù)特性曲線,而在[0,1/A]范圍f(x)則用一條直線替代了原來的特性曲線。
早期A律壓縮和μ律壓縮是利用二極管的非線性實現(xiàn)的,壓擴特性的穩(wěn)定性和一致性無法保證。由于發(fā)送方和接收方的壓擴特性難以匹配,信號失真增大。在數(shù)字電路技術(shù)成熟后,CCITT建議采用折線近似A律(13折線)和μ律(15折線)壓擴特性,解決穩(wěn)定性和一致性問題。示圖中為13折線,和A=87.6時的A律壓擴特性曲線十分接近。 你可能會問,圖上不是只有8段折線嗎,哪來的“13折線”?是這么回事:在整個量化范圍內(nèi),A律壓縮函數(shù)為奇函數(shù)。如果將負值部分呈現(xiàn)出來,z軸-1到 1之間共劃分為16個段落(注意,段落并不是量化區(qū)間,只是段落內(nèi)壓擴特性相同),對應(yīng)16段折線??拷c的4段折線斜率相同,16段折線中只有12處斜率發(fā)生變化,因而稱為13折線。
我們來看一下效果。示圖可見,如果是理想A律壓擴(A=87.6),非均勻量化相對于均勻量化小信號S/N有所提升,大信號S/N有所下降,整體而言S/N特性相對平坦,動態(tài)范圍得以擴大。在小信號段,A律對數(shù)壓縮量化比均勻量化增加了24dB。 13折線的S/N特性和理想A律相比稍有差異。在小信號段,13折線和A律特性是相同的;在大信號段,每次斜率改變量化間隔Δ增加一倍,量化噪聲N隨之突增,而信號功率S平穩(wěn)增加,因而S/N會突然下降,再隨著信號功率增加而逐漸上升,于是S/N特性曲線出現(xiàn)了6個波谷(對應(yīng)6次斜率改變),但總體而言S/N特性是比較平坦的。
不過,采用非均勻量化是不得已的選擇,GSM采用的依然是均勻量化(不要打我)。GSM量化電平數(shù)L達到8192,原始編碼位數(shù)n=log28192=13。n為8我們都覺得編碼速率太大,n為13就更加無法接受了,必須在編碼上做些功夫。
最后具體說一下編碼。
經(jīng)過采樣和量化,發(fā)送方得到160個樣本和量化電平,完成“簡譜”的記錄。接著,發(fā)送方對區(qū)間序號(量化電平)進行編碼,將“簡譜”轉(zhuǎn)換為“二線譜”。到這里,“數(shù)字化”過程就完成了。這種通過采樣、量化、編碼形成的編碼稱為PCM編碼(Pulse Code Modulation,脈沖編碼調(diào)制。這里的“調(diào)制”和上一篇提到的概念相似,不過PCM調(diào)制的“載波”是脈沖而不是正弦波)。
最簡單的,是將區(qū)間序號轉(zhuǎn)換為二進制編碼。舉個例子,如果量化范圍[-V, V]劃分為16個區(qū)間,區(qū)間序號按電平大小編號為0~15,將0~15轉(zhuǎn)換為二進制,就得到對應(yīng)編碼:00002、00012、00102...… 11112。這種二進制碼組稱為NBC(Natural Binary Code,自然二進制碼組,簡稱自然碼)。 當(dāng)然,最簡單不一定最好。NBC容易理解和記憶,這是對人而言,對機器而言就不算什么優(yōu)點了。編碼本質(zhì)上也是一種映射,理論上可逆的編碼都是可行的。除了NBC,常見的編碼還有兩種:FBC(Folded Binary Code,折疊二進制碼組,簡稱折疊碼)和RBC(Reflected Binary Code,格雷二進制碼組,簡稱格雷碼)。
FBC第一位為極性碼,表示輸入電平是正值還是負值(量化器的輸出就是編碼器的輸入),1表示正,0表示負。其余位表示幅度絕對值,以零電平為中心正負對稱,即幅度絕對值相同的正負電平,除第一位外的編碼相同,就像對稱折疊一樣。比如,如果量化電平-3的編碼是00112,那么量化電平 3的編碼就是10112,只有極性碼不同。
RBC既看不出極性也看不出幅度,規(guī)律是相鄰區(qū)間(或說相鄰量化電平,量化器輸出的是量化電平,而不是區(qū)間序號)的編碼之間只有一位是不同的:比如,區(qū)間03、04編碼是00102和01102,只有第二位不同;區(qū)間04、05編碼是01102和01112,只有第四位不同。(在后續(xù)射頻調(diào)制中會看到RBC的應(yīng)用場景)
這么多個“C”,選哪個好呢?
在位數(shù)(效率)相同時,選信號失真最小的那個。量化在發(fā)送方進行,重建在接收方進行,但量化電平不是“嗖”的一下傳過去的 —— 發(fā)送方要編碼,接收方要解碼,中間還要通過信道傳送碼流。在計算失真時,不僅要考慮量化誤差,還要考慮信道誤碼的影響(假定量化噪聲和誤碼噪聲統(tǒng)計相互獨立,則總噪聲是量化噪聲和誤碼噪聲的疊加)。
舉個例子。如果給你介紹個27歲(輸入電平)的妹子,但限于信道條件(量化級數(shù))只能告訴你25歲(量化電平)左右,如果不考慮信道誤碼,你收到的信息就是妹子25歲(重建電平),信息偏差(量化誤差)不會大于5歲(量化間隔的一半)。
由于不好公開談?wù)撁米幽挲g,我們約定用3位編碼表示8個年齡段,即0002表示5歲左右,0012表示15歲左右...... 1112表示75歲左右(假定你不顧世俗的目光)。我發(fā)送0102給你,表示妹子25歲左右。如果沒有誤碼,你收到的也是0102,則偏差依然是2歲,即只受量化誤差影響。
如果出現(xiàn)誤碼,你收到的可能另外7個編碼中的一個,但是哪一個概率是不同的,只有1位出錯的可能性遠高于3位都出錯。如果只考慮1位誤碼,則0102可能會變成1102、0002、0112,分別對應(yīng)65歲、5歲和35歲,偏差分別是38歲、22歲和8歲,你不一定會拒絕妹子,但一定會覺得通信系統(tǒng)太不靠譜了。
可見,信道誤碼產(chǎn)生的失真遠比量化誤差嚴重。優(yōu)化量化器只能減小量化誤差,對信道誤碼則無能為力。要降低信道誤碼的影響,關(guān)鍵當(dāng)然是減少誤碼率,這是下一篇的關(guān)注點(信道編碼),這里還是重點分析信源編碼—— 如何選擇編碼可以減少失真?
先來算個簡單的。
假定均勻量化器的量化級數(shù)為L,量化間隔為Δ,編碼位數(shù)為k=log2L。yi和yj分別表示第i級和第j級量化電平,Pi是量化電平y(tǒng)i的出現(xiàn)概率,Pj/i是誤判為的概率。yi誤判yj為的噪聲功率為(yi-yj)平方,量化電平為yi且誤判為yj的發(fā)生概率為PiPj/i,可得到誤碼噪聲計算公式。 假設(shè)輸入信號為均勻分布,每個量化電平的出現(xiàn)概率相同,即Pi=1/L;假設(shè)信道誤碼率Pe很低,n位編碼中只有1位出現(xiàn)誤碼,則量化電平y(tǒng)i只有k種誤判(為不同的yj)情況,發(fā)生概率為Pj/i≈ Pe。假定編碼使用NBC。當(dāng)?shù)趉位為誤碼時,產(chǎn)生的差值(yi-yj)為2的(k-1)次冪乘以Δ,如k=4,則差值(yi-yj)為8Δ。此時可推算出誤碼噪聲、量化噪聲、總噪聲功率和總信號噪聲比。
把推算結(jié)果(黃色公式)的分母簡化一下,令Pe=1/4(LxL-1),則S/N=LxL/2,即誤碼令S/N下降了3dB(僅考慮量化噪聲時,信號噪聲比S/N=LxL)。反過來推算,如果L=256,則可令S/N下降3dB的誤碼率Pe=3.8e-6。如果Pe繼續(xù)增大,則誤碼會成為失真的主要因素。
以上結(jié)論是在均勻量化、輸入信號為均勻分布、編碼為NBC的條件下得到的,在非均勻量化、輸入信號為非均勻分布、編碼為FBC的條件下怎么計算…… 教材上沒有講,我也不會,大家領(lǐng)會精神就好。 這里給出A律對數(shù)量化(A=87.6、L=256)、輸入信號為拉普拉斯分布、誤碼率Pe=10e-5的條件下,NBC和FBC的S/N特性曲線??梢娫谛⌒盘柖?,F(xiàn)BC的S/N要高于NBC,因而在PCM系統(tǒng)中選用FBC而不是NBC。(當(dāng)Pe=0時,采用NBC還是FBC對S/N就沒啥影響了,特性曲線合并成一條曲線,即灰色部分) 所以,A律對數(shù)量化(13折線近似)的8位PCM編碼是這樣的:8位劃分為1位極性碼、3位段落碼和4位段內(nèi)碼。如果信號為正值,則極性碼為1,如果信號為負值,則極性碼為0。3位段落碼對應(yīng)z軸(絕對值)均勻劃分的8個段落(段落內(nèi)斜率相同,即壓擴特性相同),沿z軸由小到大分別取0002~1112。4位段內(nèi)碼對應(yīng)段落內(nèi)均勻劃分的16個區(qū)間,沿z軸(絕對值)由小到大分別取00002~11112。
如果編碼位數(shù)為8,采樣頻率為8KHz,則PCM編碼速率為64Kbps。64Kbps放在PSTN都嫌大,放在GSM空中接口就更不行了,何況GSM采用13位均勻量化,原始編碼速率達到104Kbps —— GSM需要更高效的編碼方案,用更短的編碼來表示相同的信息。
為啥PCM編碼效率不高呢?
因為PCM是“笨小孩”。不知道大家是否見過這種情形,小孩大聲數(shù)數(shù),家長一臉慈愛,完全不顧對旁人的影響。最痛苦的是上百以后,小孩依然不厭其煩的數(shù):一百二十一、一百二十二、一百二十三…… 如果拋開數(shù)數(shù)的本意,僅從傳遞信息的角度來看,這樣數(shù)很嚴謹,但效率不高。高效點的數(shù)法,是把“一百”省去,前提是接收方能理解并補回。更激進一點,是說“加一、加一……”,接收方知道前一個數(shù),就可以推算出下一個數(shù)。
我們把上述思路借鑒到編碼中來。PCM就像第一個小孩,對每個樣本都進行編碼。實際上,短時間內(nèi)的語音信號樣本具有很強的相關(guān)性(可近似看成平穩(wěn)過程),利用這個特點可以降低編碼速率,DPCM(差分編碼調(diào)制)和ΔM(增量調(diào)制)是這種思路的典型實現(xiàn)。
DPCM,即差分編碼調(diào)制,差分就是只傳送差值信息。發(fā)送方輸入信號為S(k),接收方重建信號為Sr(k)(輸入和輸出均是樣本,因而是離散序列)。和PCM不同的是,量化器的輸入不是S(k),而是S(k)和預(yù)測信號Se(k)的差值d(k)。差值d(k)經(jīng)過量化、編碼、傳送和解碼后重建為dq(k)。由于傳送的是差值信息,可以達到節(jié)省帶寬的目的。 這個圖看著容易犯暈,關(guān)鍵是理解預(yù)測器的輸入和輸出。預(yù)測器的輸入是此前N個樣本點,輸出是N個樣本點的線性疊加,如序號k樣本的預(yù)測信號Se(k),就是序號k-1、k-2… k-N樣本的線性疊加,這可以通過延遲電路實現(xiàn)。發(fā)送方和接收方的預(yù)測(桃紅色)和相加(黃色)是完全相同的。由此,重建信號Sr(k)=預(yù)測信號Se(k) 差值dq(k),總的量化誤差e(k)=d(k)-dq(k),即不考慮誤碼時,量化誤差只取決于差值的量化。 在DPCM的基礎(chǔ)上,如果量化器和預(yù)測器能根據(jù)輸入信號的統(tǒng)計特性自適應(yīng)于最佳狀態(tài),則稱為ADPCM(即自適應(yīng)的DPCM),這里只關(guān)注利用“差分”節(jié)省帶寬的思路,就不具體展開了。
ΔM可以看作一種特殊的DPCM:把預(yù)測函數(shù)修改為只取前一個樣本(N=1),量化器簡化為只判決差值正負(只有兩個量化區(qū)間),DPCM就變成了ΔM。ΔM編碼只要1位,對帶寬要求更低。簡單的說,ΔM就是發(fā)送方將輸入樣本和前一個樣本進行比較,如果比前一個大,輸出電平為 Δ,編碼C(n)=1,如果比前一個小,輸出電平為-Δ,編碼C(n)=0。接收方根據(jù)編碼重建。 ΔM具體實現(xiàn)可將量化器和編碼器合并為判決器,并用脈沖發(fā)生器和積分器替代解碼器,電路十分簡單(可直接輸入模擬信號)。ΔM信噪比與信號頻率的平方成反比,語音高頻段的信噪比下降較快,在ΔM的基礎(chǔ)上又發(fā)展出Δ∑(增量總和調(diào)制)。Δ∑對輸入信號先進行積分,降低高頻成分幅度,再進行ΔM調(diào)制,接收方進行微分補償。如果積分器和微分器是互補的則接收方可都省去,電路進一步簡化。 再狠一些,就要脫離“波形編碼”的思路了,根據(jù)語音信號的數(shù)學(xué)模型,直接提取語音信號的特征參量進行編碼,這種編碼方式稱為“參量編碼”。參量編碼速率比波形編碼低,但重建信號和原始信號波形差別很大,只能達到“可懂”的程度。LPC(線性預(yù)測編碼)就是一種常見的參量編碼。
GSM采用的是RPE-LTP(規(guī)則脈沖激勵長期預(yù)測)編碼,這是一種結(jié)合了波形編碼和參量編碼特點的混合編碼,兼具波形編碼高保真和參量編碼速率低的優(yōu)點。GSM中20毫秒語音信號經(jīng)RPE-LTP編碼后共輸出260位,最終編碼速率為13Kbps。篇幅所限,這里就不展開講述RPE-LTP編碼了,有機會再補充吧。
小結(jié)一下。
GSM的目標,是把通話一方的聲音傳送到另一方,反向亦然。在GSM看來,從語音信號轉(zhuǎn)換為數(shù)字信號和從數(shù)字信號恢復(fù)為語音信號都是終端的事,網(wǎng)絡(luò)主要負責(zé)傳送數(shù)字信號。終端將語音信號分段,轉(zhuǎn)換為數(shù)字信號再交給網(wǎng)絡(luò)傳送,這個過程稱為信源編碼,或通俗的稱為語音信號的“數(shù)字化”。
語音信號的時間和幅度都是連續(xù)的,取值具有無限多可能性,要轉(zhuǎn)換為有限長度的編碼必須先離散化。在時間上的離散化稱為采樣,在幅度上的離散化稱為量化。通過采樣、量化、編碼獲得數(shù)字信號的方式稱為PCM編碼。PCM編碼是一種波形編碼,語音還原度高但編碼效率低,可通過DPCM、ΔM、Δ∑調(diào)制等差分編碼方式提高編碼效率。
和PSTN、VoLTE相同,GSM將語音每20毫秒分成一段。GSM的采樣頻率為8KHz,采用13位的均勻量化,原始編碼速率為104Kbps。GSM采用RPE-LTP編碼,是一種結(jié)合了波形編碼和參量編碼特點的混合編碼。GSM中20毫秒語音信號經(jīng)RPE-LTP編碼后共輸出260位,最終編碼速率為13Kbps,壓縮比為8:1。
本文僅代表個人觀點,如有錯誤之處,請在回復(fù)中指出。謝謝! |
|