摘 要: 首先根據(jù)切比雪夫多項式求根法對LPC系數(shù)到LSF系數(shù)轉(zhuǎn)換過程進(jìn)行分析與推導(dǎo),并給出了根據(jù)已知的LSF系數(shù)進(jìn)行逆推求LPC系數(shù)迭代算法。然后,借助DDS算法原理實現(xiàn)查找表搜索求根,并在FPGA上實現(xiàn)了LSF系數(shù)到LPC系數(shù)轉(zhuǎn)換。最后,給出了結(jié)論和分析。
關(guān)鍵詞: 線性預(yù)測系數(shù);線譜頻率;切比雪夫多項式;FPGA;DDS
線性預(yù)測法(LPC)成功地應(yīng)用于語音信號處理的各個方面,在語音參數(shù)的估計中也被廣泛地應(yīng)用,如基音周期、共振峰頻率和譜特征分析等。線性預(yù)測的基本思想是:由于語音信號之間存在相關(guān)性的特點,可以用過去若干個語音采樣值或它們的線性組合近似表示當(dāng)前語音采樣值。在LPC分析中,最普遍的方法是使用線譜頻率(LSF)表示LPC參量[1]。LSF是頻域參數(shù),具有良好的量化特性和內(nèi)插特性,小系數(shù)的誤差引起濾波器的局部誤差,構(gòu)成的合成濾波器有較好的穩(wěn)定性[2]。10階的LPC系數(shù)的LSF參數(shù)成功地應(yīng)用在低速率語音編碼器中,如混合激勵線性預(yù)測(MELP)聲碼器。近幾年,在語音信號處理中,LSF參數(shù)研究一直是熱點,參考文獻(xiàn)[3-4]對LSF參數(shù)量化方法進(jìn)行分析與仿真,但由LPC系數(shù)與LSF系數(shù)相互轉(zhuǎn)換的研究少之又少。
伴隨語音技術(shù)的不斷發(fā)展,對語音信號數(shù)字化處理的實時性要求越發(fā)嚴(yán)格,專用的語音信號處理芯片能滿足語音信號實時性的要求,LPC與LSF轉(zhuǎn)換是專用語音處理芯片的關(guān)鍵模塊之一。MELP算法語音編碼過程中,首先,把經(jīng)過帶寬擴(kuò)展后的線性預(yù)測系數(shù)轉(zhuǎn)為LSF系數(shù);其次,LSF參數(shù)按最小間隔排序;最后,對排序后的LSF進(jìn)行4級矢量量化。MELP算法解碼過程中,由內(nèi)插的LSF參數(shù)計算合成濾波器的系數(shù),得到合成濾波器,激勵信號經(jīng)過合成濾波器得到合成語音。由于LSF參數(shù)的特性,保證了合成濾波器的穩(wěn)定性[5]。LPC與LSF轉(zhuǎn)換算法的FPGA實現(xiàn)對語音編碼、語音合成等領(lǐng)域硬件實現(xiàn)至關(guān)重要。本文給出了LSF到LPC轉(zhuǎn)換運算推導(dǎo),并給出了算法的實現(xiàn)步驟。
1 轉(zhuǎn)換算法原理
1.1 由LPC系數(shù)向LSF系數(shù)轉(zhuǎn)換
本文針對LPC系數(shù)計算LSF系數(shù)的Chebyshev多項式求解法進(jìn)行研究:
P階線性預(yù)測濾波器函數(shù)為:
{ai}i=1,2,…,p為線性預(yù)測系數(shù)。預(yù)測系數(shù)ai在最小均方誤差準(zhǔn)則下,由Durbin遞推算法求解自相關(guān)方程得到[6]。
LSF[7]作為LPC系數(shù)的等價表現(xiàn)形式,可通過求解p+1階對稱多項式P(z)和反對稱多項式Q(z)的共軛復(fù)根獲得。其中p+1階多項式表示如下:
P(z)=A(z)+z-(p+1)×A(z-1)(2)
Q(z)=A(z)+z-(p+1)×A(z-1)(3)
可以證明,當(dāng)A(z)的根位于單位圓內(nèi)時,P(z)和 Q(z)的根沿著單位圓相互交替出現(xiàn)。當(dāng)p是偶數(shù)時,則P(z)有一個根z=-1,Q(z)有一個根z=1;當(dāng)p為奇數(shù)時,Q(z)有±1兩個實根。設(shè)P(z)的零點為e,設(shè)Q(z)的零點為e,則滿足:0<?棕1<?茲1<…?棕p/1<?茲p/1<π。為計算方便,去掉與LSF系數(shù)無關(guān)的實根,得到兩個新的多項式P′(z)和Q′(z),當(dāng)p為偶數(shù)時:
令Tm(x)=cos(mx),其中Tm(x)是m階的Chebyshev多項式。滿足關(guān)系式Tk(x)=2xTk-1(x)-Tk-2(x),初始條件為:T0(x)=1,T1(x)=x,則帶入式(6)、(7)得P(x)和Q(x):
P(x)=TM(x)+p1TM-1(x)+…+pM-1T1(x)+pM(8)
Q(x)=TM(x)+q1TM-1(x)+…+qM-1T1(x)+qM(9)
Chebyshev多項式求解法本質(zhì)是求解x滿足區(qū)間[-1,1],求P(x)=0和Q(x)=0的根{xi},對應(yīng)的LSF系數(shù)由?棕i=arccosxi確定。
1.2 由LSF系數(shù)向LPC系數(shù)轉(zhuǎn)換
在語音解碼過程中,需要把量化和內(nèi)插后的LSF系數(shù)轉(zhuǎn)換回LPC系數(shù){ai}i=1,2,…,p,逆向推導(dǎo),已知內(nèi)插的LSP系數(shù)fi,根據(jù)fi可計算出P′(z)和Q′(z)的系數(shù)p′i和q′i。
p′i=-2f2i-1p′i+2p′i-2(10)
q′i=-2f2iq′i-1+2q′i-2(11)
其中f2i-1=cos?棕2i-1,求出p′i和q′i。根據(jù)原來方程式對應(yīng)關(guān)系:
P(z)=P′(z)×(1+z-1)(12)
Q(z)=Q′(z)×(1-z-1)(13)
最后得到LPC系數(shù)可由A(z)+P(z)+Q(z)/2得到參數(shù)ai。
2 FPGA實現(xiàn)架構(gòu)
2.1 算法實現(xiàn)步驟
量化和內(nèi)插后的LSP系數(shù)需要更換成LPC系數(shù)ai。已知量化和內(nèi)插的LSP系數(shù)qi,i=0,1,…,p-1,根據(jù)前文推導(dǎo),可以得到下面迭代公式:
for i=1 to p/2
p′(i)=-2q2i-1p′(i-1)+2p′(i-2)
for j=i-1 to 1
p′(j)=p′(j)-2q2i-1p′(j-1)+2p′(i-2)
end
end
公式中的qi=coswi,余弦是通過查找表方式求得的,迭代過程中的初始值p′(0)=1,p′(-1)=0。上面迭代公式給出的是p′(i)的求法,在求解q′(i)時將上面的迭代公式中的q2i-1換成q2i即可。
在求得p′(i)和q′(i)后就可以求得p(i)、q(i),求解公式如下:
p1(i)=p′(i)+p′(i-1),i=1,2,…,p/2q1(i)=q′(i)-q′(i-1),i=1,2,…,p/2(14)
最后得到LPC系數(shù):
ai=0.5p1(i)+0.5q1(i), i=1,2,…,p/20.5p1(p+1-i)-0.5q1(p+1-i),i=1,2,…,p/2(15)
2.2 余弦信號發(fā)生器
FPGA實現(xiàn)LSP到LPC轉(zhuǎn)換是通過上文介紹的迭代算法來實現(xiàn)的。因為qi=coswi,迭代過程中qi的值是根據(jù)wi值來求出的。對于余弦的計算有很多方法,CORDIC旋轉(zhuǎn)是一種方法,查找表也是一種方法。CORDIC旋轉(zhuǎn)方法通過數(shù)學(xué)函數(shù)逼近的原理,每次旋轉(zhuǎn)一定的角度來得到余弦值,但是這種方法得到的精度和迭代的次數(shù)有關(guān);查找表方法是先將余弦值根據(jù)量化位數(shù)計算出來存在ROM中,每次計算是需要將數(shù)據(jù)進(jìn)行量化然后去ROM中查找量化值所對應(yīng)的余弦值,這種方法計算速度快,但是存在一定的量化誤差,會消耗一定存儲空間。考慮到實時性語言編解碼,本文的設(shè)計方案選擇的是查找表法,在每一輪計算中通過wi值查找ROM來得到qi,借助DDS算法原理[8],用相位累加器輸出的數(shù)據(jù)作為波形存儲器(ROM)的相位取樣地址,這樣就可以把存儲在波形存儲器內(nèi)的波形抽樣值(二進(jìn)制編碼)經(jīng)查找表查出,完成相位到幅值的轉(zhuǎn)變。
憑借MATLAB軟件可以生成ROM中余弦波形的定點數(shù)值,共分3步完成。
(1)運用MATLAB計算出余弦波形浮點值,對其進(jìn)行量化,生成定點數(shù)值。
(2)產(chǎn)生mif文件(Altera FPGA ROM初始化數(shù)據(jù)文件格式)。
?。?)將mif文件導(dǎo)入到“getCos”ROM模塊中。
2.3 系統(tǒng)框架與結(jié)果分析
FPGA實現(xiàn)LSP到LPC轉(zhuǎn)換時主要是根據(jù)給定的wi(或者fi)系數(shù)通過反復(fù)迭代而得到LPC系數(shù),圖1為迭代算法的流程圖。FPGA算法中一般采用計數(shù)器方式來實現(xiàn)for循環(huán),算法中有兩個計數(shù)器cnt1和cnt2,它們分別用于決定算法中兩層循環(huán),cnt1是標(biāo)定系數(shù)個數(shù),當(dāng)完成P/2個系數(shù)迭代時系統(tǒng)給出計算結(jié)束標(biāo)志,cnt2用來確定當(dāng)前系數(shù)的迭代次數(shù)。地址發(fā)送器是用來確定LSP系數(shù)查詢地址,它是根據(jù)wi和當(dāng)前cnt1值來決定數(shù)據(jù)的地址。這個地址所對應(yīng)的ROM單元中讀出的余弦值就是當(dāng)前迭代coswi值。迭代中設(shè)定初始值p′(0)=1,p′(-1)=0。
本文選取線性預(yù)測階數(shù)p=10,LSF系數(shù)到LPC系數(shù)算法FPGA實現(xiàn)頂層框圖如圖2所示,系統(tǒng)在start信號的上升沿開始加載wi,并將數(shù)據(jù)存儲在內(nèi)部寄存器中,為LPC系數(shù)迭代做好準(zhǔn)備。圖2模塊LSP2LP_Exloop,根據(jù)算法流程圖,在FPGA實現(xiàn)過程中,flage標(biāo)識位用于指定當(dāng)前運算是針對P還是Q的求解,因為P對應(yīng)的是奇數(shù)序列,Q對應(yīng)偶數(shù)序列,因為奇序列是相鄰兩項做和如式(12)所示,而偶數(shù)序列是相鄰兩項做差如式(13)所示。當(dāng)p_part和q_part兩個模塊完成迭代計算后,會給將各自的finish信號置為高電平,用以通知LSP2LPC_inter模塊合成ai系數(shù)。LSP2LPC_inter模塊在接收到p_part和q_part的finish信號后,同時將P和Q系數(shù)值載入并且根據(jù)式(15)所示計算過程完成P、Q到ai的合成,并將finish信號置為高電平。圖3為FPGA綜合報告,由此可見資源利用情況。
圖4為系統(tǒng)的Quartus II仿真報告,從報告中可以看出系統(tǒng)能準(zhǔn)確地合成系數(shù),這也說明了設(shè)計的可行性。
根據(jù)切比雪夫多項式求根法由LPC系數(shù)到LSF系數(shù)轉(zhuǎn)換過程進(jìn)行分析與推導(dǎo),根據(jù)已知的LSF系數(shù)進(jìn)行逆推理求LPC系數(shù),并給出了LSF到LPC系數(shù)轉(zhuǎn)換的實現(xiàn)步驟。借助DDS算法原理,實現(xiàn)查找表搜索求根,利用FPGA實現(xiàn)LSF系數(shù)到LPC系數(shù)轉(zhuǎn)換。與其他多項式相比較,Chebyshev多項式在較高的采樣率下,對線性預(yù)測階數(shù)要求不高,轉(zhuǎn)換性能影響不大。由于在0和π附近變化引起變化很小,可以得到高精度轉(zhuǎn)換參數(shù)值,時序測定時系統(tǒng)時鐘可以達(dá)到66 MHz。最后系統(tǒng)能準(zhǔn)確地合成LPC系數(shù),說明了設(shè)計的可行性,并為今后的設(shè)計提供了一定的參考價值。
參考文獻(xiàn)
[1] 方騰龍,趙曉群,韓笑蕾,等.語音清濁音差分LSF參數(shù)矢量量化方法[J].電聲技術(shù),2010,34(11):61-64.
[2] 袁曉勇,唐建紅,曲志昱.基于Chebyshev法實現(xiàn)LPC與LSF相互轉(zhuǎn)換[J].信息技術(shù),2009,5(79):229-231.
[3] 梁彥霞,楊家瑋,李燁,等.線譜頻率參數(shù)的快速,低存儲矢量量化[J].吉林大學(xué)學(xué)報:工學(xué)版,2012,42(1):223-227.
[4] 向波,唐昆,崔慧娟,等.基于DCT變換的LSF參數(shù)降維算法[J].通信技術(shù),2008,41(8):204-206.
[5] 鮑長春.數(shù)字語音編碼原理[M].西安:西安電子科技大學(xué)出版社,2007.
[6] 張雪英.數(shù)字語音處理及MATLAB仿真[M].北京:電子工業(yè)出版社,2010.
[7] SOONG F, JUANG B. Line spectrum pair (LSP) and speech data compression[J]. Acoustics, Speech, and Signal Processing, IEEE International Conference on ICASSP′84. IEEE, 1984(9):37-40.
[8] 田耘,徐文波,張延偉,等.無線通信FPGA設(shè)計[M].北京:電子工業(yè)出版社,2008.