LPC語音合成實驗報告_第1頁
LPC語音合成實驗報告_第2頁
LPC語音合成實驗報告_第3頁
LPC語音合成實驗報告_第4頁
LPC語音合成實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、語音合成實驗報告 李飛 王江為 袁曉杰 陳新依 王永勝一、 應用Matlab實現(xiàn)語音合成的背景語音合成技術(shù)的研究已有兩百多年的歷史,但真正具有實用意義的近代語音合成技術(shù)是隨著計算機技術(shù)和數(shù)字信號處理技術(shù)的發(fā)展而發(fā)展起來的,主要是讓計算機能夠產(chǎn)生高清晰度、高自然度的連續(xù)語音。在語音合成技術(shù)的發(fā)展過程中,早期的研究主要是采用參數(shù)合成方法,后來隨著計算機技術(shù)的發(fā)展又出現(xiàn)了波形拼接的合成方法。參數(shù)合成的特點:調(diào)節(jié)靈活,但音質(zhì)較差。 21世紀的通信應在人與人之間、人與機器之間提供高質(zhì)量的無縫的信息交換手段。無論何時、何地,以任何方式通信,語音通信將是最基本、最重要的方式之一。聲音信號的處理和通信領域聯(lián)系

2、密切,掌握音頻信號的壓縮編碼、頻譜分析和合成的原理與方法,對通信領域工作的開展具有重要意義。Matlab是由MathWorks公司于1984年推出的一套科學計算軟件。Matlab具有強大的計算功能和諸多的工具箱,并且提供了COM接口,能方便地與VC等程序開發(fā)平臺對接。使用Matlab來實現(xiàn)語音合成能夠減少工作量,我們無需關(guān)心某些函數(shù)的實現(xiàn),只需知道函數(shù)的作用和使用什么函數(shù)就夠了,這就使Matlab成為科學研究和分析利器。二、 使用Matlab實現(xiàn)語音合成的目的1. 熟悉Matlab的使用 2. 了解語音合成的原理和過程3. 重點學習參數(shù)合成法的實現(xiàn)三、 語音合成的原理1.語音生成模型通過對聲管

3、的研究,發(fā)現(xiàn)它可以用若干段級連的不等截面積均勻管道進行描述,一般稱作級連無損聲管模型。采用流體力學的方法可以證明每一截均勻管道的頻響能夠用一個但極點模型來近似,這樣N段管道組成的聲管就可以用一個N階全極點濾波器表述,即: (9.1)對于典型的男聲,N=10,所有的極點要分別構(gòu)成共軛對以保證系數(shù)都是實數(shù)。在綜合考慮清音信號,就可以得到產(chǎn)生語音信號的離散語音模型,如圖所示:周期脈沖發(fā)生器聲門脈沖模型G(z)聲道模型V(z)輻射模型R(z)隨機噪聲發(fā)生器清音增益語音信號圖1:產(chǎn)生語音信號的離散時域模型型對上述模型進行充分簡化。首先去掉隨機信號激勵部分,認為激勵信號是一個脈沖序列,不考慮有無周期。其次

4、去掉聲門脈沖模型和口唇的輻射模型,因而得到如圖所示最簡單的語音模型:脈沖序列發(fā)生器聲道模型V(z)圖2:簡化的語音生成語音信號假設激勵信號用e(n)表示,語音信號用s(n)表示,根據(jù)全極點模型表達式,有: (9.2)從而可以用聲管模型對激勵信號進行濾波得到語音信號。2. 語音預測模型假設已經(jīng)知道了系數(shù)ai,那么將圖2的輸入和輸出對換,就構(gòu)成了語音的預測模型,即語音信號s(n)送入預測濾波器,得到預測殘差e(n) (9.3)假設信號的發(fā)端和收端都知道預測系數(shù)ai,那么發(fā)端只需要把誤差e(n)傳到收端即可,因為收端可以用e(n)作為上述差分方程的激勵得到重建語音。在發(fā)端,語音s(n)是濾波器的輸入

5、,而誤差e(n)是輸出。事實上,系數(shù)ai當然也需要從發(fā)端傳到收端,但因為語音具有短時平穩(wěn)性,即在短時間內(nèi)(比如10ms),系數(shù)ai可以認為不發(fā)生變化,所以也不必太頻繁地傳輸,因而采用預測技術(shù)后,總是可以大幅度地降低語音的帶寬。這種通過現(xiàn)行預測方法壓縮語音數(shù)據(jù)量的技術(shù)稱為線性預測編碼。3. 語音重建模型如果知道激勵信號x(n)和濾波器系數(shù)ai,就可以利用激勵生成重建語音了和語音生成模型的公式完全相同 (9.4)但這個模型被稱為語音重建模型,為了同生成模型區(qū)分開,稱為重建語音,如果x(n)正好等于e(n),那么重建語音就會和原始語音s(n)完全相同。語音的非平穩(wěn)性(雖然短時平穩(wěn))導致預測系數(shù)ai是

6、時變的,一般每1020ms就會發(fā)生一些變化以產(chǎn)生不同的音節(jié)。在這種情況下,濾波過程也要分段進行,即每次用不同的濾波器系數(shù),但相鄰兩次濾波必須要保持濾波器的狀態(tài)不發(fā)生變化。4. 諧振和共振峰頻率語音生成模型的每一對共軛極點都對應一個衰減的正弦信號的特征響應。例如一對共軛極點在時域沖激響應中的貢獻是。其中極點幅度決定衰減速度,幅角決定振蕩頻率。 對語音合成,用數(shù)字的正弦信號表示抽樣后的連續(xù)正弦信號。在這種情況下,模擬頻率和數(shù)字頻率的關(guān)系是=wT,其中T表示抽樣間隔,w表示模擬頻率(弧度),對應的 =w/2稱為共振頻率,它定義了聲道的諧振頻率。當模型參數(shù)變化時,共振峰頻率也隨著變化,從而產(chǎn)生不同的聲

7、調(diào)。四、 分析與合成語音分析和合成系統(tǒng)如圖3所示。需要做的處理聲道模型V(z)線性預測系統(tǒng)需要做的處理重建的趣味語音原始語音濾波器系數(shù)aie(n)x(n)圖3 分析和合成語音的系統(tǒng)框圖首先要分析一段(一般是10ms)語音得到它的最佳ai系數(shù)。給定這些系數(shù)后,就可以適當?shù)妮斎雭砗铣烧Z音。對于濁音信號,一種可取的激勵模型就是以特定頻率重復的單位樣值序列,這個頻率就是基音頻率。對清音,最好選擇隨機噪聲或者白噪聲作為輸入。但在不做清濁判決的情況下,全部采用周期激勵的合成質(zhì)量也可以接受。分析過程如下:首先,抽樣的語音信號被分成10ms長的段;然后,對每段數(shù)據(jù)進行統(tǒng)計分析,計算相鄰樣點的相關(guān)性并最終得到最

8、佳預測系數(shù)。合成過程就是利用這些預測系數(shù),以及周期的單位樣值序列作為輸入,依次得到每段合成語音。1、 變速不變調(diào)所謂變速不變調(diào),是指聲音播放時,速度的改變不會導致音調(diào)的變化。為了實現(xiàn)變速不變調(diào),首先需要將表示“調(diào)”的內(nèi)容從語音中分離出來,由前述語音預測模型,表示“調(diào)”的有兩個部分,一是共振峰頻率,即預測模型的參數(shù);二是基音周期,即激勵信號的參數(shù)。接下來的工作就是在不改變這兩種參數(shù)的前提下改變數(shù)據(jù)長度。即將10ms的80個樣點的激勵變成20ms160個樣點(注意保持單位樣值的周期不變),在這20ms內(nèi)保持預測模型系數(shù)不變,就合成了20ms語音了。新語音的聲調(diào)和原有語音是完全相同的,只不過時間變長

9、了而已。2、 變調(diào)不變速如前所述,可以考慮將激勵信號的頻率增加(注意不改變信號長度),同時將共振峰頻率也相應增大一些(即極點的幅角絕對值增大,或者說上半平面的極點逆時針旋轉(zhuǎn),下半平面的極點順時針旋轉(zhuǎn),但注意兩者都要旋轉(zhuǎn)相同角度而且不要轉(zhuǎn)過負實軸),這樣得到的合成語音頻率將變高。五、 語音合成的實現(xiàn)1. 基礎部分給定,假設e(n)是輸入信號,s(n)是輸出部分,求濾波器的傳遞函數(shù)如果a1=1.3789,a2=-0.9506,求共振峰頻率,并用zplane,freqz,impz分別繪出零,極點分布圖,頻率響應和單位樣值相應,用filter繪出單位樣值響應,比較和impz的是否相同。程序如下:clc

10、clear allclose allfs=8000;P=1,-1.3789,0.9506;Z=1;z,p,k=tf2zp(Z,P) %求零點,極點和增益f=abs(angle(p)*fs/(2*pi) %求共振峰頻率f=w/(2*pi)figure;subplot(221);zplane(Z,P) %畫零極點圖title(零極點圖);B=Z;A=P;H,W=freqz(B,A); % 求頻率響應subplot(222);plot(W/pi ,abs(H);xlabel(頻率omega(xpi rad/sample)title(幅度譜圖);subplot(223);plot(W/pi,angle

11、(H);xlabel(頻率omega(xpi rad/sample)title(相位譜圖);h=impz(B,A); %計算系統(tǒng)單位序列響應figure(2);subplot(211);stem(h); title(impz函數(shù)求系統(tǒng)沖激圖);k=0:400;n=0;x=(k-n)=0;Y=filter(Z,P,x); %x為單位序列,求系統(tǒng)的沖擊響應subplot(212)stem(Y);title(filter函數(shù)求系統(tǒng)沖激圖); 運行結(jié)果f=999.9447用impz和filter求出的單位樣值相應是一樣的,因為這里的輸入是單位序列,所以impz求出的單位沖擊相應與用filter求出的是

12、一樣。2 將共振峰頻率增加150HZ后,求a1和a2.f=round(f)+150;f=f(1); %共振峰頻率增加150 p1=f*2*pi/8000; %求模擬頻率omega p2=abs(p);p0=p2*exp(j*p1);p0=p0(1); p00=p2*exp(-j*p1);p00=p00(1);p3=p0;p00; %已知模值和相角求極點Z,P=zp2tf(z,p3,k) %計算系數(shù)通過運行函數(shù)求出a1=1.2072,a2=-0.95063. 語音合成的實現(xiàn)3.1常量定義與分配內(nèi)存空間clcclear allclose all(1)定義常數(shù):% dd和cc是用于變調(diào)和變速的參數(shù),

13、可以進行修改。 dd=0; %這個用于變調(diào),值大則高cc=1; %這個用于變速,值大則慢 FL = 80; % 幀長 WL = 240; % 窗長,即漢明窗的長度 P = 30; % 預測系數(shù)個數(shù),增加預測系數(shù)可以提高音質(zhì) s=wavread(voice.wav); %讀取語音 L = length(s); % 讀入語音長度 FN = floor(L/FL)-2; % 計算幀數(shù) fs=8000; %抽樣頻率FL_v=cc*FL; %改變幀長度可以變速,用于變速不變調(diào)(2)分配內(nèi)存空間 % 預測和重建濾波器(初始化空間) exc = zeros(L,1); % 激勵信號(預測誤差) excc =

14、 zeros(L,1); % 人工合成的沖擊信號,即激勵信號 s_rec = zeros(L,1); % 重建語音 hw = hamming(WL); % 漢明窗 fze=zeros(1,30); %用于保持濾波器狀態(tài)不變 fzs=zeros(1,30); %用于保持濾波器狀態(tài)不變 A=zeros(FN,(P+1); %預測系數(shù),也是聲道模型的分母部分 E=zeros(FN); pp=0; %生成激勵的初始相位=03.2語音預測部分這部分對原始語音進行預測處理的目的是取得預測系數(shù)A,基音周期PT和能量E。% 依次處理每幀語音for n = 3:FN %從第三幀到最后一幀 % 計算預測系數(shù)(不需

15、要掌握)s_w = s(n*FL-WL+1:n*FL).*hw; %漢明窗加權(quán)后的語音,用來預測A(n,:),E(n-1)*FN) = lpc(s_w, P); %用線性預測法計算P個預測系數(shù)% A是預測系數(shù),E會被用來計算合成激勵的能量。s_f = s(n-1)*FL+1:n*FL); % 本幀語音,下面就要對它做處理exc(n-1)*FL+1:n*FL),fze = filter(A(n,:),1,s_f,fze); %通過逆向聲道濾波器計算激勵s_Pitch = exc(n*FL-222:n*FL); %為什么要-222這一點有待研究PT(n) = findpitch(s_Pitch);

16、 % 計算基音周期PT(不要求掌握)end3.3語音合成部分變速不變調(diào),只改變幀長:由FL變成FL_v。變調(diào),通過共振峰頻率的改變使預測系數(shù)A發(fā)生變化,也就是聲道模型產(chǎn)生了變化。這正好符合我們所熟知的不同聲道會發(fā)出不同的聲音。% 對參數(shù)進行合成for n = 3:FN f=PT(n)/(dd/50+1); %基音周期 nn=1/fs:1/fs:FL_v/fs % 幀長度,fs控制著點的密度% excc(n-1)*FL_v+1:n*FL_v)=square(2*pi*f*nn,1);被注釋掉的這一步用于產(chǎn)生激勵信號。但是存在方波產(chǎn)生的相位問題,每幀產(chǎn)生的相位是從0開始,但是實際的長度往往不是基音

17、周期的整數(shù)倍,這也就產(chǎn)生了沖擊信號相位不連續(xù)的問題。為了解決這個問題,本文對產(chǎn)生的沖擊信號進行了改進,自編 chongji()函數(shù)解決了相位問題。其具體的原理下文將會繼續(xù)介紹。excc(n-1)*FL_v+1:n*FL_v),pp=chongji(2*pi*f*nn,pp); %自編函數(shù)解決相位問題excc(n-1)*FL_v+1:n*FL_v)=excc(n-1)*FL_v+1:n*FL_v); %轉(zhuǎn)置,以滿足向量運算的形式G(n) = sqrt(E(n-1)*FN)*PT(n); % 計算合成激勵的能量G(不要求掌握)下面是變調(diào),先用A作為多項式的參數(shù)求出當前聲道V的極點,得出數(shù)字頻率om

18、iga,共振峰頻率f=omiga/2pi/8000.對f增加或者減少某值之后再反過來求相應的多項式的參數(shù)A。這樣生成了新的聲道模型實現(xiàn)了變調(diào)。 poles = roots(A(n,:); %通過A求極點 dformant = dd*2*pi/8000; %共振峰頻率的變化 for nn=1:30 if imag(poles(nn)0 poles(nn) = poles(nn)*exp(j*dformant); elseif imag(poles(nn)0 poles(nn) = poles(nn)*exp(-j*dformant); end end% 增大共振峰頻率:增大極點的幅角絕對值,即上

19、半平面的極點逆時針轉(zhuǎn),下半平面的極點順時針轉(zhuǎn)。 A(n,:)=poly(poles); %由根值反求多項式,即由極點反求A值s_rec(n-1)*FL_v+1:n*FL_v),fzs =filter(1,A(n,:),G(n)*excc(n-1)*FL_v+1:n*FL_v),fzs); %通過聲道濾波器重現(xiàn)語音end3.4 播放并存儲合成的語音s_rec=s_rec/max(abs(s_rec); %將生成的語音歸一化到-11 sound(s_rec); wavwrite(s_rec,hecheng.wav);3.5 自編的chongji函數(shù)這個函數(shù)是為了解決沖擊函數(shù)相位不連續(xù)的問題,對于沖擊信號的產(chǎn)生信號進行改進。將初始相位賦給函數(shù),使輸出沖擊函數(shù)的相位延遲以實現(xiàn)相位的匹配。本函數(shù)可以返回一個相位用于下一次的相位匹配。function s,pp = chongji( t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論