電子百科
語音編碼器方法歸納起來可以分成三大類:波形編碼、信源編碼、混合編碼。
1.波形編碼
波形編碼比較簡單,編碼前采樣定理對模擬語音信號進(jìn)行量化,然后進(jìn)行幅度量化,再進(jìn)行二進(jìn)制編碼。解碼器作數(shù)/模變換后再由低通濾波器恢復(fù)出現(xiàn)原始的模擬語音波形,這就是最簡單的脈沖編碼調(diào)制(PCM),也稱為線性PCM??梢酝ㄟ^非線性量化,前后樣值的差分、自適應(yīng)預(yù)測等方法實(shí)現(xiàn)數(shù)據(jù)壓縮。波形編碼的目標(biāo)是讓解碼器恢復(fù)出的模擬信號在波形上盡量與編碼前原始波形相一致,也即失真要最小。波形編碼的方法簡單,數(shù)碼率較高,在64kbit/s至32kbit/s之間音質(zhì)優(yōu)良,當(dāng)數(shù)碼率低于32kbit/s的時(shí)候音質(zhì)明顯降低,16 kbit/s時(shí)音質(zhì)非常差。
2.信源編碼
信源編碼又稱為聲碼器,是根據(jù)人的發(fā)生機(jī)理,在編碼端對語音信號進(jìn)行分析,分解成有聲音和無聲音兩部分。聲碼器每隔一定時(shí)間分析一次語音,傳送一次分析的的道德有/無聲和濾波參數(shù)。在解碼端根據(jù)接收的參數(shù)再合成聲音。聲碼器編碼后的碼率可以做得很低,如1.2kbit/s、2.4kbit/s,但是也有其缺點(diǎn)。首先是合成語音質(zhì)量較差,往往清晰度可以而自然度沒有,難于辨認(rèn)說話人是誰,其次是復(fù)雜度比較高。
3.混合編碼
混合編碼是將波形編碼和聲碼器的原理結(jié)合起來,數(shù)碼率約在4kbit/s—16kbit/s之間,音質(zhì)比較好,最近有個(gè)別算法所取得的音質(zhì)可與波形編碼相當(dāng),復(fù)雜程度介乎與波形編碼器和聲碼器之間。
上述的三大語音編碼方案還可以分成許多不同的編碼方案。
語音編碼屬性可以分為四類,分別是比特速率,時(shí)延、復(fù)雜性和質(zhì)量。比特律是語音編碼很重要的一方面。比特速率的范圍可以是從保密的電話通信的2.4kbit/s到64kbit/s的G.711PCM編碼和G.722寬帶(7KHz)語音編碼器。
在語音編碼領(lǐng)域中,隨著傳輸、處理、存儲(chǔ)等各種信息量的巨增,信息的壓縮處理已成為迫切的要求,基于新的網(wǎng)絡(luò)和新的要求,無論是從節(jié)省傳輸頻帶資源,還是保持線路通信的高效率等方面來看,研究采用各種可變速率語音編碼技術(shù)的系統(tǒng)都有重要意義。目前為了適應(yīng)此需要提出了AMR(adaptivemulti-rate)概念,即自適應(yīng)話音編碼器。基于帶寬的考慮可分為AMR- NB(AMRNarrowband)和AMR-WB(AMRwideband)。對于AMR-NB,語音通道帶寬限制為3.7 MHz,采樣頻率為8 kHz,而AMR-WB為7 MHz的帶寬,采樣頻率為16 kHz,但考慮語音的短時(shí)相關(guān)性,每幀長度均為20 ms。這2種編碼器根據(jù)帶寬的要求雖然選用了不同的速率,但有異曲同工之處,以下著重介紹在TD-SCDMA中AMR-NB的實(shí)現(xiàn)。此編碼器運(yùn)用了代數(shù)碼本線性預(yù)測(ACELP)混合編碼方式,也就是數(shù)字語音信號中既包括若干語音特征參數(shù)又包括部分波形編碼信息,再運(yùn)用這些特征信息重新合成語音信號的過程??刂七@些參數(shù)的提取數(shù)目,根據(jù)速率要求對信息進(jìn)行取舍而得到了以下8種速率,混合組成如表1所示的自適應(yīng)語音編碼器。表1中模式AMR-12.20就提取出244比特的參數(shù)信息,而模式AMR-4.70卻只提取了95比特信息。根據(jù)這些比特所含的信息量可以將其分為3類比特class 0,1,2。在信道編碼時(shí)class0和1都將會(huì)使用循環(huán)冗余校驗(yàn)碼進(jìn)行差錯(cuò)檢驗(yàn),對于class 2則根據(jù)上一幀進(jìn)行恢復(fù)。
語音編碼或語音壓縮編碼研究的基本問題,就是在給定編碼速率的條件下,如何能得到盡量好的重建語音質(zhì)量。主觀評定方法符合人類聽話時(shí)對語音質(zhì)量的感覺得到了廣泛應(yīng)用。常用的方法有平均得分意見(mean opinion score,簡稱MOS)判定法,表2說明了AMR話音編碼器各模式的話音質(zhì)量。
1 AMR模式選擇的自適應(yīng)機(jī)制
自適應(yīng)的基本概念是以更加智能的方式解決信源和信道編碼的速率分配問題,使得無線資源的配置和利用更加靈活和高效。實(shí)際的語音編碼速率取決于信道的條件,它是信道質(zhì)量的函數(shù)。而這部分的工作是解碼器根據(jù)噪聲等測量參數(shù)協(xié)助基站來完成的,選擇模式,決定速率快慢。原則上在信道很差的時(shí)候采用速率比較低的編碼器,這樣就能分配給信道編碼更多的比特?cái)?shù)來實(shí)現(xiàn)糾錯(cuò),實(shí)現(xiàn)更可靠的差錯(cuò)控制,從而有效地抑制錯(cuò)誤發(fā)生,提高話音質(zhì)量[1]。
在TD-SCDMA系統(tǒng)實(shí)現(xiàn)方面為了便于量化比較而采用了C/I(載干比)這一概念,取其滑動(dòng)平均值,再將此值與一預(yù)先定義好的門限值進(jìn)行比較,來決定速率的選擇。由于不同的特性,全速率信道和半速率信道就應(yīng)有不同的定義值。在全速率信道,當(dāng)C/I≥13時(shí),MR122的MOS值可以達(dá)到4以上,可以提供很好的性能;9≤C/I<13時(shí),MR122、MR102、MR795都是可以選擇的,速率越低,誤幀率越低;當(dāng)6≤C/I<9時(shí),最好選擇MR74、 MR67、MR59;而當(dāng)C/I<6時(shí)就應(yīng)盡量選擇越低的速率,隨著信道質(zhì)量的下降,誤幀率都會(huì)增加,但相對選擇的速率低,就能提供相對較好的話音質(zhì)量。對于半速率信道,與上述類似,不再累述。下面進(jìn)一步說明自適應(yīng)速率選擇的實(shí)現(xiàn)過程。圖1是完整的說明圖。自適應(yīng)要求有2類信息需要傳輸:在下行信道上,需要基站發(fā)送給移動(dòng)臺1模式選擇測量命令,而在上行信道上,移動(dòng)臺將信道測量信息傳送給基站。這種模式要求傳送信息準(zhǔn)確、可靠、及時(shí),才能有效達(dá)到自適應(yīng)的目的?;久繋l(fā)送1測量命令,得到返回信息,通過比較選擇,選擇1模式用于下一幀。這樣就可以實(shí)現(xiàn)速率間的轉(zhuǎn)換,達(dá)到自適應(yīng)的目的,在速率間的切換會(huì)有一定功率損耗,并且不同速率間的損 耗是不同的,這是在實(shí)現(xiàn)過程中應(yīng)該考慮的[2,3]。
2 AMR編碼器算法
AMR編碼器算法是基于代數(shù)碼本線性預(yù)測(ACELP)的混合編碼算法[4,5]。基本原理是原始語音按幀輸入,根據(jù)使合成語音與原始語音的加權(quán)均方誤差最小的準(zhǔn)則,從隨機(jī)碼本和固定碼本中挑選合適的碼矢以代替殘差信號,并將碼矢地址和增益及各濾波器的參數(shù)量化編碼后傳送到接收端;接收端恢復(fù)各濾波器時(shí),采用與發(fā)送端相同的碼本,按照碼矢地址找到該碼矢乘上增益,激勵(lì)合成濾波器,得到合成語音。在編碼部分需要抽取下列典型參數(shù):線性預(yù)測濾波器系數(shù)(LP),自適應(yīng)碼本(ACB)和固定碼本(FCB)索引以及2種碼本的增益( 見圖2)。下面將分別從編碼和解碼 的角度闡述AMR編解碼方案。
?。?)線性預(yù)測計(jì)算。LPC濾波器表征語音信號發(fā)生模型中的聲道模型,圖2中其中,A(z)為聲道傳輸函數(shù),ai隨語音幀的變化不斷改變(ai具有短時(shí)穩(wěn)定性)。因此,在每個(gè)語音幀中,需要提取LPC系數(shù)。按其預(yù)測值與實(shí)際值最小 化均方誤差原則,可得下式:
上述正則方程[6]采用Durbin算法進(jìn)行線性預(yù)測便可得到參數(shù)ak??紤]到線譜頻率(LSF)誤差的相對獨(dú)立性及有序有界性質(zhì),與線性預(yù)測參數(shù)(LP)是一一對應(yīng)的,采用Chebyshev多項(xiàng)式估計(jì)方法是可以相互轉(zhuǎn)換的,因此在考慮傳輸時(shí)用LSF參數(shù)代替LP參數(shù),將其進(jìn)行矢量量化,在解碼部分再對LP進(jìn)行恢復(fù)。在12.2 kbit/s模式下采用分裂矩陣(SMQ)的方式進(jìn)行矢量量化,在其它模式下采用分裂矢量(SVQ)的方式進(jìn)行矢量量化。由于在12.2kbit/s中,每一幀需要進(jìn)行2次線性預(yù)測編碼(LPC)分析,所以會(huì)得到2組LSF系數(shù)。AMR在TD-SCDMA系統(tǒng)的具體實(shí)現(xiàn)過程中將這2組系數(shù)進(jìn)行聯(lián)合量化。也就是將矩陣(r(1),r(2))分為5個(gè)2×2的子陣,分別進(jìn)行矢量量化,維數(shù)為4,碼本容量分別為128(子陣1),64(子陣5),256(子陣 2,3,4),失真 測度選擇計(jì)算量最小也有主觀評價(jià)意義的歐式距離,在碼本搜索過程中采用了全搜索算法。同樣,對于其它的編碼速率,有相同的思路和操作步驟,最大的差別就是對LSF矢量的子陣劃分,它們的劃分方法是采用維數(shù)為3,3和4的3個(gè)子陣(子矢量)。
?。?)碼本搜索[4]。TD- SCDMA系統(tǒng)中,AMR自適應(yīng)碼本搜索和代數(shù)碼本搜索是語音合成的關(guān)鍵,它們都是在子幀的基礎(chǔ)上完成的,其中,每個(gè)子幀長為5 ms,對應(yīng)4個(gè)樣點(diǎn)。自適應(yīng)碼本表征語音信號發(fā)生模型中的周期性結(jié)構(gòu),自適應(yīng)碼本搜索通過一個(gè)長時(shí)預(yù)測濾波器(LTP),去除信號中存在的長時(shí)相關(guān),使殘差信號頻譜更加平坦,以便于形成白噪聲激勵(lì)信號,同時(shí)提取基音延遲和對應(yīng)的基音增益。再經(jīng)過基音開環(huán)和閉環(huán)分析得到分?jǐn)?shù)基音延遲決定后,自適應(yīng)碼本矢量v (n)通過在最佳的整數(shù)延遲kopt和相位(分?jǐn)?shù)延遲)t處內(nèi)插就得到
代數(shù)碼本表示語音信號發(fā)生模型中的隨機(jī)信號,根據(jù)感覺加權(quán)均方誤差最小的原則,最終獲得[2]。代數(shù)碼本結(jié)構(gòu)是基于交織單脈沖序列(ISPP)的,其脈沖幅度和位置的取值都要受到一定的限制以滿足一定的代數(shù)結(jié)構(gòu)和比特分配要求,對于不同速率,脈沖位置和個(gè)數(shù)都選擇不同。而且在系統(tǒng)中,碼本設(shè)計(jì)上改進(jìn)了以前的高斯隨機(jī)碼本結(jié)構(gòu),構(gòu)造了中心削波的重疊碼本。經(jīng)稀疏后,碼本中就會(huì)產(chǎn)生90%的零值。這樣是可以簡化搜索過程的。通過最大化下式可?量,d=Htx2表示目標(biāo)信號x2(n)和沖激響應(yīng)h′w(n)之間的相關(guān)性。在得到以上參數(shù)后,AMR中系統(tǒng)總共設(shè)計(jì)了3種量化器。AMR-12.2代數(shù)碼本增益的量化是采用6比特標(biāo)量量化器,AMR -4.75是將自適應(yīng)碼本增益和代數(shù)碼本增益進(jìn)行聯(lián)合量化,而對于其他速率則是按原始語音與合成語音的加權(quán)誤差最小找出目標(biāo)矢量。由于考慮多速率的公用,所以碼本容量較大,這與其他編碼器是不同的。
?。?)AMR解碼原理。解碼器分為3大部分:譯碼部分、語音合成和后濾波。在解碼器輸入端,從接收的比特流中獲得LSP矢量、自適應(yīng)碼本和代數(shù)碼本參數(shù)(索引和增益)等。LSP線譜對參數(shù)還需要轉(zhuǎn)化為線性預(yù)測濾波器系數(shù),再根據(jù)LP系數(shù)內(nèi)插得到各子幀的合成濾波器系數(shù)。激勵(lì)矢量由自適應(yīng)碼本和代數(shù)碼本經(jīng)各自的增益加權(quán)后獲得,將激勵(lì)矢量輸入合成濾波器得到重建的語音信號。最后,重建的語音信號還需要經(jīng)過后濾波處理。ACELP編碼器編碼的語音可看成是包含了高斯噪聲的原始語音。使用后濾波可以減少合成語音中包含的噪聲信號,從而有效地提高合成語音的語音質(zhì)量。后處理包括兩部分功能:自適應(yīng)后濾波和信號放大。自適應(yīng)增益控制用于補(bǔ)償合成語音和經(jīng)過后濾波的合成語音之間的失真。將信號通過以下濾波器,就可得到修正的后濾波合成語音。
3 結(jié)束語
AMR的提出能提供高質(zhì)量的語音,增強(qiáng)抗信道誤差的能力,通過低編碼速率靈活配置提高了系統(tǒng)容量,編碼速率根據(jù)無線環(huán)境和本地容量需求動(dòng)態(tài)選擇不同模式。筆者圍繞AMR語音編碼算法進(jìn)行分析和研究。該算法已在TI公司的TMS320 C5510DSP上采用定點(diǎn)C語音和匯編語言的混合編程實(shí)現(xiàn),并用于TD-SCDMA系統(tǒng)中,運(yùn)算量能降低到20 MIPS左右,通過在TD-SCDMA系統(tǒng)的硬件平臺上自環(huán)測試,可得到良好的通話語音質(zhì)量,結(jié)果是很理想的。
隨著數(shù)字信號處理技術(shù)的發(fā)展,越來越多的應(yīng)用于各行各業(yè)。但是,以往多數(shù)的DSP系統(tǒng)是基于流程圖的設(shè)計(jì)方法,該方法設(shè)計(jì)的程序穩(wěn)定性不高,流程中任意一個(gè)環(huán)節(jié)出錯(cuò)都將導(dǎo)致系統(tǒng)崩潰甚至死機(jī)。使用RTOS將對系統(tǒng)的穩(wěn)定性有很大的改善。使應(yīng)用模塊化,可極大提高程序的可讀性、可擴(kuò)展性和可移植性。
TI公司的定點(diǎn)DSP處理芯片TMS320C54X是目前應(yīng)用比較廣泛的一種DSP芯片,具有功耗低、運(yùn)行速度快等優(yōu)點(diǎn),適合低速率語音編碼的應(yīng)用。
uC/OS-II是一種免費(fèi)應(yīng)且源代碼公開的實(shí)時(shí)內(nèi)核,經(jīng)過多年的實(shí)際應(yīng)用,顯示出強(qiáng)大的功能和巨大的商業(yè)價(jià)值。本文實(shí)現(xiàn)了uC/OS-II在TMS320C54X上的移植,并提出了在uC/OS-II的平臺上的低速率語音編碼器的系統(tǒng)設(shè)計(jì)方案。
uC/OS-II在TMS320C54X上的移植
要實(shí)現(xiàn)uC/OS-II的移植,主要改寫以下三個(gè)文件
OS[_]CPU.H文件
包括定義數(shù)據(jù)類型、代碼值界區(qū)的中斷控制、堆棧增長方向變量、任務(wù)切換函數(shù)定義和變量聲明。TMS320C54X中的堆棧數(shù)據(jù)類型為16位,定義為:
typedef unsigned int OS[_]STK
在TMS320C54X中所有的堆棧都必須用OS[_]STK聲明。
RTOS在進(jìn)入系統(tǒng)臨界區(qū)之前必須關(guān)閉中斷,退出臨界區(qū)后再打開中斷。uC/OS-II定義了兩個(gè)宏來關(guān)閉/打開中斷:OS[_]ENTER[_]CRITICAL()和OS[_]EXIT[_]CRITICAL()。
用OS[_]STK[_]GROWTH來設(shè)置,OS[_]STK[_]GROWTH為0表示堆棧從低地址向高地址遞增;OS[_]STK[_]GROWTH為1表示堆棧從高向低地址遞減,TMS320C54X中,堆棧地址是由高向低遞減的。
在uC/OS-II中,OS[_]TASK[_]SW()用來實(shí)現(xiàn)任務(wù)切換。OS[_]TASK[_]SW()函數(shù)模擬一次中斷過程,在中斷返回時(shí)進(jìn)行任務(wù)切換。
另外,還聲明了一個(gè)8位變量,用來調(diào)用DOS的時(shí)鐘節(jié)拍函數(shù),在TMS320C54X中應(yīng)該屏蔽掉。
OS[_]CPU[_]A.ASM文件
在此文件中,需改寫函數(shù):OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()。
OSStartHighRdy(0)函數(shù)由Sstart()函數(shù)調(diào)用,功能是運(yùn)行優(yōu)先級最高的就緒任務(wù)。其過程為:獲得優(yōu)先級最高任務(wù)的TCB地址→設(shè)置堆棧指針→恢復(fù)任務(wù)環(huán)境→中斷返回→運(yùn)行新任務(wù)。在TMS320C54X中實(shí)現(xiàn)如程序列表1,其中,CONTEXT[_]RESTORE是將C54X中的寄存器出棧的宏定義,在此不再詳述。
OSCtxSw()函數(shù)是一個(gè)任務(wù)級的任務(wù)切換函數(shù)。軟中斷向量指向此函數(shù)。在uC/OS-II中,如果任務(wù)調(diào)用了某個(gè)函數(shù),而該函數(shù)的執(zhí)行結(jié)果可能造成系統(tǒng)任務(wù)的重新調(diào)度,則在函數(shù)的末尾會(huì)調(diào)用OSSched()。OSSched()查找當(dāng)前就緒最高優(yōu)先級任務(wù),如果不是當(dāng)前任務(wù),則找到該任務(wù)TCB的地址,并拷貝到變量OSTCBHighRdy中,然后通過宏OS[_]TASK[_]SW()執(zhí)行軟中斷調(diào)用OSCtxSw()進(jìn)行任務(wù)切換。變量OSTCBCur始終包含指向當(dāng)前運(yùn)行任務(wù)TCB的指針。在TMS320C54X中實(shí)現(xiàn)如程序列表2。
OSIntCtxSw()函數(shù)與OSCtxSw()函數(shù)類似,不同的是,OSIntCtxSw()函數(shù)進(jìn)行中斷級任務(wù)切換。中斷可能引起任務(wù)切換,在中斷服務(wù)程序的最后會(huì)調(diào)用OSIntExit()函數(shù)檢查任務(wù)就緒狀態(tài),如果需要進(jìn)行任務(wù)切換,則調(diào)用OSIntCtxSw()。值得注意的是,產(chǎn)生中斷后,CPU寄存器會(huì)自動(dòng)被保存,所以,在此函數(shù)中不再進(jìn)行環(huán)境保存。在TMS320C54X中實(shí)現(xiàn)如程序列表3。
OS[_]CPU[_]C.C文件
在此文件中,只需修改OSTaskStkInit()函數(shù)。OSTaskStkInit()由任務(wù)創(chuàng)建函數(shù)OSTaskCreate()或OSTaskCreateExt()調(diào)用,用來初始化任務(wù)的堆棧。OSTaskStkInit()與調(diào)用它的函數(shù)有三個(gè)參數(shù)進(jìn)行傳遞:任務(wù)代碼起始地址(task),參數(shù)指針(pdata),任務(wù)堆棧頂?shù)刂?ptos)。為提高代碼效率,此函數(shù)用匯編語言改寫,在TMS320C54X中實(shí)現(xiàn)如程序列表4。(程序列表1~4,均見本刊網(wǎng)站 http://www.eaw.com.cn)
基于uC/OS-II的低速率語音編碼器系統(tǒng)設(shè)計(jì)
本系統(tǒng)中,低速率語音編碼器的功能有語音編碼、語音解碼、回波抵消、模擬接口、數(shù)字接口等。另外,為提高系統(tǒng)的穩(wěn)定性,增加了空閑任務(wù)和監(jiān)視任務(wù)。系統(tǒng)結(jié)構(gòu)如圖1所示。
系統(tǒng)由里向外分為三層:操作系統(tǒng)層、任務(wù)層、硬件層。
硬件層設(shè)計(jì)
硬件層設(shè)計(jì)主要包括串口和HPI口,用于接收(發(fā)送)語音信號和信道上的數(shù)據(jù)。
任務(wù)層設(shè)計(jì)
本系統(tǒng)中共有七個(gè)任務(wù),其優(yōu)先級從高到低依次為:監(jiān)控任務(wù)、模擬接口任務(wù)、數(shù)字接口任務(wù)、回波抵消任務(wù)、編碼任務(wù)、解碼任務(wù)、Idle任務(wù)。各任務(wù)的狀態(tài)有4種,即等待態(tài)和掛起態(tài)、就緒態(tài)、運(yùn)行態(tài)以及中斷態(tài),狀態(tài)的轉(zhuǎn)換關(guān)系如圖2所示。
監(jiān)視任務(wù)設(shè)計(jì)思路為:被監(jiān)視任務(wù)正常運(yùn)行時(shí)其執(zhí)行時(shí)間是可預(yù)估的,被監(jiān)視任務(wù)在其即將運(yùn)行完畢時(shí)向監(jiān)視任務(wù)發(fā)送消息說明自身運(yùn)行正常。被監(jiān)視任務(wù)運(yùn)行時(shí),監(jiān)視任務(wù)處于等待態(tài),等待被監(jiān)視任務(wù)給它發(fā)送消息,等待時(shí)間被設(shè)定為預(yù)計(jì)的任務(wù)正常運(yùn)行所需的最大時(shí)間。若等待時(shí)間內(nèi)監(jiān)視任務(wù)收到消息,則認(rèn)為發(fā)送消息的任務(wù)運(yùn)行正常,依照各任務(wù)執(zhí)行順序的先后下一任務(wù)開始運(yùn)行,監(jiān)視任務(wù)等待下一任務(wù)發(fā)送的消息。若等待時(shí)間已過,監(jiān)視任務(wù)仍未收到消息,則系統(tǒng)的時(shí)間管理函數(shù)將強(qiáng)行把監(jiān)視任務(wù)視為就緒態(tài)。因監(jiān)視任務(wù)的優(yōu)先權(quán)是最高的,它將搶占對CPU的控制權(quán)并采取相應(yīng)的糾錯(cuò)方案。
操作系統(tǒng)層設(shè)計(jì)
在應(yīng)用中,各個(gè)任務(wù)之間都有數(shù)據(jù)要交換,本設(shè)計(jì)中采用消息機(jī)制實(shí)現(xiàn)任務(wù)間通信。編碼任務(wù)需要模擬接口任務(wù)發(fā)送的消息,以接收用于編碼的語音數(shù)據(jù);數(shù)字接口任務(wù)需要編碼任務(wù)發(fā)送的消息,以接收用于發(fā)往信道的編碼數(shù)據(jù);解碼任務(wù)需要數(shù)字接口任務(wù)發(fā)來的消息,以接收來自信道的用于解碼的解碼字;模擬接口任務(wù)需要解碼任務(wù)發(fā)來的消息,以接收用于D/A轉(zhuǎn)換的數(shù)字語音信號。回波抵消任務(wù)需要等待的消息來自模擬接口任務(wù)和解碼任務(wù)。監(jiān)控任務(wù)接收所有其任務(wù)發(fā)來的消息,確認(rèn)系統(tǒng)是否正常運(yùn)行。
在運(yùn)行過程中,操作系統(tǒng)對各任務(wù)進(jìn)行調(diào)度。其動(dòng)作為:
系統(tǒng)啟動(dòng)時(shí),建立所有的任務(wù),除回波抵消任務(wù)外,都處于就緒態(tài);
此時(shí),監(jiān)控任務(wù)優(yōu)先級最高,查詢消息隊(duì)列,沒有消息的到來,轉(zhuǎn)為等待態(tài);
模擬接口任務(wù)運(yùn)行,接收/發(fā)送數(shù)據(jù),發(fā)數(shù)據(jù)給回波抵消任務(wù),并使回波抵消任務(wù)處于就緒態(tài);如條件達(dá)到(如幀數(shù)已夠),向編碼任務(wù)發(fā)消息,傳送數(shù)據(jù),運(yùn)行完畢, 自行進(jìn)入掛起態(tài),等待下一次串口中斷將其轉(zhuǎn)為就緒態(tài);
數(shù)字接口任務(wù)運(yùn)行,接收/發(fā)送數(shù)據(jù),如條件達(dá)到(如編碼字?jǐn)?shù)夠),向解碼任務(wù)發(fā)消息,傳送數(shù)據(jù),運(yùn)行完畢,自行進(jìn)入掛起態(tài),等待下一次串口中斷(或HPI中斷)將其轉(zhuǎn)為就緒態(tài);
如消息足夠,回波抵消任務(wù)運(yùn)行,運(yùn)行完畢,自行處于掛起態(tài);
編碼任務(wù)運(yùn)行,如有模擬接口任務(wù)發(fā)來的消息,則運(yùn)行,編碼完畢,向數(shù)字接口發(fā)消息;否則,處于等待態(tài);
解碼任務(wù)運(yùn)行,如有數(shù)字接口任務(wù)發(fā)來的消息,則運(yùn)行,解碼完畢,向模擬接口任務(wù)和回波抵消任務(wù)發(fā)消息;否則,處于等待態(tài);
在所有任務(wù)都執(zhí)行完畢后,Idle任務(wù)運(yùn)行。
由于所有的任務(wù)都有嚴(yán)格的執(zhí)行時(shí)間限制,因此,上述的任務(wù)流程在正常情況下可以順利進(jìn)行。
否則,監(jiān)控任務(wù)會(huì)重啟系統(tǒng)。
結(jié)語
本文在TMS320C54X的硬件平臺上實(shí)現(xiàn)uC/OS-II,并針對傳統(tǒng)的系統(tǒng)設(shè)計(jì)方法設(shè)計(jì)的低速率語音編碼器穩(wěn)定性不佳的問題,提出了基于uC/OS-II的低速率語音編碼器系統(tǒng)設(shè)計(jì)的方案。由于低速率語音編碼器通常是單片的,內(nèi)部任務(wù)相對較少。使用實(shí)時(shí)內(nèi)核來管理這些任務(wù),會(huì)增加系統(tǒng)的內(nèi)存和CPU時(shí)間的消耗,而任務(wù)調(diào)度的優(yōu)勢不能很好地顯示出來,該設(shè)計(jì)有一定局限性。但是,在系統(tǒng)的內(nèi)存足夠大、CPU運(yùn)行速度足夠快的情況下,使用實(shí)時(shí)內(nèi)核設(shè)計(jì)低速率語音編碼器,有利于系統(tǒng)的后繼開發(fā)。
信號處理內(nèi)核的發(fā)展促進(jìn)了GSM系統(tǒng)語音編解碼器的增強(qiáng)。目前更為密集的分析加合成方法已用于在常見的EFR 及AMR語音編碼器中,以在容量有限且容易出錯(cuò)的空中接口上提供最高質(zhì)量的語音傳輸。
以當(dāng)前對高速分組數(shù)據(jù)傳輸?shù)年P(guān)注程度,人們很容易忘記GSM數(shù)字電信系統(tǒng)的最初主要目的是傳輸語音??偟母杏X是整個(gè)系統(tǒng)的復(fù)雜性與傳輸鏈路的管理有關(guān),但也有很大部分與麥克風(fēng)捕捉到的音頻壓縮與解壓縮復(fù)雜性有關(guān)。
為滿足這一主要目的的需求,必須以足夠高的采樣及分辨率來捕獲語音,以清楚地再現(xiàn)原始聲音,并用一種可在比特率有限及容易出錯(cuò)的無線傳輸信道上保持音頻高保真度的方式來壓縮語音。
這一需求很具體,其目的是傳輸語音,故載荷的頻率范圍及聲音質(zhì)量均為已知。人類聽覺系統(tǒng)的工作方式允許編碼器在手機(jī)耳機(jī)上產(chǎn)生出類似自然聲音的聽覺效果。GSM系統(tǒng)中所使用的語音編碼器的主要原理是對人類音域的數(shù)學(xué)建模,從而產(chǎn)生出一種用于傳輸語音的有效壓縮方法。術(shù)語“聲碼器”或“語音編碼器”專門用來描述這些專門執(zhí)行語音壓縮的系統(tǒng)。
GSM系統(tǒng)對用于傳輸語音的信道具有一組固定的物理要求。首先,它具有最大22.8kbps的原始數(shù)據(jù)速率;其次,幀可以被“偷竊”以及用于信令,且語音編碼系統(tǒng)對這種情況必須很穩(wěn)健,盡管存在對可偷竊語音幀的頻率及時(shí)序的一定限制。
信道容量與編碼
GSM物理層是FDMA與TDMA的組合。無線信道在整個(gè)GSM頻段被分成相隔200kHz的多個(gè)信道,這些FDMA信道又被分成8個(gè)時(shí)隙。GSM物理信道被定義為單個(gè)“絕對無線頻率信道號”(ARFCN)上的單個(gè)時(shí)隙--故每一頻率均可包含有8個(gè)獨(dú)立物理信道。
“猝發(fā)”是指GSM系統(tǒng)中的無線傳輸量,且包含以周期577(s發(fā)送的114位原始信息。由于語音流量信道傳輸?shù)亩鄮Y(jié)構(gòu),故每26次猝發(fā)最多有24次可包含語音數(shù)據(jù)(其余2次猝發(fā)用于空閑周期或傳輸信令信息)。因此合計(jì)能給出22.8kbps的原始信道容量。
原始信道容量是完美傳輸條件下的最大用戶數(shù)據(jù)(編碼語音)吞吐量。在真實(shí)世界中,無線傳輸并不穩(wěn)健而且需要為數(shù)據(jù)增加保護(hù)。
增加冗余信息后,GSM系統(tǒng)中的全速率語音信道用于編碼語音的容量為13kbps。
語音編解碼器
如果以8 kHz采樣率及13位精度來對出自GSM蜂窩手機(jī)麥克風(fēng)的音頻數(shù)據(jù)進(jìn)行采樣,則可得到104kbps的源數(shù)據(jù)速率。GSM系統(tǒng)中有四種編解碼器,分別執(zhí)行:全速率、增強(qiáng)型全速率(EFR)、自適應(yīng)多速率(AMR)及半速率語音壓縮。表1給出了一些聲碼器的參數(shù)比較。
全速率
全速率語音編解碼器是改良的線性預(yù)測編碼器(LPC),它將人類聲域建模成一系列不同寬度的圓柱體。通過迫使空氣通過這些柱體,即可產(chǎn)生語音。LPC編碼器用一組聯(lián)立方程來進(jìn)行建模。
標(biāo)準(zhǔn)LPC編碼器不能提供電話系統(tǒng)所需的話音質(zhì)量(雖能聽清語句,但很難或不可能分辨出說話的人)。GSM系統(tǒng)中采用兩種技術(shù)來提高LPC編碼器的質(zhì)量,即:長期預(yù)測(LTP)與規(guī)則脈沖激勵(lì)(RPE),而全速率編解碼器就被稱為RPE-LTP線性預(yù)測編碼器。
輸入至RPE-LTP編碼器的數(shù)據(jù)為包括160個(gè)采樣值的20ms語音,每一個(gè)采樣值都擁有13位精度。數(shù)據(jù)首先通過預(yù)加重濾波器來提高信號的高頻分量,以獲得更好的傳輸效率。濾波器一般還消除信號上的任何偏移以簡化進(jìn)一步的計(jì)算。
正如前面所提到的,語音產(chǎn)生模型可看成是空氣通過一組不同大小的圓柱體。短期分析級采用自動(dòng)相關(guān)來計(jì)算與模型所用的8個(gè)圓柱體有關(guān)的8個(gè)反射系數(shù),同時(shí)采用一種稱為Schur遞歸的技術(shù)來有效地求解所得到的方程組。參數(shù)被變換成可以更少的位數(shù)來進(jìn)行更佳量化的LAR(log-area ratio)。這些是傳輸流的前8個(gè)參數(shù)。
然后再將編碼后的LAR解碼成系數(shù),并用來對輸入采樣值進(jìn)行濾波。解碼LAR的原因是為了確保編碼器使用解碼器上的相同信息來進(jìn)行濾波。這一級上的其余采樣值用于編解碼器的LTP級。
160個(gè)采樣值被分成4個(gè)子窗口,每一個(gè)子窗口都擁有40個(gè)采樣值。長期預(yù)測器為每一子窗口產(chǎn)生2個(gè)參數(shù):滯后與增益。滯后由當(dāng)前幀與后兩幀之間的交叉相關(guān)峰值確定,而增益則由歸一化交叉相關(guān)系數(shù)決定。滯后與增益參數(shù)被應(yīng)用到長期濾波器上,同時(shí)對現(xiàn)有短期剩余信號進(jìn)行預(yù)測。
RPE級通過十取一及交錯(cuò)將40個(gè)剩余采樣值轉(zhuǎn)換成13個(gè)參數(shù),并用APCM將所得出的13個(gè)值編碼,其中最大值用對數(shù)編碼成6位,然后再將13個(gè)參數(shù)均表示成3位,總共45位。
最后一級是從計(jì)算出的長期剩余及分析信號來更新短期剩余信號,然后再用此數(shù)據(jù)來計(jì)算下一幀。
增強(qiáng)型全速率
全速率編解碼器是一種用來傳輸語音并在計(jì)算上相當(dāng)有效的方法,但通過使用更為密集的算法,語音質(zhì)量還能提高。全速率編解碼器首先在1990年代初的DSP上實(shí)現(xiàn),當(dāng)時(shí)在經(jīng)濟(jì)上雖不能采用質(zhì)量更好的編碼器但卻是一種更為密集的算法。
至1990年代中,功能更強(qiáng)的DSP內(nèi)核的可用性已不再是一個(gè)問題,因此增強(qiáng)型全速率編解碼器開始在手機(jī)中出現(xiàn)。
EFR聲碼器是一種代數(shù)碼激勵(lì)線性預(yù)測(ACELP)編碼器,且不同于采用分析加合成方法的全速率系統(tǒng)。它計(jì)算雖更加密集但能在輸出端得到更為精確的結(jié)果。預(yù)處理級由80Hz高通濾波器及一些縮減電路組成,以使實(shí)現(xiàn)更為容易。每幀進(jìn)行兩次短期分析,由與兩個(gè)30mS(1.5個(gè)語音幀)、長度集中在不同子幀上的不同非對稱窗口自動(dòng)關(guān)聯(lián)。所得到的系數(shù)被變換成線譜對(line spectral pairs)并被量化成38位,以獲得更好的傳輸效率。
同時(shí)執(zhí)行開環(huán)間隔(pitch)分析來計(jì)算每幀的間隔滯后估計(jì)值,然后再用此估計(jì)值啟動(dòng)閉環(huán)搜索(以得出更快的結(jié)果)。再將所得到的閉環(huán)值應(yīng)用于合成器及與非量化輸入比較后的結(jié)果上(即分析加合成),最小的加權(quán)誤差從自適應(yīng)編碼本(codebook)上得出并被編碼成每子幀35位。
然后再用代數(shù)(固定) 編碼本、并再一次用分析加合成方法來對量化后余下的剩余信號進(jìn)行建模。所得到的編碼本增益被編碼成每子幀5位。
最后,正如全速率聲碼器中一樣,針對下一幀將存儲(chǔ)器刷新。
EFR聲碼器的12.2kbps輸出等于每幀244位。但編碼語音是通過擁有260位容量的常規(guī)GSM全速率空中信道來傳輸,其余16位被填以CRC以及重復(fù)一些用于冗余的最重要編解碼器參數(shù)。
自適應(yīng)多速率
當(dāng)全部參數(shù)均能解碼時(shí),全速率及EFR編解碼器可實(shí)現(xiàn)良好的語音再現(xiàn)。由于傳輸信道的冗余(請記住,原始信道容量比數(shù)據(jù)載荷大10kbps),故許多原始位可以出錯(cuò)且參數(shù)仍能恢復(fù)。
但當(dāng)參數(shù)丟失或錯(cuò)誤時(shí),所接收信號的質(zhì)量將迅速下降(參見圖3中的最右側(cè)黑色曲線)。
這也是AMR編解碼器組所試圖解決的問題。通過指定8個(gè)全都共享公共數(shù)學(xué)算法的聲碼器組,可改變信道的冗余量。以此種方式,語音傳輸?shù)馁|(zhì)量可能會(huì)由于降至更低的編碼速率上而稍微有所下降,但覆蓋編碼參數(shù)的信心則得以提高。
結(jié)果是在載波干擾增加的情況下可獲得感覺更好的語音信號質(zhì)量(如圖3)。
AMR編解碼器組由速率從12.2kbps至4.75kbps的ACELP聲碼器組成,故可提供87[%]至480[%]的冗余。在一種很糟的情況下,即全速率及EFR幀丟失很久后,4.75kbps編解碼器數(shù)據(jù)仍能恢復(fù)。
半速率
GSM所采用的空中接口允許使用兩個(gè)完全獨(dú)立的半速率子信道,故能使蜂窩單元的語音容量加倍。半速率聲碼器采用矢量和激勵(lì)線性預(yù)(VSELP)編碼器,它以一種類似EFR及AMR編解碼器的分析加合成方式工作,速率為5.7kbps。
半速率聲碼器的輸出幀包含用來指示幀聲音內(nèi)容的2個(gè)位。該聲碼器工作方式在每種模式下略微有些不同,故可獲得最佳的音頻數(shù)據(jù)再現(xiàn)質(zhì)量。
人們對半速率語音的感覺普遍不佳,所以今天一般不采用此項(xiàng)技術(shù)。但以其自適應(yīng)模式,AMR聲碼器的6種較低速率將適合半速率空中信道的可用容量,結(jié)果是采用帶AMR的半速率信道將在高流量領(lǐng)域變得更為普遍。
非連續(xù)傳輸
在典型的談話過程中,語音僅占總時(shí)間的大約40[%]。為減少對無線接口的干擾,可采用非連續(xù)傳輸(DTX),即移動(dòng)電話僅在有語音信號時(shí)才進(jìn)行傳輸。此功能要求有如下幾項(xiàng)內(nèi)容,即:語音活動(dòng)檢測(VAD)、用于空中接口的靜寂描述符(SID)幀及舒適噪音產(chǎn)生等。
為減少猝發(fā)傳輸?shù)目倳r(shí)間,語音解碼器必須能確定什么時(shí)候有語音。由于編碼的自然特性,可通過分析中間參數(shù)來精確確定是否有語音。重要的是要保證閾值合適,太靈敏會(huì)由于無線傳輸次數(shù)太多而對空中接口不利,而靈敏度不夠則會(huì)切斷語音并使聲音質(zhì)量嚴(yán)重下降。
盡管在理論上VAD是實(shí)現(xiàn)DTX所需的全部,但來自接收器的完全靜寂降低整體感覺質(zhì)量。為解決此問題,接收器采用了“舒適噪音”功能,即利用SID幀參數(shù)的逐漸衰減來產(chǎn)生類似發(fā)射器背景噪音的聲音。
當(dāng)VAD確定沒有語音時(shí),在空中接口上不進(jìn)行傳輸(實(shí)際情況比這更復(fù)雜一些,但其基本原理一樣)。經(jīng)過一段預(yù)定時(shí)間間隔后,再發(fā)送一個(gè)包含一組參數(shù)的SID幀,這些參數(shù)用于接收器舒適噪音產(chǎn)生功能。
最佳實(shí)現(xiàn)
語音編碼功能可解釋為像卷積這樣的數(shù)學(xué)密集型處理,在帶有處理這類計(jì)算指令(例如乘法-累加指令)的專用DSP上能得到最佳實(shí)現(xiàn)。盡管這可以在通用處理器上實(shí)現(xiàn),但要求有更高數(shù)量級的時(shí)鐘速度來與同樣的執(zhí)行速度相匹配。
不同處理內(nèi)核中所實(shí)現(xiàn)的EFR及全速率聲碼器執(zhí)行速度不同。作為一種與時(shí)鐘速度有關(guān)的比較,DSP全速率實(shí)現(xiàn)的速度大約要比奔騰處理器實(shí)現(xiàn)的速度快3.5倍,而經(jīng)徹底優(yōu)化后的SC140實(shí)現(xiàn)的速度要比奔騰處理器實(shí)現(xiàn)的速度整整快18倍。
在語音編解碼器中采用了許多優(yōu)化技術(shù)。最初一般將數(shù)據(jù)偏移以使計(jì)算更加容易并能再利用存儲(chǔ)器空間。例如,用剩余濾波器寫入輸入陣列而不使用新存儲(chǔ)器空間。
處理器可采用定制浮點(diǎn)實(shí)現(xiàn)來在內(nèi)核中提供浮點(diǎn)支持。這些實(shí)現(xiàn)不是位精確的,這意味著它們不能得出像定點(diǎn)參考實(shí)現(xiàn)一樣精確的數(shù)學(xué)結(jié)果。但通過軟硬件中針對這類數(shù)學(xué)算法的優(yōu)化,速度可明顯提高。而輸出參數(shù),當(dāng)被送入定點(diǎn)解碼器時(shí),將產(chǎn)生感覺上一樣的聲音幀。
測試位序列
為檢驗(yàn)依從性,ETSI頒布了一組全面的測試位序列。它們由輸入文件(160個(gè)13位采樣值)、編碼文件(通過解碼器的結(jié)果)、一些解碼文件(用于直接提供給解碼器)以及輸出文件(代表來自輸出的160個(gè)采樣值)組成。
而像VAD及舒適噪音產(chǎn)生等額外功能,則用各種序列進(jìn)行隱含測試。同時(shí)也對不同輸入壓縮擴(kuò)展方案(A-law和(-law)進(jìn)行測試。
浮點(diǎn)實(shí)現(xiàn)一般不遵循ETSI位序列,但能產(chǎn)生一組感覺上與定點(diǎn)編碼器及解碼器相兼容的參數(shù)。
對語音編碼器實(shí)現(xiàn)的定性評價(jià),可用Racal儀器公司帶VQA的AIME系統(tǒng)來測試。這種系統(tǒng)允許建立原始流量信道(無需完全的GSM協(xié)議實(shí)現(xiàn)),且能執(zhí)行全速率的空中傳輸雙向語音編碼。