MATLAB變聲程序代碼_第1頁
MATLAB變聲程序代碼_第2頁
MATLAB變聲程序代碼_第3頁
MATLAB變聲程序代碼_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、精品好資料學(xué)習(xí)推薦% ct1clear all,close all, clc; % 定義常數(shù) FL = 80; % 幀長 WL = 240; % 窗長 P = 10; % 預(yù)測系數(shù)個數(shù) s,fs = wavread(sunday_2.wav); % 載入語音ss = s/max(s); %歸一化 L = length(s); % 讀入語音長度 FN = floor(L/FL)-2; % 計算幀數(shù) % 預(yù)測和重建濾波器 exc = zeros(L,1); % 激勵信號(預(yù)測誤差) zi_pre = zeros(P,1); % 預(yù)測濾波器的狀態(tài) s_rec = zeros(L,1); % 重建語音

2、 zi_rec = zeros(P,1); % 合成濾波器 exc_syn = zeros(L,1); % 合成的激勵信號(脈沖串) s_syn = zeros(L,1); % 合成語音last_syn = 0; %存儲上一個(或多個)段的最后一個脈沖的下標zi_syn = zeros(P,1); % 合成濾波器的狀態(tài) % 變調(diào)不變速濾波器 exc_syn_t = zeros(L,1); % 合成的激勵信號(脈沖串) s_syn_t = zeros(L,1); % 合成語音last_syn_t = 0; %存儲上一個(或多個)段的最后一個脈沖的下標zi_syn_t = zeros(P,1);

3、% 合成濾波器的狀態(tài) % 變速不變調(diào)濾波器(假設(shè)速度減慢一倍)v=.5; exc_syn_v = zeros(vL,1); % 合成的激勵信號(脈沖串) s_syn_v = zeros(vL,1); % 合成語音last_syn_v = 0; %存儲上一個(或多個)段的最后一個脈沖的下標zi_syn_v = zeros(P,1); % 合成濾波器的狀態(tài) hw = hamming(WL); % 漢明窗 % 依次處理每幀語音 for n = 3:FN % 計算預(yù)測系數(shù)(不需要掌握) s_w = s(n*FL-WL+1:n*FL).*hw; %漢明窗加權(quán)后的語音 A E = lpc(s_w, P);

4、 %用線性預(yù)測法計算P個預(yù)測系數(shù) % A是預(yù)測系數(shù),E會被用來計算合成激勵的能量 if n = 27 % (3) 觀察預(yù)測系統(tǒng)的零極點圖 zplane(1,A); end s_f = s(n-1)*FL+1:n*FL); % 本幀語音,下面就要對它做處理 % (4) 用filter函數(shù)s_f計算激勵,注意保持濾波器狀態(tài)exc1,zi_pre = filter(A,1,s_f,zi_pre); exc(n-1)*FL+1:n*FL) = exc1; %計算得到的激勵 % (5) 用filter函數(shù)和exc重建語音,注意保持濾波器狀態(tài)s_rec1,zi_rec = filter(1,A,exc1,

5、zi_rec); s_rec(n-1)*FL+1:n*FL) = s_rec1; %計算得到的重建語音 % 注意下面只有在得到exc后才會計算正確 s_Pitch = exc(n*FL-222:n*FL); PT = findpitch(s_Pitch); % 計算基音周期PT(不要求掌握) G = sqrt(E*PT); % 計算合成激勵的能量G(不要求掌握) %方法3:本段激勵只能修改本段長度tempn_syn = 1:n*FL-last_syn;exc_syn1 = zeros(length(tempn_syn),1);exc_syn1(mod(tempn_syn,PT)=0) = G;

6、 %某一段算出的脈沖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; %計算得到的合成激勵s_syn(n-1)*FL+1:n*FL) = s_syn1; %計算得到的合成語音last_syn = last_syn+PT*floor(n*FL-last_syn)/PT); % (11) 不改變基音周期和預(yù)測系數(shù),將合成激勵的長度增加一倍,再作為filter % 的輸入得到新的合成語音

7、,聽一聽是不是速度變慢了,但音調(diào)沒有變。FL_v = floor(FL/v);tempn_syn_v = 1:n*FL_v-last_syn_v;exc_syn1_v = zeros(length(tempn_syn_v),1);exc_syn1_v(mod(tempn_syn_v,PT)=0) = G; %某一段算出的脈沖exc_syn1_v = exc_syn1_v(n-1)*FL_v-last_syn_v+1:n*FL_v-last_syn_v);s_syn1_v,zi_syn_v = filter(1,A,exc_syn1_v,zi_syn_v); last_syn_v = last_

8、syn_v+PT*floor(n*FL_v-last_syn_v)/PT); exc_syn_v(n-1)*FL_v+1:n*FL_v) =exc_syn1_v;%計算得到的加長合成激勵 s_syn_v(n-1)*FL_v+1:n*FL_v) = s_syn1_v; %計算得到的加長合成語音 % (13) 將基音周期減小一半,將共振峰頻率增加150Hz,重新合成語音,聽聽是啥感受PT1 =floor(PT/2); %減小基音周期 poles = roots(A);deltaOMG = 150*2*pi/8000;for p=1:10 %增加共振峰頻率,實軸上方的極點逆時針轉(zhuǎn),下方順時針轉(zhuǎn) if

9、 imag(poles(p)0 poles(p) = poles(p)*exp(j*deltaOMG); elseif imag(poles(p)0 poles(p) = poles(p)*exp(-j*deltaOMG); endendA1=poly(poles);if n=27 figure; zplane(1,A1);endtempn_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

10、= 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 % (6)s ,exc 和 s_rec 的區(qū)別figure;subplot(3,

11、1,1), plot(exc), xlabel(n (samples), ylabel(Amplitude), title(激勵信號);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原語音信號);subplot(3,1,3), plot(s_rec), xlabel(n (samples), ylabel(Amplitude), title(重建語音信號);figure;subplot(3,1,1), plot(exc), xlabel(n (samples), ylabel(Amplitude),

12、title(激勵信號), XLim(15*FL+1,16*FL);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原語音信號), XLim(15*FL+1,16*FL);subplot(3,1,3), plot(s_rec), xlabel(n (samples), ylabel(Amplitude), title(重建語音信號), XLim(15*FL+1,16*FL);sound(exc);pause(2); sound(s); pause(2);sound(s_rec);pause(2);%原始語

13、音與合成語音的差別figure;subplot(3,1,1), plot(exc_syn), xlabel(n (samples), ylabel(Amplitude), title(合成激勵信號);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原語音信號);subplot(3,1,3), plot(s_syn), xlabel(n (samples), ylabel(Amplitude), title(合成語音信號);sound(s); pause(2);sound(s_syn);pause(2);

14、%變速不變調(diào)figure;subplot(3,1,1), plot(exc_syn_v), xlabel(n (samples), ylabel(Amplitude), title(合成慢速激勵信號) ,XLim(0,length(exc_syn_v);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原語音信號), XLim(0,length(s);subplot(3,1,3), plot(s_syn_v), xlabel(n (samples), ylabel(Amplitude), title(合成慢速語音信號), XLim(0,length(s_syn_v); sound(s); pause(2);sound(s_syn_v);pause(4); %變調(diào)不變速figure;subplot(3,1,1), plot(exc_syn_t), xlabel(n (samples), ylabel(Amplitude), title(合成高調(diào)激勵信號) ,XLim(0,length(exc_syn_t);subplot(3,1,2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論