基于MATLAB算法的數(shù)字變聲器.doc_第1頁(yè)
基于MATLAB算法的數(shù)字變聲器.doc_第2頁(yè)
基于MATLAB算法的數(shù)字變聲器.doc_第3頁(yè)
基于MATLAB算法的數(shù)字變聲器.doc_第4頁(yè)
基于MATLAB算法的數(shù)字變聲器.doc_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

基于MATLAB算法的數(shù)字變聲器【摘要】變聲器的原理是通過改變輸入聲音頻率,進(jìn)行改變聲音的音色、音調(diào),使輸出聲音在感官上與原聲音不同。變聲器是借助對(duì)聲音音色和音調(diào)的雙重復(fù)合改變,實(shí)現(xiàn)輸出聲音的改變。通過自己發(fā)聲,共振峰頻率的改變是基于重采樣實(shí)現(xiàn)的。同時(shí)用LPC倒譜分析法分析共振峰的范圍,通過MATLAB編寫程序并構(gòu)置GUI界面。實(shí)驗(yàn)中通過MATLAB軟件對(duì)采集來的語(yǔ)言信號(hào)進(jìn)行頻譜分析,討論不同人之間的噪音源參數(shù)和共振峰參數(shù),通過對(duì)不同人語(yǔ)言信號(hào)頻率和幅度的改變來實(shí)現(xiàn)不同人之間的語(yǔ)音轉(zhuǎn)換?!娟P(guān)鍵詞】短時(shí)自相關(guān)法; LPC倒譜; 語(yǔ)音信號(hào); matlab GUI;1引言隨著生活水平的提高,科技的不斷進(jìn)步,很多人為了娛樂,從而希望改變自己的聲音;還有如今的許多的訪問節(jié)目為了保護(hù)被訪問者,都對(duì)聲音進(jìn)行了相應(yīng)的處理。本設(shè)計(jì)通過編寫matlab程序,借助對(duì)聲音音色和音調(diào)的雙重復(fù)合改變,實(shí)現(xiàn)輸出聲音的改變。共振峰頻率的改變是基于重采樣實(shí)現(xiàn)的,從重采樣原理知道,這也同時(shí)印發(fā)了基頻的變化,為保證基頻變化和共振峰頻率變化的獨(dú)立、互不相關(guān),在基頻移動(dòng)時(shí)必須考慮抵消重采樣帶來的偏移,理論上只要基頻檢測(cè)足夠精確,確實(shí)可以保證基頻改變和共振峰頻率改變間的互不相關(guān)。保證變聲效果的自然度主要是沒有采用基因檢測(cè)將基因移動(dòng)和共振峰變化徹底隔離的緣故。本次課程設(shè)計(jì)就是運(yùn)用我們所學(xué)到的理論知識(shí),用MATLAB軟件來實(shí)現(xiàn)對(duì)語(yǔ)音信號(hào)的變聲處理,理論聯(lián)系實(shí)際,從而更好地掌握以及運(yùn)用所學(xué)習(xí)的知識(shí)。2數(shù)字變聲器的原理與算法2.1基本原理語(yǔ)音科學(xué)家將人類發(fā)聲過程視作一個(gè)由聲門源輸送的氣流經(jīng)以聲道、口、鼻腔組成的濾波器調(diào)制而成的。人類語(yǔ)音可分為有聲語(yǔ)音和無聲語(yǔ)音,前者是由聲帶振動(dòng)激勵(lì)的脈沖信號(hào)經(jīng)聲腔調(diào)制變成不同的音,它是人類語(yǔ)言中元音的基礎(chǔ),聲帶振動(dòng)的頻率稱為基頻。無聲語(yǔ)音則是聲帶保持開啟狀態(tài),禁止振動(dòng)引發(fā)的。一般來說,由聲門振動(dòng)決定的基頻跟說話人的性別特征有關(guān),如下表,而無聲語(yǔ)音則沒有體現(xiàn)這個(gè)特征。說話人的個(gè)性化音色和語(yǔ)音的另外一個(gè)聲學(xué)參數(shù)共振峰頻率的分布有關(guān)。兒童由于聲道短,其共振峰頻率高于成年人,成年女性的聲道一般短于成年男性,所以女性的共振峰頻率一般高于男性。在進(jìn)行性別變聲時(shí),主要考慮基音周期、基頻和共振峰頻率的變化。其中男生、女生和童聲的基頻、共振峰的關(guān)系如圖1所示;基音周期改變時(shí),基頻、共振峰同時(shí)變化,若伸展既有男變女、女變童,反之亦可。本實(shí)驗(yàn)是基于打開一種聲音進(jìn)行相關(guān)參數(shù)提取,修改接近于女聲、男聲或童聲,實(shí)現(xiàn)聲音的變換。 圖1 人群基頻與共振峰的關(guān)系2.2實(shí)現(xiàn)過程及算法采用線性預(yù)測(cè)參數(shù)合成法。線性預(yù)測(cè)參數(shù)合成法利用LPC語(yǔ)音分析方法,通過分析自然語(yǔ)音樣本,計(jì)算出LPC系數(shù),就可以建立信號(hào)產(chǎn)生模型,從而合成出語(yǔ)音。大致流程如圖2所示。圖2 制作流程 2.2.1基于短時(shí)自相關(guān)法的基音周期估值對(duì)語(yǔ)言信號(hào)進(jìn)行低通濾波,然后進(jìn)行自相關(guān)計(jì)算。在低通濾波時(shí),采用巴特沃斯濾波器。根據(jù)人的說話特征設(shè)定相應(yīng)指標(biāo)參數(shù),對(duì)本段語(yǔ)音設(shè)計(jì)算出巴特沃斯模擬濾波器的階數(shù)N為5,3dB截止頻率c, c=(100.1ap-1)-12n,算出c為0.175,歸一化低通原型系統(tǒng)函數(shù)為:Ga(p)=1p5+b4p4+b3p3+b2p2+b1p+b0其中b0=1.0000,b1=3.2361,b2=5.2361,b3=5.2361,b4=3.2361將p=s/c帶人Ga(p)中,得到低通濾波器,Hs=c5s5+b4c2s4+b2c3s2+b1c4s+b0c5根據(jù)設(shè)定的濾波器編寫matlab程序,當(dāng)信號(hào)經(jīng)過低通濾波器后,對(duì)原始信號(hào)濾波產(chǎn)生結(jié)果如下圖2所示,低通濾波后,保留基音頻率,然后再用8kHz采樣頻率進(jìn)行采樣,采樣序列為x(n),然后進(jìn)行下一步的自相關(guān)計(jì)算。圖3 原始信號(hào)低通濾波 2.2.2語(yǔ)音信號(hào)的短時(shí)自相關(guān)函數(shù)定義語(yǔ)音信號(hào)自相關(guān)函數(shù)如下:Rnk=n=0n=k-n-1xnnxn(n+k)其中k為信號(hào)延遲點(diǎn)數(shù): xnn為語(yǔ)音信號(hào);N為語(yǔ)音幀長(zhǎng)度。經(jīng)過低通濾波之后,取160個(gè)樣點(diǎn)數(shù),幀長(zhǎng)取10ms,對(duì)每幀語(yǔ)音求短時(shí)自相關(guān),取得自相關(guān)最大點(diǎn)數(shù),自相關(guān)函數(shù)在基音周期處表現(xiàn)為峰值,這些峰值點(diǎn)之間的間隔的平均值就是基音周期。 2.2.3 LPC倒譜法提取共振峰通過線性預(yù)測(cè)分析得到合成濾波器的系統(tǒng)函數(shù)為HZ=11-i=1paiz-i 其沖擊響應(yīng)為h(n),ai為預(yù)測(cè)系數(shù)。然后求h(n)的倒譜(n),首先根據(jù)同態(tài)分析方法,有(z)=logH(z),因?yàn)镠(z)是最小相位的,即在單位圓內(nèi)是解析的,所以(z)可以展開成級(jí)數(shù)形式,即(z)=n=1(n)z-n,也就是說(z)的逆變換(n)是存在的,設(shè)(n)=0,將等式兩端分別對(duì)z-1求導(dǎo),得到: n=1n(n)z-n+1=i=1piz-i+11-i=1paiz-i有(1-i=1paiz-i)n=1n(n)z-n+1=n=1iz-i+1, 令式左右兩邊Z的各次冪前系數(shù)分別相等得到:(1)=1(n)=an+i=1n-1(1-in)ai(n-i) 1np(n)=i=1n-1(1-in)ai(n-i) np在本實(shí)驗(yàn)中,取預(yù)測(cè)階數(shù)為10,語(yǔ)音的樣點(diǎn)數(shù)為160,按照上式可直接從預(yù)測(cè)系數(shù)ai求得倒譜(n),這個(gè)倒譜是根據(jù)線性預(yù)測(cè)模型得到,即稱為L(zhǎng)PC倒譜。2.2.4線性預(yù)測(cè)語(yǔ)音信號(hào)合成根據(jù)線性預(yù)測(cè)的基本思想,用過去M個(gè)樣點(diǎn)值來預(yù)測(cè)現(xiàn)在或未來的樣點(diǎn)值:(n)=i=1Maiy(n-i)(n)是預(yù)測(cè)信號(hào),ai為預(yù)測(cè)系數(shù),y(n)為取樣信號(hào),預(yù)測(cè)誤差(n):E2(n)=Eyn-i=1Maiy(n-i)2為使E2(n)最小,對(duì)ai求偏導(dǎo),并令其為零,有:Eyn-i=1Maiy(n-i)y(n-j)=0 j=1,M上式表明采用最佳預(yù)測(cè)系數(shù)時(shí),預(yù)測(cè)誤差與過去的樣點(diǎn)值正交。由于語(yǔ)音信號(hào)的短時(shí)平穩(wěn)性,要分幀處理,對(duì)于每一個(gè)樣點(diǎn)值記為 yn(n), yn(n+N-1),這段語(yǔ)音記為Yn。對(duì)于語(yǔ)音段Yn,并記n(j,i)=Eynm-jym(m-i),對(duì)于語(yǔ)音段Yn,它的自相關(guān)函數(shù)為: Rnj=m=jn-1ynmyn(m-j) n=1,M根據(jù)Yulewalker方程,可以解出樣值,用這種方法定期地改變激勵(lì)參數(shù)u(n)和預(yù)測(cè)系數(shù)ai,并使用修改過后的基因周期和共振峰參數(shù),就能合成出語(yǔ)音,合成語(yǔ)音樣本如下:S(n)=i=1pais(n-i)+Gu(n)ai為預(yù)測(cè)系數(shù);G為模型增益;u(n)為激勵(lì);合成樣本s(n);p為預(yù)測(cè)器階數(shù);運(yùn)行算法2.2.5流程圖開始開始打開音頻導(dǎo)入語(yǔ)音數(shù)據(jù)S 數(shù)據(jù)歸一化變童聲女變男男變女建立濾波器重建語(yǔ)言合成并加窗確定幀數(shù)線性預(yù)測(cè)法預(yù)測(cè)p個(gè)系數(shù)計(jì)算減小基音周期提取共振峰合成語(yǔ)音合成激勵(lì)3數(shù)字變聲器的軟件實(shí)現(xiàn)及仿真結(jié)果3.1 界面設(shè)計(jì)在設(shè)計(jì)數(shù)字變聲器的界面時(shí),使用了MATLAB提供的可視化的界面環(huán)境Guide。相比通過編寫程序進(jìn)行GUI的設(shè)計(jì),可視化的界面環(huán)境更加方便快捷。見圖4圖4 界面設(shè)計(jì) 1按鈕組:設(shè)計(jì)中使用了兩個(gè)按鈕組,把打開、原聲、男變女、女變男、童聲三項(xiàng)功能放在一組;另一個(gè)把語(yǔ)音的圖像 即4個(gè)axes放在了一組。 2按鈕:最常用的控件,用于相應(yīng)用戶的鼠標(biāo)單擊,按鈕上有說明文字說明其作用。設(shè)計(jì)中使用了五個(gè)按鈕,分別用于打開、原聲、男變女、女變男、童聲。3 軸: 用于顯示圖像。3.2回調(diào)函數(shù)對(duì)控件的Callback屬性編程是實(shí)現(xiàn)GUI的基本機(jī)制,我們下來就要在各函數(shù)中編寫程序代碼,完成各回調(diào)函數(shù)的功能。 (1)打開function dakai_Callback(hObject, eventdata, handles)filename,pathname=uigetfile(*.wav,ALL FILES,選擇聲音);ifisequal(filename pathname,0,0)return;endstr=pathname filename;temp,Fs=audioread(str);temp1=resample(temp,80,441);handles.y=temp1;handles.y1=temp;handles.Fs=Fs;guidata(hObject,handles);(2)原聲function yuansheng_Callback(hObject, eventdata, handles)c=handles.Fs;sound(handles.y1,c);plot(handles.axes1,handles.y1)title(handles.axes1,時(shí)域圖);ysize=size(handles.y1);y1=fft(handles.y,length(handles.y1);ysize=size(y1);plot(handles.axes2,abs(y1);xlabel(handles.axes2,頻率);ylabel(handles.axes2,幅度);title(handles.axes2,頻率特性);(3)男變女function nanbiannv_Callback(hObject, eventdata, handles)FL = 80 ; % 幀移 WL = 240 ; % 窗長(zhǎng) P = 10 ; %預(yù)測(cè)系數(shù)個(gè)數(shù) s = handles.y;fs = handles.Fs;% 定義常數(shù) s = s/max(s); % 歸一化 L = length(s); % 讀入語(yǔ)音長(zhǎng)度 FN = floor(L/FL)-2; % 計(jì)算幀長(zhǎng),floor;向負(fù)無窮方向% 預(yù)測(cè)和重建濾波器exc = zeros(L,1); % 激勵(lì)信號(hào),double類零矩陣L行1列zi_pre = zeros(P,1); % 預(yù)測(cè)濾波器狀態(tài)s_rec = zeros(L,1); % 重建語(yǔ)音zi_rec = zeros(P,1);% 變調(diào)濾波器exc_syn_t = zeros(L,1); % 合成的激勵(lì)信號(hào),創(chuàng)建一個(gè)L行1列的0脈沖s_syn_t = zeros(L,1); % 合成語(yǔ)音last_syn_t = 0; % 存儲(chǔ)上一個(gè)段的最后一個(gè)脈沖的下標(biāo)zi_syn_t = zeros(P,1); % 合成濾波器hw = hamming(WL); %漢明窗%濾波器% 依次處理每幀語(yǔ)音for n = 3:FN %從第三個(gè)子數(shù)組開始% 計(jì)算預(yù)測(cè)系數(shù)s_w = s(n*FL-WL+1:n*FL).*hw; %漢明窗加權(quán) A,E=lpc(s_w,P); %線性預(yù)測(cè)計(jì)算預(yù)測(cè)系數(shù)% A是預(yù)測(cè)系數(shù),E會(huì)被用來計(jì)算合成激勵(lì)的能量s_f=s(n-1)*FL+1:n*FL); % 本幀語(yǔ)音%利用filter函數(shù)重建語(yǔ)音 exc1,zi_pre = filter(A,1,s_f,zi_pre); exc(n-1)*FL+1:n*FL) = exc1; %計(jì)算激勵(lì)%利用filter函數(shù)重建語(yǔ)音 s_rec1,zi_rec = filter(1,A,exc1,zi_rec);s_rec(n-1)*FL+1:n*FL) = s_rec1; %重建語(yǔ)音% 下面只有得到exc后才可以s_Pitch = exc(n*FL-222:n*FL); PT(n) = findpitch(s_Pitch); %計(jì)算基音周期pt G = sqrt(E*PT(n); %計(jì)算合成激勵(lì)的能量G% tempn_syn = 1:n*FL-last_syn;% exc_syn1 = zeros(length(tempn_syn),1);% exc_syn1(mod(tempn_syn,PT)=0) = G; %某一段算出的脈沖% exc_syn1 = exc_syn1(n-1)*FL-last_syn+1:n*FL-last_syn);% s_syn1,zi_syn = filter(1,A,exc_syn1,zi_syn);% exc_syn(n-1)*FL+1:n*FL)=exc_syn1; %計(jì)算得到合成激勵(lì)% s_syn(n-1)*FL+1:n*FL) = s_syn1; %計(jì)算得到合成語(yǔ)音% last_syn = last_syn+PT*floor(n*FL-last_syn)/PT); PT1 =floor(PT(n)/2); %減小基音周期poles = roots(A);deltaOMG =100*2*pi/fs;for p=1:10 %增加共振峰ifimag(poles(p)0poles(p) = poles(p)*exp(1j*deltaOMG);elseifimag(poles(p)=0.85*Rop Rop=R2; Top=T2;endif R30.85*Rop Rop=R3; Top=T3;endPT=Top;return(3)女變男 function nvbiannan_Callback(hObject, eventdata, handles)FL = 80 ; % 幀移 WL = 240 ; % 窗長(zhǎng) P = 10 ; %預(yù)測(cè)系數(shù)個(gè)數(shù) s = handles.y;fs = handles.Fs;% 定義常數(shù) s = s/max(s); % 歸一化 L = length(s); % 讀入語(yǔ)音長(zhǎng)度 FN = floor(L/FL)-2; % 計(jì)算幀長(zhǎng),floor;向負(fù)無窮方向% 預(yù)測(cè)和重建濾波器exc = zeros(L,1); % 激勵(lì)信號(hào),double類零矩陣L行1列zi_pre = zeros(P,1); % 預(yù)測(cè)濾波器狀態(tài)s_rec = zeros(L,1); % 重建語(yǔ)音zi_rec = zeros(P,1);% 變調(diào)濾波器exc_syn_t = zeros(L,1); % 合成的激勵(lì)信號(hào),創(chuàng)建一個(gè)L行1列的0脈沖s_syn_t = zeros(L,1); % 合成語(yǔ)音last_syn_t = 0; % 存儲(chǔ)上一個(gè)段的最后一個(gè)脈沖的下標(biāo)zi_syn_t = zeros(P,1); % 合成濾波器hw = hamming(WL); %漢明窗%濾波器% 依次處理每幀語(yǔ)音for n = 3:FN %從第三個(gè)子數(shù)組開始% 計(jì)算預(yù)測(cè)系數(shù)s_w = s(n*FL-WL+1:n*FL).*hw; %漢明窗加權(quán) A,E=lpc(s_w,P); %線性預(yù)測(cè)計(jì)算預(yù)測(cè)系數(shù)% A是預(yù)測(cè)系數(shù),E會(huì)被用來計(jì)算合成激勵(lì)的能量s_f=s(n-1)*FL+1:n*FL); % 本幀語(yǔ)音%利用filter函數(shù)重建語(yǔ)音 exc1,zi_pre = filter(A,1,s_f,zi_pre); exc(n-1)*FL+1:n*FL) = exc1; %計(jì)算激勵(lì)%利用filter函數(shù)重建語(yǔ)音 s_rec1,zi_rec = filter(1,A,exc1,zi_rec);s_rec(n-1)*FL+1:n*FL) = s_rec1; %重建語(yǔ)音% 下面只有得到exc后才可以s_Pitch = exc(n*FL-222:n*FL); PT(n) = findpitch(s_Pitch); %計(jì)算基音周期pt G = sqrt(E*PT(n); %計(jì)算合成激勵(lì)的能量G% tempn_syn = 1:n*FL-last_syn;% exc_syn1 = zeros(length(tempn_syn),1);% exc_syn1(mod(tempn_syn,PT)=0) = G; %某一段算出的脈沖% exc_syn1 = exc_syn1(n-1)*FL-last_syn+1:n*FL-last_syn);% s_syn1,zi_syn = filter(1,A,exc_syn1,zi_syn);% exc_syn(n-1)*FL+1:n*FL)=exc_syn1; %計(jì)算得到合成激勵(lì)% s_syn(n-1)*FL+1:n*FL) = s_syn1; %計(jì)算得到合成語(yǔ)音% last_syn = last_syn+PT*floor(n*FL-last_syn)/PT); PT1 =floor(PT(n)/2); %減小基音周期poles = roots(A);deltaOMG =100*2*pi/fs;for p=1:10 %增加共振峰ifimag(poles(p)0poles(p) = poles(p)*exp(1j*deltaOMG);elseifimag(poles(p)0 ; poles(p) = poles(p)*exp(1i*deltaOMG); else if imag(poles(p)0 ; poles(p) = poles(p)*exp(-1i*deltaOMG); end endend A1=poly(poles); tempn_syn_t = 1:n*FL-last_syn_t; exc_syn1_t = zeros(length(tempn_syn_t),1); exc_syn1_t(mod(tempn_syn_t,PT1)=0) = G; exc_syn1_t = exc_syn1_t(n-1)*FL-last_syn_t+1:n*FL-last_syn_t); s_syn1_t,zi_syn_t = filter(1,A1,exc_syn1_t,zi_syn_t); exc_syn_t(n-1)*FL+1:n*FL) = exc_syn1_t; s_syn_t(n-1)*FL+1:n*FL) = s_syn1_t; last_syn_t = last_syn_t+PT1*floor(n*FL-last_syn_t)/PT1);end plot(handles.axes4,exc_syn_t) xlabel(handles.axes4,時(shí)域圖); ylabel(handles.axes4,頻率); title(handles.

溫馨提示

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

評(píng)論

0/150

提交評(píng)論