楊水森,陳 強(qiáng),朱吉祥,陳文琳
(1.重慶三峽學(xué)院應(yīng)用技術(shù)學(xué)院,重慶萬(wàn)州404100;
2.重慶三峽學(xué)院信號(hào)與信息處理重點(diǎn)實(shí)驗(yàn)室,重慶萬(wàn)州 404100)
隨著社會(huì)多極化的發(fā)展,語(yǔ)音偽裝技術(shù)也是一項(xiàng)引人矚目的話題。目前,也廣泛應(yīng)用于社會(huì)的各個(gè)領(lǐng)域,例如:通信、聲控、醫(yī)學(xué)……等[1]。實(shí)現(xiàn)語(yǔ)言偽裝功能的核心就是運(yùn)用語(yǔ)音信號(hào)的頻率特性,利用MATLAB軟件對(duì)語(yǔ)音信號(hào)進(jìn)行仿真,提取出一組能夠設(shè)計(jì)數(shù)字均衡器的均衡系數(shù)。本文所涉及的均衡器的原理也正是如此,其原理是將外部提取的語(yǔ)音信號(hào)通過(guò)A/D轉(zhuǎn)換電路轉(zhuǎn)換后送入FPGA,再用MATLAB軟件進(jìn)行仿真,提取出均衡系數(shù)送給FPGA中的均衡器并完成相應(yīng)的語(yǔ)音偽裝算法,再又經(jīng)過(guò)D/A轉(zhuǎn)換電路將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)。
本文所設(shè)計(jì)的均衡器可以采用兩種,一種是根據(jù)均衡器描述原理設(shè)計(jì),將多個(gè)濾波器分別乘以對(duì)應(yīng)的均衡系數(shù)后疊加,以實(shí)現(xiàn)均衡器效果。但由于實(shí)際濾波器總存在一定的帶寬和衰減特性,在兩個(gè)或者多個(gè)濾波器交界處會(huì)出現(xiàn)很大的幅度跳變,如此設(shè)計(jì)的均衡器,遠(yuǎn)遠(yuǎn)脫離了預(yù)期要求。其原理圖如圖1所示。
圖1 段均衡器的算法模型
其中H1(n)是一個(gè)低通濾波器,H2(n)、H3(n)、H4(n)是3個(gè)帶通濾波器,H5(n)是一個(gè)高通濾波器。我們調(diào)整它們各自的增益系數(shù)G1~G5,就能調(diào)整相應(yīng)頻段的聲音,從而得到我們需要的效果。
而另一種是基于幅頻域直接改變均衡器系數(shù),即將所設(shè)計(jì)的濾波器,在幅頻域內(nèi)乘以所要獲得的均衡器系數(shù),達(dá)到頻域內(nèi)的幅度特性滿足要求后,再將所獲得的濾波器參數(shù),進(jìn)行傅里葉逆變換,可獲得所要求的濾波器系數(shù),從而達(dá)到均衡設(shè)計(jì)的要求。通過(guò)多方面的考慮最后選擇了第二種方法[2-3]。
系統(tǒng)總體設(shè)計(jì)方案如圖2所示:
圖2 系統(tǒng)總體設(shè)計(jì)方案圖
圖中用FPGA作為硬件電路,主要負(fù)責(zé)對(duì)采樣回來(lái)的信號(hào)進(jìn)行FFT變換,以A/D和D/A為外圍電路,對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換后由高速D/A模塊輸出。但是,D/A輸出的是離散的正弦信號(hào),頻率范圍較廣,為能最大的輸出基波成分,且輸出信號(hào)較平滑,須對(duì)信號(hào)進(jìn)行低通濾波,除去頻譜中的高頻分量。再將輸出的信號(hào)經(jīng)功率放大后,得到幅度穩(wěn)定的頻率信號(hào)[4]。以MATLAB軟件為核心,通過(guò)MATLAB軟件仿真將所需要的均衡系數(shù)提供給數(shù)字幅頻均衡器,最后利用MATLAB/Simulink軟件生成模型文件,轉(zhuǎn)換成VHDL語(yǔ)言給硬件電路實(shí)現(xiàn)語(yǔ)音偽裝功能[5]。
通過(guò)對(duì)語(yǔ)音信號(hào)的系統(tǒng)仿真,用頻譜擬合曲線法將提取到的男女頻譜圖對(duì)應(yīng)頻率點(diǎn)做相除運(yùn)算,相除所得結(jié)果就是所要求的擬合曲線模型。在此本人考慮到男性聲音頻率偏低,女性則偏高。為了加強(qiáng)這一點(diǎn)對(duì)最終擬合曲線的影響,選取了男低音和女高音兩個(gè)極端的聲音頻譜作為研究對(duì)象,其流程圖如3所示。
圖3 軟件設(shè)計(jì)流程圖
如圖3所示,利用MATLAB/TDATool軟件設(shè)計(jì)FIR低通濾波器,由于采用單一濾波器進(jìn)行幅度調(diào)整方法,對(duì)濾波器過(guò)渡帶要求不是很高,要求阻帶衰減較大以減少噪聲干擾,所以選用了Kaiser窗函數(shù),采樣頻率為44 100Hz,截止頻率為8 000Hz,濾波器介數(shù)為64。
最后將這兩組均衡器參數(shù)進(jìn)行傅里葉逆變換(ifft),并取其實(shí)部即可得均衡器系數(shù)。在將該均衡器通過(guò)FDATool工具中的DSP模塊導(dǎo)入到SIMULINK設(shè)計(jì)模型中進(jìn)行仿真。該SIMULINK仿真模型如圖5所示。測(cè)試當(dāng)使用麥克風(fēng)輸入語(yǔ)音或語(yǔ)音文件輸入語(yǔ)音時(shí),輸入語(yǔ)音的變化,判斷其特點(diǎn)是否滿足設(shè)計(jì)要求,如不滿足則返回從新設(shè)計(jì)均衡器參數(shù),如將擬合所得參數(shù)取平方,立方等以加大均衡器改變語(yǔ)音信號(hào)的幅度。直到聽(tīng)到的語(yǔ)音信號(hào)滿足要求為止。最后將得到的均衡器的系數(shù)提供給FPGA使用。
由于生成的均衡器系數(shù)為8位二進(jìn)制數(shù),與輸入八位數(shù)據(jù)相乘,同時(shí)加上一位符號(hào)位,即要求乘法器為兩乘積因子為9位,輸入為17位的模塊。
有符號(hào)加減法模塊:在有符號(hào)加減法模塊中,其中一個(gè)加數(shù)為乘法器乘積結(jié)果17位,另一個(gè)加數(shù)為上次加法結(jié)果,與加法器最終輸出位數(shù)一致,為17+6-1=22位,其中6由濾波器階數(shù)決定即2^6=64.,再減一,每位相加后得到的最大位數(shù)為22位。
本文利用MATLAB/TDATool設(shè)計(jì)FIR濾波器,可以運(yùn)用M文件編寫和SIMULINK模塊兩種設(shè)計(jì)方法。M文件的編寫比SIMULIK模塊設(shè)計(jì)更方便,直接可以改寫程序的參數(shù)就能實(shí)現(xiàn)其功能[6、8]。
為了本次語(yǔ)音偽裝達(dá)到最佳效果(將一男性聲音偽裝成女性聲音,或?qū)⑴月曇魝窝b成男性聲音)。由于男性信號(hào)中低頻成分比較大(一般男性的基頻分布是50~180Hz),聲音渾厚。而女性語(yǔ)音信號(hào)則在高頻段較大(一般女性的基頻分布是160~380Hz),聲音聽(tīng)起來(lái)也比較尖銳。要想達(dá)到偽裝的效果,則須消弱相應(yīng)的低頻段,并增加對(duì)應(yīng)的高頻段音量以此獲得較為合適的音頻。
由此可以利用頻譜擬合曲線法將提取到的男女頻譜圖對(duì)應(yīng)頻率點(diǎn)做相除運(yùn)算,點(diǎn)除結(jié)果就是所要求的擬合曲線模型。具體仿真程序代碼如下,仿真波形如圖4所示。
圖4 兩種語(yǔ)音頻譜擬合曲線圖
將該參數(shù)導(dǎo)入一濾波器后再進(jìn)行傅里葉逆變換(ifft)即可獲得均衡器系數(shù)。最后利用硬件電路將進(jìn)行驗(yàn)證,取得了較好的偽裝效果。
于此同時(shí),本文也利用了另一種方法即頻譜搬移法,與上述方法進(jìn)行比較,最后所得的仿真效果如圖5。
abo,fs]=wavread('boy.wav',[500 1950000]);
ab1=abo(:,2);%采集語(yǔ)音信號(hào),并僅取其第一通道信號(hào)分析
ab2=fft(ab1,1000000);%語(yǔ)音信號(hào)的頻譜
ab3=[zeros(1,10000),ab2(1:1000000)']';%零向量長(zhǎng)度表示頻譜搬移量大小
ab4=real(ifft(ab3,1000000));%傅里葉逆變換,觀察頻譜搬移后的時(shí)域波形
subplot(4,1,1);plot(ab1);%原始單聲道語(yǔ)音信號(hào)時(shí)域波形
subplot(4,1,2);
plot(ab4);%經(jīng)過(guò)頻譜搬移后的語(yǔ)音信號(hào)時(shí)域頻譜
subplot(4,1,3);plot(abs(ab2));% 原始但聲道語(yǔ)音信號(hào)的頻譜
subplot(4,1,4);plot(abs(ab3));% 經(jīng)過(guò)搬移后的,語(yǔ)音信號(hào)頻譜
soundsc(ab4,fs);%播放經(jīng)過(guò)頻譜搬移后的語(yǔ)音信號(hào)
圖5 頻譜搬移效果仿真圖
由圖5所示,聽(tīng)取MATLAB播放出的處理后音頻效果可知,當(dāng)頻譜搬移較小時(shí),語(yǔ)音變化不大,有接近于機(jī)器人說(shuō)話的失真效果,隨著頻譜搬移量增大,逐漸聽(tīng)到語(yǔ)音信號(hào)如豬叫,甚至最后淪為噪聲的結(jié)果,但始終沒(méi)能得到將男性變成女性聲音的效果。為了能夠達(dá)到更好的效果本文采取了第一種[9]。
本文利用數(shù)字濾波器設(shè)計(jì)出數(shù)字均衡器,區(qū)別于其他的均衡器的設(shè)計(jì),既避免了IIR濾波器相位偏移的現(xiàn)象,又避免了FIR濾波器的延遲,因此對(duì)頻率設(shè)計(jì)具有很好的效果。以MATLAB仿真為依據(jù),F(xiàn)PGA為硬件開(kāi)發(fā)平臺(tái)共同完成。前者獲得均衡器系數(shù),后者則實(shí)現(xiàn)其硬件乘累加單元結(jié)構(gòu)設(shè)計(jì)。充分利用了軟硬件結(jié)合的優(yōu)點(diǎn),最終完成數(shù)字均衡器設(shè)計(jì)。同時(shí),與傳統(tǒng)的模擬手動(dòng)調(diào)節(jié)幅頻均衡器相比,本文增加了系統(tǒng)的仿真,能夠更清楚的設(shè)計(jì)出所需要的均衡器,并且能任意更改均衡系數(shù),得到最佳的偽裝的結(jié)果,實(shí)現(xiàn)了最好的均衡效果[7]。
[1]丁玉美,高西全.數(shù)字信號(hào)處理[M].西安:西安電子科技大學(xué)出版社,2010.
[2]尹寶珠.均衡器的合理選用[J].西部廣播電視,2005(5):15-16.
[3]謝詹奇,戴慶元.均衡器技術(shù)研究[J].微處理機(jī),2009(3):23-26.
[4]王彥.基于FPGA的工程設(shè)計(jì)與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2006.
[5]郭彩萍,倪文琦.MATLAB在數(shù)字濾波器設(shè)計(jì)中的應(yīng)用[J].山西科技,2007(6):47-48.
[6]王國(guó)志,王紅艷.Simulink在電力電子系統(tǒng)中的應(yīng)用[J].許昌學(xué)院學(xué)報(bào),2009(2):57-59.
[7]陳意軍,黎福海.應(yīng)用硬件描述語(yǔ)言VHDL開(kāi)發(fā)FPGA[J].湖南工程學(xué)院學(xué)報(bào)(自然科學(xué)版),2004(3):41-43.
[8]苗澎.MATLAB在通信電子線路教學(xué)中的應(yīng)用[J].實(shí)驗(yàn)科學(xué)與技術(shù),2008(2):21-24.
[9]宋永東,張春明.于MATLAB的數(shù)字濾波器設(shè)計(jì)及仿真應(yīng)用[J].延安大學(xué)學(xué)報(bào)(自然科學(xué)版),2007(2):33-36.