大家都知道無線對講機可以分為模擬通訊技術的模擬對講機(也就是常見的傳統對講機)以及採用數字技術進行設計的數字對講機。數字對講機有許多優點,首先是可以更好地利用頻譜資源。與蜂窩數字技術相似,數字對講機可以在一個頻點上承載更多使用者,提高頻譜利用率。其次是提高通話質量,數字對講機可以在一個範圍更廣泛的訊號環境中,實現更好的語音音訊質量。基於這些特點,使數字對講機成為對講機發展的必然趨勢。
數字對講機語音編碼演算法的關鍵技術實現問題可以分為演算法實現和硬體平臺實現。演算法實現主要是指將低速率語音編碼演算法應用於數字對講機,而硬體平臺實現主要是指將改進後的演算法正確有效地在硬體平臺上執行。
1
數字對講機SELP語音編碼演算法
●演算法概述:
SELP演算法是建立在傳統的線性預測模型的基礎上,即透過線性預測分析分離激勵貢獻和聲道貢獻,激勵訊號則由清音成分和濁音成分在不同時間和不同頻率上的混合組成的,混合訊號經過一個慢時變的幅度調製得到激勵訊號,其中清音成分用白噪聲很好的擬合,濁音成分在每個諧波處用一個頻率變化的正弦訊號合成,整個激勵的濁音部分由一組不同幅度的正弦波訊號疊加而成。
●編碼器原理
SELP聲碼器演算法屬於引數聲碼器的範疇,此模型描述了5個語音引數,分別是:線性預測(Linear Prediction)係數、清濁音引數、激勵能量引數、基音週期引數和餘量譜幅度引數,5 個引數均為每幀提取一次。如下圖所示,是SELP語音編碼器的編碼分析端框圖。
●激勵模型
假設Pn表示濁音成份,Vn表示清音成份, Hn 表示合成濾波器的衝擊響應。則最終的合成語音Xn 可以表示成:
其中 ⊗ 表示卷積運算。
合成濾波器Hn通常採用極點模型來表示。假設Hn用M階的極點模型來表示,其相應的Z變換為:
語音訊號中的濁音成份Pn具有周期性,可以看成是一系列正弦波經過幅度調製後相互疊加的結果:
●解碼器原理
所有引數都經過量化編碼傳輸到解碼端,解碼端經過反量化後得到5個引數:線性預測係數、基音週期引數、能量引數、清濁音引數和10維譜幅度引數。採用分析端提取清濁音時的分帶方式,在各個子帶內分別合成激勵。每個子帶中,採用正弦訊號合成濁音與白噪聲訊號模擬的清音訊號疊加,透過合成濾波器後得到合成語音。解碼器的合成框圖如圖所示:
2
數字對講機簡化SELP語音編碼演算法
●低複雜度正弦波模型
SELP 演算法裡將譜幅度引數固定為10維向量,採用向量量化傳輸此引數。為了降低編碼器的複雜度,同時節省碼本的儲存資源,簡化後的語音編碼器採用了一種簡單正弦波幅度模型,避免了引數提取和向量量化過程。
●分子幀引數提取
為了保證低複雜度下的語音合成質量,採用分子幀的方法提取引數。在每個子幀內分別提取基音週期、清濁音資訊和能量引數。而線性預測引數仍然在160點整幀內提取,階數設定為10階。
採用自相關方法求取基音週期,每次提取的窗長為200個點,其組成如下圖所示。與整幀基音提取相同,子幀的基音週期也對應於自相關函式的極大值。預留子幀內5個極大值點作為備選基音週期,同時前瞻兩個子幀,透過動態規劃方法得到最終的基音週期。然後將窗向右移動80個點繼續提取下一子幀的基音週期。
基音週期窗
子幀能量引數是基於餘量訊號進行提取的。語音訊號經過LPC逆濾波器後得到餘量訊號 r(n) ,將餘量訊號在時間上分為前後子幀,分別計算其能量引數的。
●引數插值
編碼器引數中的線性預測係數、清濁音資訊和譜幅度引數,在幀間採用線性插值得到。設過去幀引數記為 par/old ,當前幀引數記為 par/new,則在合成第 k 點語音訊號的引數值計算公式如式⑥所示。
對於對數域能量引數,首先將其轉換到線性域按照式⑥進行插值,然後進行激勵的合成。對於基音週期,則按(式⑦)進行插值。
透過幀間插值,保證了幀間語音引數的平穩過度,從而保證了語音的合成質量。
●基於分子幀方法的激勵訊號合成
得到清濁音兩種激勵訊號後,分別透過由清濁度資訊調製的5個帶通濾波器,相加得到合成激勵訊號:
其中 ⊗ 表示卷積運算,hi(n) 表示5個子帶帶通濾波器的衝激響應e/p(n)和e/n(n)分別表示濁音激勵和清音激勵。
將兩種經過增益調製後的訊號分別透過由清濁度資訊調製的帶通濾波器相加,即得到合成激勵訊號。合成激勵訊號激勵合成濾波器即得到合成語音。
數字對講機語音編碼演算法的硬體平臺實現
●對程式碼進行最佳化的必要性
程式中運算量最大的部分往往是迴圈,因此對迴圈的最佳化效果直接決定整個程式的運算量。如果一條指令需要前一條指令的執行結果,而這時前一條指令的結果還未達到有效狀態,那麼處理器就會等待。可以透過調整指令順序的方法來避免流水線等待。另一方面,在函式呼叫時以及迴圈體內部這兩個最耗費流水線資源的地方存在大量跳轉語句,而跳轉時會清空處理器的水線,所以在一個迴圈體內部,應儘可能少出現或者不出現跳轉指令。
●對程式碼進行最佳化的方法
首先是 C 語言級別上的最佳化,主要的最佳化方法有:
1、迴圈的調整。對迴圈的調整主要是進行迴圈的展開。由於採用迴圈則意味著判斷和跳轉,從而耗費大量指令週期,直接採用順序結構雖然使程式碼量有所增加,但指令週期數明顯減少。
2、一些函式介面的調整。為了節省暫存器資源,而需要減少傳遞的引數個數。可以直接把一些常用的引數固定在被調函式中,既節省運算量又節省了暫存器。對彙編程式碼的最佳化則牽涉到 ARM 彙編本身的細節:
①期指令,雖然指令數增加了,但總的機器週期數可以減少。
②利用指令順序的調整來解決流水線互鎖的問題。這種方法在迴圈的最佳化中大量應用。
④利用 ARM 提供的條件執行機制消除部分條件跳轉指令。
數字對講機位元速率控制演算法
圖 1、2、3 分別是“foreman”,“mobile”,“news”各序列使用本文演算法和JVT-G012所產生的位元率的比較圖,從各圖中可以看出本文演算法在碼流輸出演算法更加的平穩。
針對數字對講機的應用環境,改進的低複雜度的 2.4 k 低速率語音編碼演算法,對演算法進行了簡化,並在 ARM 嵌入式平臺上對目的碼的實現進行最佳化。透過採用低複雜度的正弦波模型以及幀間內插等方法降低了演算法複雜度,又透過分子幀的引數提取方式以及分子幀的激勵訊號合成保證了語音質量;另一方面透過對程式程式碼的最佳化,使得演算法能夠在 ARM 嵌入式平臺上達到實用化。透過試驗證明,經過最佳化後的客觀語音測試結果略微有變化,而主觀聽音效果幾乎未發生改變,但演算法的複雜度得到了極大的下降。
大家都知道無線對講機可以分為模擬通訊技術的模擬對講機(也就是常見的傳統對講機)以及採用數字技術進行設計的數字對講機。數字對講機有許多優點,首先是可以更好地利用頻譜資源。與蜂窩數字技術相似,數字對講機可以在一個頻點上承載更多使用者,提高頻譜利用率。其次是提高通話質量,數字對講機可以在一個範圍更廣泛的訊號環境中,實現更好的語音音訊質量。基於這些特點,使數字對講機成為對講機發展的必然趨勢。
數字對講機語音編碼演算法的關鍵技術實現問題可以分為演算法實現和硬體平臺實現。演算法實現主要是指將低速率語音編碼演算法應用於數字對講機,而硬體平臺實現主要是指將改進後的演算法正確有效地在硬體平臺上執行。
1
數字對講機SELP語音編碼演算法
●演算法概述:
SELP演算法是建立在傳統的線性預測模型的基礎上,即透過線性預測分析分離激勵貢獻和聲道貢獻,激勵訊號則由清音成分和濁音成分在不同時間和不同頻率上的混合組成的,混合訊號經過一個慢時變的幅度調製得到激勵訊號,其中清音成分用白噪聲很好的擬合,濁音成分在每個諧波處用一個頻率變化的正弦訊號合成,整個激勵的濁音部分由一組不同幅度的正弦波訊號疊加而成。
●編碼器原理
SELP聲碼器演算法屬於引數聲碼器的範疇,此模型描述了5個語音引數,分別是:線性預測(Linear Prediction)係數、清濁音引數、激勵能量引數、基音週期引數和餘量譜幅度引數,5 個引數均為每幀提取一次。如下圖所示,是SELP語音編碼器的編碼分析端框圖。
●激勵模型
假設Pn表示濁音成份,Vn表示清音成份, Hn 表示合成濾波器的衝擊響應。則最終的合成語音Xn 可以表示成:
其中 ⊗ 表示卷積運算。
合成濾波器Hn通常採用極點模型來表示。假設Hn用M階的極點模型來表示,其相應的Z變換為:
語音訊號中的濁音成份Pn具有周期性,可以看成是一系列正弦波經過幅度調製後相互疊加的結果:
●解碼器原理
所有引數都經過量化編碼傳輸到解碼端,解碼端經過反量化後得到5個引數:線性預測係數、基音週期引數、能量引數、清濁音引數和10維譜幅度引數。採用分析端提取清濁音時的分帶方式,在各個子帶內分別合成激勵。每個子帶中,採用正弦訊號合成濁音與白噪聲訊號模擬的清音訊號疊加,透過合成濾波器後得到合成語音。解碼器的合成框圖如圖所示:
2
數字對講機簡化SELP語音編碼演算法
●低複雜度正弦波模型
SELP 演算法裡將譜幅度引數固定為10維向量,採用向量量化傳輸此引數。為了降低編碼器的複雜度,同時節省碼本的儲存資源,簡化後的語音編碼器採用了一種簡單正弦波幅度模型,避免了引數提取和向量量化過程。
●分子幀引數提取
為了保證低複雜度下的語音合成質量,採用分子幀的方法提取引數。在每個子幀內分別提取基音週期、清濁音資訊和能量引數。而線性預測引數仍然在160點整幀內提取,階數設定為10階。
採用自相關方法求取基音週期,每次提取的窗長為200個點,其組成如下圖所示。與整幀基音提取相同,子幀的基音週期也對應於自相關函式的極大值。預留子幀內5個極大值點作為備選基音週期,同時前瞻兩個子幀,透過動態規劃方法得到最終的基音週期。然後將窗向右移動80個點繼續提取下一子幀的基音週期。
基音週期窗
子幀能量引數是基於餘量訊號進行提取的。語音訊號經過LPC逆濾波器後得到餘量訊號 r(n) ,將餘量訊號在時間上分為前後子幀,分別計算其能量引數的。
●引數插值
編碼器引數中的線性預測係數、清濁音資訊和譜幅度引數,在幀間採用線性插值得到。設過去幀引數記為 par/old ,當前幀引數記為 par/new,則在合成第 k 點語音訊號的引數值計算公式如式⑥所示。
對於對數域能量引數,首先將其轉換到線性域按照式⑥進行插值,然後進行激勵的合成。對於基音週期,則按(式⑦)進行插值。
透過幀間插值,保證了幀間語音引數的平穩過度,從而保證了語音的合成質量。
●基於分子幀方法的激勵訊號合成
得到清濁音兩種激勵訊號後,分別透過由清濁度資訊調製的5個帶通濾波器,相加得到合成激勵訊號:
其中 ⊗ 表示卷積運算,hi(n) 表示5個子帶帶通濾波器的衝激響應e/p(n)和e/n(n)分別表示濁音激勵和清音激勵。
將兩種經過增益調製後的訊號分別透過由清濁度資訊調製的帶通濾波器相加,即得到合成激勵訊號。合成激勵訊號激勵合成濾波器即得到合成語音。
數字對講機語音編碼演算法的硬體平臺實現
●對程式碼進行最佳化的必要性
程式中運算量最大的部分往往是迴圈,因此對迴圈的最佳化效果直接決定整個程式的運算量。如果一條指令需要前一條指令的執行結果,而這時前一條指令的結果還未達到有效狀態,那麼處理器就會等待。可以透過調整指令順序的方法來避免流水線等待。另一方面,在函式呼叫時以及迴圈體內部這兩個最耗費流水線資源的地方存在大量跳轉語句,而跳轉時會清空處理器的水線,所以在一個迴圈體內部,應儘可能少出現或者不出現跳轉指令。
●對程式碼進行最佳化的方法
首先是 C 語言級別上的最佳化,主要的最佳化方法有:
1、迴圈的調整。對迴圈的調整主要是進行迴圈的展開。由於採用迴圈則意味著判斷和跳轉,從而耗費大量指令週期,直接採用順序結構雖然使程式碼量有所增加,但指令週期數明顯減少。
2、一些函式介面的調整。為了節省暫存器資源,而需要減少傳遞的引數個數。可以直接把一些常用的引數固定在被調函式中,既節省運算量又節省了暫存器。對彙編程式碼的最佳化則牽涉到 ARM 彙編本身的細節:
①期指令,雖然指令數增加了,但總的機器週期數可以減少。
②利用指令順序的調整來解決流水線互鎖的問題。這種方法在迴圈的最佳化中大量應用。
④利用 ARM 提供的條件執行機制消除部分條件跳轉指令。
2
數字對講機位元速率控制演算法
圖 1、2、3 分別是“foreman”,“mobile”,“news”各序列使用本文演算法和JVT-G012所產生的位元率的比較圖,從各圖中可以看出本文演算法在碼流輸出演算法更加的平穩。
針對數字對講機的應用環境,改進的低複雜度的 2.4 k 低速率語音編碼演算法,對演算法進行了簡化,並在 ARM 嵌入式平臺上對目的碼的實現進行最佳化。透過採用低複雜度的正弦波模型以及幀間內插等方法降低了演算法複雜度,又透過分子幀的引數提取方式以及分子幀的激勵訊號合成保證了語音質量;另一方面透過對程式程式碼的最佳化,使得演算法能夠在 ARM 嵌入式平臺上達到實用化。透過試驗證明,經過最佳化後的客觀語音測試結果略微有變化,而主觀聽音效果幾乎未發生改變,但演算法的複雜度得到了極大的下降。