2019-11-15 09:33:17
4056
大家都知道無線對(duì)講機(jī)可以分為模擬通信技術(shù)的模擬對(duì)講機(jī)(也就是常見的傳統(tǒng)對(duì)講機(jī))以及采用數(shù)字技術(shù)進(jìn)行設(shè)計(jì)的數(shù)字對(duì)講機(jī)。數(shù)字對(duì)講機(jī)有許多優(yōu)點(diǎn),首先是可以更好地利用頻譜資源。與蜂窩數(shù)字技術(shù)相似,數(shù)字對(duì)講機(jī)可以在一個(gè)頻點(diǎn)上承載更多用戶,提高頻譜利用率。其次是提高通話質(zhì)量,數(shù)字對(duì)講機(jī)可以在一個(gè)范圍更廣泛的信號(hào)環(huán)境中,實(shí)現(xiàn)更好的語音音頻質(zhì)量?;谶@些特點(diǎn),使數(shù)字對(duì)講機(jī)成為對(duì)講機(jī)發(fā)展的必然趨勢(shì)。
數(shù)字對(duì)講機(jī)語音編碼算法的關(guān)鍵技術(shù)實(shí)現(xiàn)問題可以分為算法實(shí)現(xiàn)和硬件平臺(tái)實(shí)現(xiàn)。算法實(shí)現(xiàn)主要是指將低速率語音編碼算法應(yīng)用于數(shù)字對(duì)講機(jī),而硬件平臺(tái)實(shí)現(xiàn)主要是指將改進(jìn)后的算法正確有效地在硬件平臺(tái)上運(yùn)行。
1
數(shù)字對(duì)講機(jī)SELP語音編碼算法
●算法概述:
SELP算法是建立在傳統(tǒng)的線性預(yù)測(cè)模型的基礎(chǔ)上,即通過線性預(yù)測(cè)分析分離激勵(lì)貢獻(xiàn)和聲道貢獻(xiàn),激勵(lì)信號(hào)則由清音成分和濁音成分在不同時(shí)間和不同頻率上的混合組成的,混合信號(hào)經(jīng)過一個(gè)慢時(shí)變的幅度調(diào)制得到激勵(lì)信號(hào),其中清音成分用白噪聲很好的擬合,濁音成分在每個(gè)諧波處用一個(gè)頻率變化的正弦信號(hào)合成,整個(gè)激勵(lì)的濁音部分由一組不同幅度的正弦波信號(hào)疊加而成。
●編碼器原理
SELP聲碼器算法屬于參數(shù)聲碼器的范疇,此模型描述了5個(gè)語音參數(shù),分別是:線性預(yù)測(cè)(Linear Prediction)系數(shù)、清濁音參數(shù)、激勵(lì)能量參數(shù)、基音周期參數(shù)和余量譜幅度參數(shù),5 個(gè)參數(shù)均為每幀提取一次。如下圖所示,是SELP語音編碼器的編碼分析端框圖。
●激勵(lì)模型
假設(shè)Pn表示濁音成份,Vn表示清音成份, Hn 表示合成濾波器的沖擊響應(yīng)。則最終的合成語音Xn 可以表示成:
其中 ? 表示卷積運(yùn)算。
合成濾波器Hn通常采用極點(diǎn)模型來表示。假設(shè)Hn用M階的極點(diǎn)模型來表示,其相應(yīng)的Z變換為:
語音信號(hào)中的濁音成份Pn具有周期性,可以看成是一系列正弦波經(jīng)過幅度調(diào)制后相互疊加的結(jié)果:
●解碼器原理
所有參數(shù)都經(jīng)過量化編碼傳輸?shù)浇獯a端,解碼端經(jīng)過反量化后得到5個(gè)參數(shù):線性預(yù)測(cè)系數(shù)、基音周期參數(shù)、能量參數(shù)、清濁音參數(shù)和10維譜幅度參數(shù)。采用分析端提取清濁音時(shí)的分帶方式,在各個(gè)子帶內(nèi)分別合成激勵(lì)。每個(gè)子帶中,采用正弦信號(hào)合成濁音與白噪聲信號(hào)模擬的清音信號(hào)疊加,通過合成濾波器后得到合成語音。解碼器的合成框圖如圖所示:
2
數(shù)字對(duì)講機(jī)簡(jiǎn)化SELP語音編碼算法
●低復(fù)雜度正弦波模型
SELP 算法里將譜幅度參數(shù)固定為10維矢量,采用矢量量化傳輸此參數(shù)。為了降低編碼器的復(fù)雜度,同時(shí)節(jié)省碼本的存儲(chǔ)資源,簡(jiǎn)化后的語音編碼器采用了一種簡(jiǎn)單正弦波幅度模型,避免了參數(shù)提取和矢量量化過程。
●分子幀參數(shù)提取
為了保證低復(fù)雜度下的語音合成質(zhì)量,采用分子幀的方法提取參數(shù)。在每個(gè)子幀內(nèi)分別提取基音周期、清濁音信息和能量參數(shù)。而線性預(yù)測(cè)參數(shù)仍然在160點(diǎn)整幀內(nèi)提取,階數(shù)設(shè)定為10階。
采用自相關(guān)方法求取基音周期,每次提取的窗長(zhǎng)為200個(gè)點(diǎn),其組成如下圖所示。與整幀基音提取相同,子幀的基音周期也對(duì)應(yīng)于自相關(guān)函數(shù)的極大值。預(yù)留子幀內(nèi)5個(gè)極大值點(diǎn)作為備選基音周期,同時(shí)前瞻兩個(gè)子幀,通過動(dòng)態(tài)規(guī)劃方法得到最終的基音周期。然后將窗向右移動(dòng)80個(gè)點(diǎn)繼續(xù)提取下一子幀的基音周期。
基音周期窗
子幀能量參數(shù)是基于余量信號(hào)進(jìn)行提取的。語音信號(hào)經(jīng)過LPC逆濾波器后得到余量信號(hào) r(n) ,將余量信號(hào)在時(shí)間上分為前后子幀,分別計(jì)算其能量參數(shù)的。
●參數(shù)插值
編碼器參數(shù)中的線性預(yù)測(cè)系數(shù)、清濁音信息和譜幅度參數(shù),在幀間采用線性插值得到。設(shè)過去幀參數(shù)記為 par/old ,當(dāng)前幀參數(shù)記為 par/new,則在合成第 k 點(diǎn)語音信號(hào)的參數(shù)值計(jì)算公式如式⑥所示。
對(duì)于對(duì)數(shù)域能量參數(shù),首先將其轉(zhuǎn)換到線性域按照式⑥進(jìn)行插值,然后進(jìn)行激勵(lì)的合成。對(duì)于基音周期,則按(式⑦)進(jìn)行插值。
通過幀間插值,保證了幀間語音參數(shù)的平穩(wěn)過度,從而保證了語音的合成質(zhì)量。
●基于分子幀方法的激勵(lì)信號(hào)合成
激勵(lì)由清濁音信號(hào)疊加而成,SELP 算法采用子帶清濁音度對(duì)清濁音信號(hào)進(jìn)行調(diào)制。清音信號(hào)由白噪聲發(fā)生器產(chǎn)生,濁音信號(hào)由一組正弦諧波信號(hào)疊加生成,如式⑧所示。
得到清濁音兩種激勵(lì)信號(hào)后,分別通過由清濁度信息調(diào)制的5個(gè)帶通濾波器,相加得到合成激勵(lì)信號(hào):
其中 ? 表示卷積運(yùn)算,hi(n) 表示5個(gè)子帶帶通濾波器的沖激響應(yīng)e/p(n)和e/n(n)分別表示濁音激勵(lì)和清音激勵(lì)。
將兩種經(jīng)過增益調(diào)制后的信號(hào)分別通過由清濁度信息調(diào)制的帶通濾波器相加,即得到合成激勵(lì)信號(hào)。合成激勵(lì)信號(hào)激勵(lì)合成濾波器即得到合成語音。
數(shù)字對(duì)講機(jī)語音編碼算法的硬件平臺(tái)實(shí)現(xiàn)
●對(duì)代碼進(jìn)行優(yōu)化的必要性
程序中運(yùn)算量最大的部分往往是循環(huán),因此對(duì)循環(huán)的優(yōu)化效果直接決定整個(gè)程序的運(yùn)算量。如果一條指令需要前一條指令的執(zhí)行結(jié)果,而這時(shí)前一條指令的結(jié)果還未達(dá)到有效狀態(tài),那么處理器就會(huì)等待??梢酝ㄟ^調(diào)整指令順序的方法來避免流水線等待。另一方面,在函數(shù)調(diào)用時(shí)以及循環(huán)體內(nèi)部這兩個(gè)最耗費(fèi)流水線資源的地方存在大量跳轉(zhuǎn)語句,而跳轉(zhuǎn)時(shí)會(huì)清空處理器的水線,所以在一個(gè)循環(huán)體內(nèi)部,應(yīng)盡可能少出現(xiàn)或者不出現(xiàn)跳轉(zhuǎn)指令。
●對(duì)代碼進(jìn)行優(yōu)化的方法
首先是 C 語言級(jí)別上的優(yōu)化,主要的優(yōu)化方法有:
1、循環(huán)的調(diào)整。對(duì)循環(huán)的調(diào)整主要是進(jìn)行循環(huán)的展開。由于采用循環(huán)則意味著判斷和跳轉(zhuǎn),從而耗費(fèi)大量指令周期,直接采用順序結(jié)構(gòu)雖然使代碼量有所增加,但指令周期數(shù)明顯減少。
2、一些函數(shù)接口的調(diào)整。為了節(jié)省寄存器資源,而需要減少傳遞的參數(shù)個(gè)數(shù)??梢灾苯影岩恍┏S玫膮?shù)固定在被調(diào)函數(shù)中,既節(jié)省運(yùn)算量又節(jié)省了寄存器。對(duì)匯編代碼的優(yōu)化則牽涉到 ARM 匯編本身的細(xì)節(jié):
①期指令,雖然指令數(shù)增加了,但總的機(jī)器周期數(shù)可以減少。
?、诶弥噶铐樞虻恼{(diào)整來解決流水線互鎖的問題。這種方法在循環(huán)的優(yōu)化中大量應(yīng)用。
?、鄢浞掷猛ㄓ眉拇嫫?,盡量避免內(nèi)存讀寫,從而能夠提高程序的運(yùn)行速度。
?、芾?ARM 提供的條件執(zhí)行機(jī)制消除部分條件跳轉(zhuǎn)指令。
2
數(shù)字對(duì)講機(jī)碼率控制算法
圖 1、2、3 分別是“foreman”,“mobile”,“news”各序列使用本文算法和JVT-G012所產(chǎn)生的比特率的比較圖,從各圖中可以看出本文算法在碼流輸出算法更加的平穩(wěn)。
針對(duì)數(shù)字對(duì)講機(jī)的應(yīng)用環(huán)境,改進(jìn)的低復(fù)雜度的 2.4 k 低速率語音編碼算法,對(duì)算法進(jìn)行了簡(jiǎn)化,并在 ARM 嵌入式平臺(tái)上對(duì)目標(biāo)代碼的實(shí)現(xiàn)進(jìn)行優(yōu)化。通過采用低復(fù)雜度的正弦波模型以及幀間內(nèi)插等方法降低了算法復(fù)雜度,又通過分子幀的參數(shù)提取方式以及分子幀的激勵(lì)信號(hào)合成保證了語音質(zhì)量;另一方面通過對(duì)程序代碼的優(yōu)化,使得算法能夠在 ARM 嵌入式平臺(tái)上達(dá)到實(shí)用化。通過試驗(yàn)證明,經(jīng)過優(yōu)化后的客觀語音測(cè)試結(jié)果略微有變化,而主觀聽音效果幾乎未發(fā)生改變,但算法的復(fù)雜度得到了極大的下降。