91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

語音變速以及語音變調是語音信號處理中非常重要的兩個內容。語音信號可表述成激勵源與線性時變系統的沖激響應的卷積。若激勵源是高斯白噪聲,則聲道發清音,若激勵源是一準周期信號,則聲道發濁音。濁音在語音信號序列中影響語音速度,它是基音,是由多次諧波構成的準周期信號。語音信號序列可看成是基音周期經整數倍延拓后疊加而成。插入部分基音周期使語速降低,刪除部分基音周期使語速提高,即通過改變單位時間內輸出的語音信息量(可以通過改變語音信號的激勵的長度來實現),來達到改變語速的要求;而語音的音調的不同則是體現在基音周期和共振峰這兩個特征參數上,利用基音周期和共振峰的改變可以達到改變語調的要求。

資源截圖

代碼片段和文件信息

function?speechproc()
clear?allclose?all?clc;
????%?定義常數
????FL?=?80;????????????????%?幀長
????WL?=?240;???????????????%?窗長
????P?=?10;?????????????????%?預測系數個數??
????s?=?readspeech(‘voice.wav‘100000);?????????????%?載入語音s
s?=?s/max(s); %歸一化
????L?=?length(s);??%?讀入語音長度
????FN?=?floor(L/FL)-2;??%?計算幀數
????
%?預測和重建濾波器
????exc?=?zeros(L1);???????%?激勵信號(預測誤差)
????zi_pre?=?zeros(P1);????%?預測濾波器的狀態
????s_rec?=?zeros(L1);?????%?重建語音
????zi_rec?=?zeros(P1);
????
%?合成濾波器
????exc_syn?=?zeros(L1);???%?合成的激勵信號(脈沖串)
????s_syn?=?zeros(L1);?????%?合成語音
last_syn?=?0;???%存儲上一個(或多個)段的最后一個脈沖的下標
zi_syn?=?zeros(P1);???%?合成濾波器的狀態
????
%?變調不變速濾波器
????exc_syn_t?=?zeros(L1);???%?合成的激勵信號(脈沖串)
????s_syn_t?=?zeros(L1);?????%?合成語音
last_syn_t?=?0;???%存儲上一個(或多個)段的最后一個脈沖的下標
zi_syn_t?=?zeros(P1);???%?合成濾波器的狀態
????
%?變速不變調濾波器(假設速度減慢一倍)
v=.5;
????exc_syn_v?=?zeros(v\L1);???%?合成的激勵信號(脈沖串)
????s_syn_v?=?zeros(v\L1);?????%?合成語音
last_syn_v?=?0;???%存儲上一個(或多個)段的最后一個脈沖的下標
zi_syn_v?=?zeros(P1);???%?合成濾波器的狀態

????hw?=?hamming(WL);???????%?漢明窗
????
????%?依次處理每幀語音
????for?n?=?3:FN

????????%?計算預測系數(不需要掌握)
????????s_w?=?s(n*FL-WL+1:n*FL).*hw;???%漢明窗加權后的語音
????????[A?E]?=?lpc(s_w?P)???%用線性預測法計算P個預測系數
????????????????????????????????????????%?A是預測系數,E會被用來計算合成激勵的能量

????????if?n?==?27
????????%?(3)?觀察預測系統的零極點圖
????????????zplane(1A);
????????end
????????
????????s_f?=?s((n-1)*FL+1:n*FL);???????%?本幀語音,下面就要對它做處理

????????%?(4)?用filter函數s_f計算激勵,注意保持濾波器狀態
[exc1zi_pre]?=?filter(A1s_fzi_pre);
????????
????????exc((n-1)*FL+1:n*FL)?=?exc1;?%計算得到的激勵

????????%?(5)?用filter函數和exc重建語音,注意保持濾波器狀態
[s_rec1zi_rec]?=?filter(1Aexc1zi_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(不要求掌握)

????????
????????%?(10)?生成合成激勵,并用激勵和filter函數產生合成語音
%?方法1:本段激勵可以向右超出段長一個基音周期
%? tempn_syn?=?[1:n*FL-last_syn+PT-1]‘;
%? exc_syn1?=?zeros(length(tempn_syn)1);
%? exc_syn1(mod(tempn_synPT)==0)?=?G;?%某一段算出的脈沖
%? [s_syn1zi_syn]?=?filter(1Aexc_syn1zi_syn);
%? exc_syn(last_syn+1:last_syn+length(tempn_syn))?=?exc_syn1;
%? s_syn(last_syn+1:last_syn+length(tempn_syn))?=?s_syn1;
%? last_syn?=?last_syn+PT*floor(length(tempn_syn)/PT);
???????
%方法2:本段激勵可以向左侵占前面一段
%? tempn_syn?=?[1:n*FL-last_syn]‘;
%? exc_syn1?=?zeros(length(tempn_syn)1);
%? exc_syn1(mod(tempn_synPT)==0)?=?G;?%某一段算出的脈沖
%? [s_syn1zi_syn]?=?filter(1Aexc_syn1zi_syn);
%? exc_syn(last_syn+1:n*FL)?=?exc_syn1;
%? s_syn(last_syn+1:n*FL)?=?s_syn1;
%? last_syn?=?last_syn+PT*floor((n*FL-last_syn)/PT);

%? %方法3:本段激勵只能修改本段長度
%? tempn_syn?=?[1:n*FL-last_syn]‘;
%? exc_syn1?=?zeros(length(tempn_syn)1);
%? exc_syn1(mod(tempn_synPT)==0)?=?G;?%某一段算出的脈沖
%? exc_syn1?=?exc_syn1((n-1)*FL-last_syn+1:n*FL-last_syn);
%? [s_syn1zi_syn]?=?filter(1Aexc_syn1zi_syn);
%? exc_syn((n-1)*FL+1:n*FL)?=??exc_syn1;???%計算得到的合成激勵
%? s_syn((n-1

評論

共有 條評論