孟若蘭,劉艷麗,陳錦苗,李昊天,王琪瑤
(承德醫(yī)學(xué)院生物醫(yī)學(xué)工程系,河北承德,067000)
關(guān)鍵字: MATLAB GUI;變聲器;設(shè)計(jì)
MATLAB是兩個(gè)詞組組合而成的,這兩詞組分別是matrix和laboratory。其用漢語可以翻譯成為矩形實(shí)驗(yàn)室或者矩形工廠。其原理或者功能是,MATLAB能夠?qū)?shù)值分析、矩陣計(jì)算、科學(xué)數(shù)據(jù)可視化以及非線性動(dòng)態(tài)系統(tǒng)的建模和仿真等諸多強(qiáng)大功能集成在一個(gè)易于使用的視窗環(huán)境中,這便為我國的科學(xué)研究、工程設(shè)計(jì)以及必須進(jìn)行有效數(shù)值計(jì)算的眾多科學(xué)領(lǐng)域帶來了一場(chǎng)全新的變革,其成功為這些科學(xué)領(lǐng)域提供了一種全面且科學(xué)的解決方案,并且成功突破了傳統(tǒng)非交互式程序設(shè)計(jì)語言(如C、Fortran)編輯模式的局限性。總而言之,MATLAB是能夠在一定程度上作為代表當(dāng)今國際科學(xué)計(jì)算軟件水平的一個(gè)重要產(chǎn)物。
關(guān)于 GUI,其英文全稱為Graphical User Interface。為了應(yīng)用方便,都習(xí)慣性使用其簡(jiǎn)稱—— GUI。 GUI用漢語翻譯稱為人機(jī)交互圖形用戶界面設(shè)計(jì)。從理論層面來進(jìn)行解釋,其主要指的是采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。GUI和傳統(tǒng)意義上所使用的計(jì)算機(jī)命令界面相比較,其最大的一個(gè)優(yōu)勢(shì)或者特點(diǎn)便是其所具備的圖形界面。但從視覺上來分析,圖形界面要比命令界面更具有可接受性,更能夠吸引住大眾的目光。
為了實(shí)現(xiàn)變聲的目的,從男聲變女聲、女聲變男聲、老人變童聲等需要在分析語音信號(hào)參數(shù)的過程當(dāng)中適時(shí)采用短時(shí)自相關(guān)法提取語音信號(hào)的基音周期。與此同時(shí),也會(huì)應(yīng)用到LPC即倒譜分析法分析共振峰的范圍,然后再通過MATLAB編寫程序來對(duì)語音參數(shù)進(jìn)行修改,進(jìn)而使其更加接近想要的聲音的范圍,構(gòu)置GUI界面。
一般情況下,在進(jìn)行性別變聲的過程中,我們需要考慮的因素主要包括幾個(gè)方面,諸如基音的周期、基音的頻率、共振峰的頻率等等,其主要變化諸如以上幾個(gè)因素的頻率來實(shí)現(xiàn)聲音的轉(zhuǎn)變。下表是不同聲音即男聲、女聲和童聲在基頻、共振峰方面的關(guān)系。
表1 人群中基頻和共振峰之間的關(guān)系
對(duì)語音信號(hào)進(jìn)行低通濾波,借助MATLAB編程采用自相關(guān)算法,對(duì)基音周期進(jìn)行估值,然后再繼續(xù)完成自相關(guān)計(jì)算。
首先,構(gòu)建巴特沃斯濾波器。我們需要根據(jù)特定人的說話特征在第一時(shí)間內(nèi)確定相應(yīng)的指標(biāo)參數(shù),然后根據(jù)本段語音設(shè)計(jì)計(jì)算出巴特沃斯模擬濾波器的階數(shù)N是5,3dB截止頻率,計(jì)算出? 為0.175,歸一化c低通原型系統(tǒng)函數(shù)為:
其中,b0=1.0000,b1=3.2361,b2=5.2361,b3=5.2361,b4=3.2361。將 P= S/ ?c代入 Ga(p)中,得到低通濾波器 :
以設(shè)定的濾波器作為根據(jù),進(jìn)行MATLAB程序的編寫,如果有信號(hào)經(jīng)過低通濾波器之后,其必然對(duì)會(huì)原始信號(hào)的濾波產(chǎn)生一定的影響。經(jīng)過低通濾波器后,其還是會(huì)保留原始基音頻率。隨后我們?cè)儆?KHz采用頻率進(jìn)行采用,采樣的序列設(shè)為X(n),然后再進(jìn)行自相關(guān)計(jì)算。
然后,語音信號(hào)的短時(shí)自相關(guān)函數(shù)
我們將語音信號(hào)的自相關(guān)函數(shù)定義為:
在這個(gè)公式當(dāng)中,不同的字母代表著不同的含義:第一,xn(n)代表的是語音信號(hào),K代表的是信號(hào)延遲點(diǎn)數(shù),N代表的是語音幀長(zhǎng)度。經(jīng)過低通濾波之后,我們選取了160個(gè)樣點(diǎn)數(shù),每一個(gè)語音幀長(zhǎng)度都確定為10ms,對(duì)每幀語音求短時(shí)自相關(guān),獲取到最大點(diǎn)數(shù),這就是其在基音周期當(dāng)中表現(xiàn)出來的峰值。而峰值之間的間隔平均值也就是我們要計(jì)算出的基音周期。在這里筆者想要強(qiáng)調(diào)一點(diǎn)內(nèi)容,因?yàn)樵趫D中并不是所有的樣點(diǎn)都是有價(jià)值的,其會(huì)摻雜著很多的野點(diǎn),因?yàn)槲覀冊(cè)诰帉慚ATLAB程序時(shí),一定要在排除掉這些野點(diǎn)之后計(jì)算出對(duì)應(yīng)基音周期。
我們?cè)诜治鼍€性預(yù)測(cè)之后,可以得出合成濾波器的系統(tǒng)函數(shù)是:
我們利用線性預(yù)測(cè)的基本思想,來對(duì)現(xiàn)在或者未來的樣點(diǎn)值進(jìn)行預(yù)測(cè),其中會(huì)借用到過去M個(gè)樣點(diǎn)值:。其中,?()yn代表的是預(yù)測(cè)信號(hào),ia代表的是預(yù)測(cè)系數(shù),而y(n)則代表的是取樣信號(hào),預(yù)測(cè)誤差ε(n)則為
基于此,我們便可以通過在某個(gè)準(zhǔn)則下使預(yù)測(cè)誤差ε( n )達(dá)到最小值的方法來決定位移的一組線性預(yù)測(cè)參數(shù)。此外,把語音信號(hào)的某一幀內(nèi)的短時(shí)均方預(yù)測(cè)誤差定義為:
關(guān)于GUI界面設(shè)計(jì),其需要在MATLAB的基礎(chǔ)上新建立起GUI,根據(jù)需求添加各個(gè)部件,完成以下設(shè)計(jì)。
圖1 GUI界面設(shè)計(jì)圖
然后,打開一段男聲錄制好的聲音,進(jìn)行仿真實(shí)驗(yàn),其具體效果如圖2所示。
圖2 最終的仿真合成變聲圖
上述此種變聲器的設(shè)計(jì)最大的優(yōu)勢(shì)就在于其新建了LPC倒譜法,專門用來提取共振峰。除此之外,其還能夠有效控制相關(guān)參數(shù),省去了很多比較復(fù)雜或者麻煩的計(jì)算步驟和問題。這會(huì)是未來變聲器的一個(gè)重要發(fā)展和完善方向。