Miyazawa’s Pukiwiki
MATLAB Note/音声の分析/VoiceSauce
はすでに存在します。
開始行:
#contents
*VoiceSauce v1.19 を使って音声を解析する [#gebaf49e]
-[[VoiceSauce (Yen-Liang Shue, EDU, 2011):http://www.ee.u...
--http://www.ee.ucla.edu/~spapl/voicesauce/
--MATLAB版, Windows版, Macintosh版があります。
-解析可能な特徴量は以下の通り。
F0
Formants F1-F4
H1(*)
H2(*)
H4(*)
A1(*)
A2(*)
A3(*)
H1(*)-H2(*)
H2(*)-H4(*)
H1(*)-A1(*)
H1(*)-A2(*)
H1(*)-A3(*)
Energy
Cepstral Peak Prominence
Harmonic to Noise Ratios
--アスタリスクがついているものは、Iseli & Alwan のアルゴ...
--特徴量によっては STRAIGHT, Snack Sound Toolkit, Praat ...
-Limitations (以下、日本語訳したもの)
--推定するパラメータの多くはF0に依存するので、''有声音し...
--フォルマント周波数の修正がもっとも良く働くのは、F1が正...
--非英語名のフォルダに含まれている .wav ファイルはフォル...
**MATLAB版を使ってみる [#x52ec340]
-[[リンク先:http://www.ee.ucla.edu/~spapl/voicesauce/]]の...
-以下、[[VoiceSauce Manual:http://www.ee.ucla.edu/~spapl/...
-以下、「MATLAB」と発音したサンプル英語音声を解析してみま...
#geshi(matlab){{
load mtlb; %MATLABと発音した英語音声
disp(strcat('サンプリング周波数は', int2str(Fs), '[Hz] ...
sound(mtlb, Fs) %再生
wavwrite(mtlb, Fs, 32, 'mtlb_file.wav'); %量子化ビット...
}}
-まずは VoiceSauce.m を実行する
--下のウインドウが出る
#ref(VS001.png,,60%);
-Parameter Estimation(音声解析)
--.wavファイルの入っているディレクトリを選んで、.wavファ...
#ref(VS002.png,,60%);
---"Process using 16kHz sampling rate"にチェックすると、...
---【注意】指定したディレクトリ内に複数.wavがあったとき、...
---.wavファイルと同じ場所に解析結果のファイル(.wavと同名...
---ファイルが長いと結構時間がかかる。
-Output to text(.tsvファイル書き出し)
--音声解析がすんでいるなら、「Input .mat directory:」で解...
#ref(VS003.png,,60%);
---「Output file;」欄で書き出すファイルの名前を指定します...
---例えば &ref(mtlb_file.txt); のような形式で書き出される。
--.TextGridも読み込めるから、Praatの解析結果を手軽に.tsv...
-Output to EMU
--解析結果ファイルをEMU形式のファイルに変換する。[[Rで取...
-Parameter Display(解析結果表示)
--音声解析がすんでいるなら、「wav directory:」に.wavファ...
---指定したディレクトリ内に、.wavや解析結果のデータが複数...
--以下はF0(STRAIGHT, Snack, Praat)の解析結果。
#ref(VS004.png,,60%);
---F0解析の結果についてもう少し詳しく見てみます。[[F0解析...
-Settings(設定)
--解析に使用する各種パラメータの設定。下記は全てデフォル...
#ref(VS005.png,,50%);
--フォルマント解析の結果は H1H2c などの声質パラメータの解...
---デフォルトではSnackのフォルマントを声質パラメータの解...
---Praatを使用する設定に変えた場合(Formants > Used for p...
--Outputs > Smoothing window size は、Output to text 機能...
// Windows\praatformants.praat の44行目を以下に書き換え
// To Formant (burg)... 'time_step' 5 'maximum_formant_f...
//
// func_PraatFormants.m の104行目を以下に書き換え
// C = textscan(fid, '%f %f %f %f %f %f %f %f %f %f %f %...
//---2014/11/21 最新版のVoiceSauceでは以下を書き換えるだ...
// Windows\praatformants.praat の37行目を以下に書き換え
// integer num_formants 5
-Manual Data(手動データ入力)
--ユーザが独自に解析したデータで、Parameter Estimation の...
**特徴量の計算方法の詳細 [#y3dc4337]
-以下は、[[VoiceSauce Documentation:http://www.ee.ucla.ed...
-F0(([[VoiceSauce Documentation - F0:http://www.ee.ucla.e...
--VoiceSauceは、倍音の位置を推定するためにF0を使います。 ...
-Formants F1-F4(([[VoiceSauce Documentation - Formants:ht...
--最初の4つのフォルマントの周波数と帯域幅を求めるためにSn...
-Harmonic and Formant Amplitude (H1, H2, H4, A1, A2, A3, ...
--VoiceSauceは、4つのピッチ期間ウインドウ上で、ピッチに同...
--F0がSTRAIGHTによってうまく推定できなければ、H1を含むす...
--もしF1の推定が間違っているならば、A1とH1-A1の値も間違い...
--すべての振幅訂正は、正確なフォルマント値に依存します。 ...
--【注】H1は基本周波数F0の振幅、H2は基本周波数F0の二倍音F...
--【注】H1とH2の値はフォルマント(スペクトル包絡の概形)...
-Harmonic and Formant Amplitude (*)(([[VoiceSauce Documen...
--Iseli & Alwan (2004, 2006, 2007)のアルゴリズムによって...
--振幅の値は、フォルマント周波数とSnack toolkitで求めた帯...
--VoiceSauceでは、すべての修正された処置は、アスタリスク...
-Energy(([[VoiceSauce Documentation - Amplitude Energy:ht...
--エネルギーはthe Root Mean Square(RMS((RMSは音圧の実効...
-Cepstral Peak Prominence(([[VoiceSauce Documentation - C...
--ケプストラムピークプロミネンス(CPP)は、[[Hillenbrand ...
---【注】CPPの解説として[[Rachel Garrett, 2013:http://dc....
-Harmonic to Noise Ratios(([[VoiceSauce Documentation - H...
--倍音-ノイズ比率(HNR)の値はde Krom (1993)のアルゴリズ...
***F0解析結果の検討 [#fb4cce52]
-VoiceSauceを使って、[[サンプル音声 mtlb_file.wav:http://...
#geshi(matlab){{
%mtlb_file.matの検討
load('mtlb_file.mat');
subplot(2,1,1); plot([strF0 pF0 sF0]); ylim([-100 500]);
title('VoiceSauce - MAT'); legend('strF0', 'pF0', 'sF0');
%mtlb_file.txtの検討
fid = fopen('mtlb_file.txt', 'rt');
% ヘッダ情報(1行目の文字列)を得る
text = textscan(fid, '%s', 1, 'delimiter', '\n');
% データ部(文字列2列、数値67列、区切り記号はタブ)を得る
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
% 42列目(strF0)を順番に表示してみる
%for count = 1 : 1 : length(text{1})
% disp(text{5}(count));
%end
strF0 = text{42};
sF0 = text{43};
pF0 = text{44};
subplot(2,1,2); plot([strF0 pF0 sF0]); ylim([-100 500]);
title('VoiceSauce - TXT'); legend('strF0', 'pF0', 'sF0');
}}
#ref(VoiceSauce_F0_1.png,,70%);
--PraatやSnackの計算結果は無声部が出力されていないのに対...
--MATファイルではpF0とsF0の無声部はNaN、Output to text で...
-VoiceSauce v1.19 のデフォルトパラメータ(Settingsで設定...
#geshi(matlab){{
load mtlb; %MATLABと発音した英語音声
mtlb = resample(mtlb, 16000, Fs); %サンプリングレートを16...
Fs = 16000;
%VoiceSauce v1.19 のデフォルトパラメータで計算した strF0
strParam.F0searchLowerBound = 40;
strParam.F0searchUpperBound = 500;
[f0raw1, vuv] = MulticueF0v14(mtlb, Fs, strParam);
[f0raw2] = MulticueF0v14(mtlb, Fs, strParam);
subplot(2,1,1); plot([f0raw1 f0raw2]); ylim([-100 500]);
legend('use vuv', 'no vuv'); title('VoiceSauce v1.19');
%STRAIGHTV40_007d のデフォルトパラメータで計算した F0
[f0raw1, vuv] = MulticueF0v14(mtlb, Fs);
[f0raw2] = MulticueF0v14(mtlb, Fs);
subplot(2,1,2); plot([f0raw1 f0raw2]); ylim([-100 500]);
legend('use vuv', 'no vuv'); title('STRAIGHTV40 007d');
}}
#ref(VoiceSauce_F0_2.png,,76%);
--VoiceSauceとSTRAIGHTで、無声部の推定値がやや変わります...
--MulticueF0v14.m では ''第二出力引数を指定するかどうかに...
***フォルマント解析結果の検討 [#b8f42b40]
-[[mtlb_file.wav:http://shower.human.waseda.ac.jp/~m-kouk...
#geshi(matlab){{
%mtlb_file.matの検討
load('mtlb_file.mat');
subplot(2,1,1); plot([pF1 sF1 pF2 sF2]); ylim([-100 3000]);
title('VoiceSauce - MAT'); legend('pF1', 'sF1', 'pF2', 's...
%mtlb_file.txtの検討
fid = fopen('mtlb_file.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
sF1 = text{47};
sF2 = text{48};
pF1 = text{51};
pF2 = text{52};
subplot(2,1,2); plot([pF1 sF1 pF2 sF2]); ylim([-100 3000]);
title('VoiceSauce - TXT'); legend('pF1', 'sF1', 'pF2', 's...
}}
#ref(VoiceSauce_Formant.png,,74%);
--有声部では、PraatとSnackで第二フォルマントの値はあまり...
--MAT > TXT 変換ではほとんど違いはありませんが、MATファイ...
***H1-H2解析結果の検討 [#oc35980c]
-H1-H2に関するものとして、MATファイルには変数 H1, H2, H1H...
--H1c, H2c は、Iseli & Alwan (2004, 2006, 2007)のアルゴリ...
-''どのアルゴリズムのフォルマント解析結果を使うかによって...
-比較のため、以下の4つのファイルを使います。
--Snackで推定したフォルマントを使って解析した結果 &ref(mt...
--Praatで推定したフォルマントを使って解析した結果 &ref(mt...
-これらの値の違いを確認します。
#geshi(matlab){{
%mtlb_file.matの検討
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_H1H2c = H1H2c;
load('mtlb_file_praatFormantUsed.mat');
pra_H1 = H1;
pra_H2 = H2;
pra_H1H2c = H1H2c;
subplot(3,1,1);
plot([sna_H1H2c pra_H1H2c (sna_H1 - sna_H2) (pra_H1 - pra...
title('VoiceSauce - MAT'); legend('sna H1H2c', 'pra H1H2c...
%mtlb_file.txtの検討
fid = fopen('mtlb_file.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
sna_H1c = text{6};
sna_H2c = text{7};
sna_H1u = text{27};
sna_H2u = text{28};
sna_H1H2c = text{13};
sna_H1H2u = text{35};
fid = fopen('mtlb_file_praatFormantUsed.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
pra_H1c = text{6};
pra_H2c = text{7};
pra_H1u = text{27};
pra_H2u = text{28};
pra_H1H2c = text{13};
pra_H1H2u = text{35};
subplot(3,1,2);
plot([sna_H1H2c pra_H1H2c sna_H1H2u pra_H1H2u]); ylim([-2...
title('VoiceSauce - TXT'); legend('sna H1H2c', 'pra H1H2c...
subplot(3,1,3);
plot([(sna_H1c - sna_H2c) (pra_H1c - pra_H2c) (sna_H1u - ...
legend('sna H1c-H2c', 'pra H1c-H2c', 'sna H1u-H2u', 'pra ...
}}
#ref(VoiceSauce_H1H2_1.png,,65%);
--まず、MATファイルとTXTファイルの結果が違うことに注意し...
---スムージングの値は Settings > Outputs > Smoothing wind...
--TXTファイルで、H1H2u は H1u - H2u、H1H2c は H1c - H2c ...
--MATファイルの H1 - H2 の値や、TXTファイルの H1u - H2u、...
--MATファイルの H1H2c の値や、TXTファイルの H1c - H2c、お...
-波形との比較(&ref(mtlb_file.mat); と &ref(mtlb_file_pra...
#geshi(matlab){{
load mtlb;
subplot(3,1,1);
plot(mtlb); xlabel('Time (sample)'); xlim([1 length(mtlb)...
subplot(3,1,2);
spectrogram(mtlb, hamming(64), 32, 256, Fs, 'yaxis'); %ス...
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_H1H2c = H1H2c;
load('mtlb_file_praatFormantUsed.mat');
pra_H1 = H1;
pra_H2 = H2;
pra_H1H2c = H1H2c;
subplot(3,1,3);
plot([sna_H1H2c pra_H1H2c (sna_H1 - sna_H2) (pra_H1 - pra...
title('VoiceSauce - MAT'); legend('sna H1H2c', 'pra H1H2c...
}}
#ref(VoiceSauce_H1H2_2.png,,50%);
--スペクトログラムの定常部分(特に母音の定常部分)では、H...
-STRAIGHTで求めたF0、H1、H2、Snackで求めたF1、F2から H1H2...
#geshi(matlab){{
% VoiceSauceの計算結果
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_H1H2c = H1H2c;
fid = fopen('mtlb_file.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
sna_H1u_sm = text{27};
sna_H2u_sm = text{28};
sna_H1c_sm = text{6};
sna_H2c_sm = text{7};
subplot(2,1,1); plot([(sna_H1 - sna_H2) sna_H1H2c (sna_H1...
title('VoiceSauce'); legend('H1 - H2', 'H1c - H2c', 'H1c ...
% STRAIGHTで求めたF0、H1、H2、Snackで求めたF1、F2から計算
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_F1 = sF1;
sna_F2 = sF2;
sna_B1 = func_getBWfromFMT(sna_F1, strF0, 'hm'); % Hawks...
sna_B2 = func_getBWfromFMT(sna_F2, strF0, 'hm'); % Hawks...
sna_H1c = sna_H1 - func_correct_iseli_z(strF0, sna_F1, sn...
sna_H1c = sna_H1c - func_correct_iseli_z(strF0, sna_F2, s...
sna_H2c = sna_H2 - func_correct_iseli_z(2*strF0, sna_F1, ...
sna_H2c = sna_H2c - func_correct_iseli_z(2*strF0, sna_F2,...
smoothwin = 20;
sna_H1c_sm = filter(ones(smoothwin,1)/smoothwin, 1, sna_H...
sna_H2c_sm = filter(ones(smoothwin,1)/smoothwin, 1, sna_H...
subplot(2,1,2); plot([(sna_H1 - sna_H2) (sna_H1c - sna_H2...
title('Calculate'); legend('H1 - H2', 'H1c - H2c', 'H1c -...
}}
#ref(VoiceSauce_H1H2_3.png,,80%);
--同じ結果を再現できました。func_getBWfromFMT.m では[[Haw...
//*謝辞 [#m41a8b99]
//-VoiceSauceは菊池研究室の宮島崇浩研究員が調べてください...
終了行:
#contents
*VoiceSauce v1.19 を使って音声を解析する [#gebaf49e]
-[[VoiceSauce (Yen-Liang Shue, EDU, 2011):http://www.ee.u...
--http://www.ee.ucla.edu/~spapl/voicesauce/
--MATLAB版, Windows版, Macintosh版があります。
-解析可能な特徴量は以下の通り。
F0
Formants F1-F4
H1(*)
H2(*)
H4(*)
A1(*)
A2(*)
A3(*)
H1(*)-H2(*)
H2(*)-H4(*)
H1(*)-A1(*)
H1(*)-A2(*)
H1(*)-A3(*)
Energy
Cepstral Peak Prominence
Harmonic to Noise Ratios
--アスタリスクがついているものは、Iseli & Alwan のアルゴ...
--特徴量によっては STRAIGHT, Snack Sound Toolkit, Praat ...
-Limitations (以下、日本語訳したもの)
--推定するパラメータの多くはF0に依存するので、''有声音し...
--フォルマント周波数の修正がもっとも良く働くのは、F1が正...
--非英語名のフォルダに含まれている .wav ファイルはフォル...
**MATLAB版を使ってみる [#x52ec340]
-[[リンク先:http://www.ee.ucla.edu/~spapl/voicesauce/]]の...
-以下、[[VoiceSauce Manual:http://www.ee.ucla.edu/~spapl/...
-以下、「MATLAB」と発音したサンプル英語音声を解析してみま...
#geshi(matlab){{
load mtlb; %MATLABと発音した英語音声
disp(strcat('サンプリング周波数は', int2str(Fs), '[Hz] ...
sound(mtlb, Fs) %再生
wavwrite(mtlb, Fs, 32, 'mtlb_file.wav'); %量子化ビット...
}}
-まずは VoiceSauce.m を実行する
--下のウインドウが出る
#ref(VS001.png,,60%);
-Parameter Estimation(音声解析)
--.wavファイルの入っているディレクトリを選んで、.wavファ...
#ref(VS002.png,,60%);
---"Process using 16kHz sampling rate"にチェックすると、...
---【注意】指定したディレクトリ内に複数.wavがあったとき、...
---.wavファイルと同じ場所に解析結果のファイル(.wavと同名...
---ファイルが長いと結構時間がかかる。
-Output to text(.tsvファイル書き出し)
--音声解析がすんでいるなら、「Input .mat directory:」で解...
#ref(VS003.png,,60%);
---「Output file;」欄で書き出すファイルの名前を指定します...
---例えば &ref(mtlb_file.txt); のような形式で書き出される。
--.TextGridも読み込めるから、Praatの解析結果を手軽に.tsv...
-Output to EMU
--解析結果ファイルをEMU形式のファイルに変換する。[[Rで取...
-Parameter Display(解析結果表示)
--音声解析がすんでいるなら、「wav directory:」に.wavファ...
---指定したディレクトリ内に、.wavや解析結果のデータが複数...
--以下はF0(STRAIGHT, Snack, Praat)の解析結果。
#ref(VS004.png,,60%);
---F0解析の結果についてもう少し詳しく見てみます。[[F0解析...
-Settings(設定)
--解析に使用する各種パラメータの設定。下記は全てデフォル...
#ref(VS005.png,,50%);
--フォルマント解析の結果は H1H2c などの声質パラメータの解...
---デフォルトではSnackのフォルマントを声質パラメータの解...
---Praatを使用する設定に変えた場合(Formants > Used for p...
--Outputs > Smoothing window size は、Output to text 機能...
// Windows\praatformants.praat の44行目を以下に書き換え
// To Formant (burg)... 'time_step' 5 'maximum_formant_f...
//
// func_PraatFormants.m の104行目を以下に書き換え
// C = textscan(fid, '%f %f %f %f %f %f %f %f %f %f %f %...
//---2014/11/21 最新版のVoiceSauceでは以下を書き換えるだ...
// Windows\praatformants.praat の37行目を以下に書き換え
// integer num_formants 5
-Manual Data(手動データ入力)
--ユーザが独自に解析したデータで、Parameter Estimation の...
**特徴量の計算方法の詳細 [#y3dc4337]
-以下は、[[VoiceSauce Documentation:http://www.ee.ucla.ed...
-F0(([[VoiceSauce Documentation - F0:http://www.ee.ucla.e...
--VoiceSauceは、倍音の位置を推定するためにF0を使います。 ...
-Formants F1-F4(([[VoiceSauce Documentation - Formants:ht...
--最初の4つのフォルマントの周波数と帯域幅を求めるためにSn...
-Harmonic and Formant Amplitude (H1, H2, H4, A1, A2, A3, ...
--VoiceSauceは、4つのピッチ期間ウインドウ上で、ピッチに同...
--F0がSTRAIGHTによってうまく推定できなければ、H1を含むす...
--もしF1の推定が間違っているならば、A1とH1-A1の値も間違い...
--すべての振幅訂正は、正確なフォルマント値に依存します。 ...
--【注】H1は基本周波数F0の振幅、H2は基本周波数F0の二倍音F...
--【注】H1とH2の値はフォルマント(スペクトル包絡の概形)...
-Harmonic and Formant Amplitude (*)(([[VoiceSauce Documen...
--Iseli & Alwan (2004, 2006, 2007)のアルゴリズムによって...
--振幅の値は、フォルマント周波数とSnack toolkitで求めた帯...
--VoiceSauceでは、すべての修正された処置は、アスタリスク...
-Energy(([[VoiceSauce Documentation - Amplitude Energy:ht...
--エネルギーはthe Root Mean Square(RMS((RMSは音圧の実効...
-Cepstral Peak Prominence(([[VoiceSauce Documentation - C...
--ケプストラムピークプロミネンス(CPP)は、[[Hillenbrand ...
---【注】CPPの解説として[[Rachel Garrett, 2013:http://dc....
-Harmonic to Noise Ratios(([[VoiceSauce Documentation - H...
--倍音-ノイズ比率(HNR)の値はde Krom (1993)のアルゴリズ...
***F0解析結果の検討 [#fb4cce52]
-VoiceSauceを使って、[[サンプル音声 mtlb_file.wav:http://...
#geshi(matlab){{
%mtlb_file.matの検討
load('mtlb_file.mat');
subplot(2,1,1); plot([strF0 pF0 sF0]); ylim([-100 500]);
title('VoiceSauce - MAT'); legend('strF0', 'pF0', 'sF0');
%mtlb_file.txtの検討
fid = fopen('mtlb_file.txt', 'rt');
% ヘッダ情報(1行目の文字列)を得る
text = textscan(fid, '%s', 1, 'delimiter', '\n');
% データ部(文字列2列、数値67列、区切り記号はタブ)を得る
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
% 42列目(strF0)を順番に表示してみる
%for count = 1 : 1 : length(text{1})
% disp(text{5}(count));
%end
strF0 = text{42};
sF0 = text{43};
pF0 = text{44};
subplot(2,1,2); plot([strF0 pF0 sF0]); ylim([-100 500]);
title('VoiceSauce - TXT'); legend('strF0', 'pF0', 'sF0');
}}
#ref(VoiceSauce_F0_1.png,,70%);
--PraatやSnackの計算結果は無声部が出力されていないのに対...
--MATファイルではpF0とsF0の無声部はNaN、Output to text で...
-VoiceSauce v1.19 のデフォルトパラメータ(Settingsで設定...
#geshi(matlab){{
load mtlb; %MATLABと発音した英語音声
mtlb = resample(mtlb, 16000, Fs); %サンプリングレートを16...
Fs = 16000;
%VoiceSauce v1.19 のデフォルトパラメータで計算した strF0
strParam.F0searchLowerBound = 40;
strParam.F0searchUpperBound = 500;
[f0raw1, vuv] = MulticueF0v14(mtlb, Fs, strParam);
[f0raw2] = MulticueF0v14(mtlb, Fs, strParam);
subplot(2,1,1); plot([f0raw1 f0raw2]); ylim([-100 500]);
legend('use vuv', 'no vuv'); title('VoiceSauce v1.19');
%STRAIGHTV40_007d のデフォルトパラメータで計算した F0
[f0raw1, vuv] = MulticueF0v14(mtlb, Fs);
[f0raw2] = MulticueF0v14(mtlb, Fs);
subplot(2,1,2); plot([f0raw1 f0raw2]); ylim([-100 500]);
legend('use vuv', 'no vuv'); title('STRAIGHTV40 007d');
}}
#ref(VoiceSauce_F0_2.png,,76%);
--VoiceSauceとSTRAIGHTで、無声部の推定値がやや変わります...
--MulticueF0v14.m では ''第二出力引数を指定するかどうかに...
***フォルマント解析結果の検討 [#b8f42b40]
-[[mtlb_file.wav:http://shower.human.waseda.ac.jp/~m-kouk...
#geshi(matlab){{
%mtlb_file.matの検討
load('mtlb_file.mat');
subplot(2,1,1); plot([pF1 sF1 pF2 sF2]); ylim([-100 3000]);
title('VoiceSauce - MAT'); legend('pF1', 'sF1', 'pF2', 's...
%mtlb_file.txtの検討
fid = fopen('mtlb_file.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
sF1 = text{47};
sF2 = text{48};
pF1 = text{51};
pF2 = text{52};
subplot(2,1,2); plot([pF1 sF1 pF2 sF2]); ylim([-100 3000]);
title('VoiceSauce - TXT'); legend('pF1', 'sF1', 'pF2', 's...
}}
#ref(VoiceSauce_Formant.png,,74%);
--有声部では、PraatとSnackで第二フォルマントの値はあまり...
--MAT > TXT 変換ではほとんど違いはありませんが、MATファイ...
***H1-H2解析結果の検討 [#oc35980c]
-H1-H2に関するものとして、MATファイルには変数 H1, H2, H1H...
--H1c, H2c は、Iseli & Alwan (2004, 2006, 2007)のアルゴリ...
-''どのアルゴリズムのフォルマント解析結果を使うかによって...
-比較のため、以下の4つのファイルを使います。
--Snackで推定したフォルマントを使って解析した結果 &ref(mt...
--Praatで推定したフォルマントを使って解析した結果 &ref(mt...
-これらの値の違いを確認します。
#geshi(matlab){{
%mtlb_file.matの検討
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_H1H2c = H1H2c;
load('mtlb_file_praatFormantUsed.mat');
pra_H1 = H1;
pra_H2 = H2;
pra_H1H2c = H1H2c;
subplot(3,1,1);
plot([sna_H1H2c pra_H1H2c (sna_H1 - sna_H2) (pra_H1 - pra...
title('VoiceSauce - MAT'); legend('sna H1H2c', 'pra H1H2c...
%mtlb_file.txtの検討
fid = fopen('mtlb_file.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
sna_H1c = text{6};
sna_H2c = text{7};
sna_H1u = text{27};
sna_H2u = text{28};
sna_H1H2c = text{13};
sna_H1H2u = text{35};
fid = fopen('mtlb_file_praatFormantUsed.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
pra_H1c = text{6};
pra_H2c = text{7};
pra_H1u = text{27};
pra_H2u = text{28};
pra_H1H2c = text{13};
pra_H1H2u = text{35};
subplot(3,1,2);
plot([sna_H1H2c pra_H1H2c sna_H1H2u pra_H1H2u]); ylim([-2...
title('VoiceSauce - TXT'); legend('sna H1H2c', 'pra H1H2c...
subplot(3,1,3);
plot([(sna_H1c - sna_H2c) (pra_H1c - pra_H2c) (sna_H1u - ...
legend('sna H1c-H2c', 'pra H1c-H2c', 'sna H1u-H2u', 'pra ...
}}
#ref(VoiceSauce_H1H2_1.png,,65%);
--まず、MATファイルとTXTファイルの結果が違うことに注意し...
---スムージングの値は Settings > Outputs > Smoothing wind...
--TXTファイルで、H1H2u は H1u - H2u、H1H2c は H1c - H2c ...
--MATファイルの H1 - H2 の値や、TXTファイルの H1u - H2u、...
--MATファイルの H1H2c の値や、TXTファイルの H1c - H2c、お...
-波形との比較(&ref(mtlb_file.mat); と &ref(mtlb_file_pra...
#geshi(matlab){{
load mtlb;
subplot(3,1,1);
plot(mtlb); xlabel('Time (sample)'); xlim([1 length(mtlb)...
subplot(3,1,2);
spectrogram(mtlb, hamming(64), 32, 256, Fs, 'yaxis'); %ス...
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_H1H2c = H1H2c;
load('mtlb_file_praatFormantUsed.mat');
pra_H1 = H1;
pra_H2 = H2;
pra_H1H2c = H1H2c;
subplot(3,1,3);
plot([sna_H1H2c pra_H1H2c (sna_H1 - sna_H2) (pra_H1 - pra...
title('VoiceSauce - MAT'); legend('sna H1H2c', 'pra H1H2c...
}}
#ref(VoiceSauce_H1H2_2.png,,50%);
--スペクトログラムの定常部分(特に母音の定常部分)では、H...
-STRAIGHTで求めたF0、H1、H2、Snackで求めたF1、F2から H1H2...
#geshi(matlab){{
% VoiceSauceの計算結果
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_H1H2c = H1H2c;
fid = fopen('mtlb_file.txt', 'rt');
text = textscan(fid, '%s', 1, 'delimiter', '\n');
text = textscan(fid, strcat('%s %s ', repmat(['%f '],1,67...
fclose(fid);
sna_H1u_sm = text{27};
sna_H2u_sm = text{28};
sna_H1c_sm = text{6};
sna_H2c_sm = text{7};
subplot(2,1,1); plot([(sna_H1 - sna_H2) sna_H1H2c (sna_H1...
title('VoiceSauce'); legend('H1 - H2', 'H1c - H2c', 'H1c ...
% STRAIGHTで求めたF0、H1、H2、Snackで求めたF1、F2から計算
load('mtlb_file.mat');
sna_H1 = H1;
sna_H2 = H2;
sna_F1 = sF1;
sna_F2 = sF2;
sna_B1 = func_getBWfromFMT(sna_F1, strF0, 'hm'); % Hawks...
sna_B2 = func_getBWfromFMT(sna_F2, strF0, 'hm'); % Hawks...
sna_H1c = sna_H1 - func_correct_iseli_z(strF0, sna_F1, sn...
sna_H1c = sna_H1c - func_correct_iseli_z(strF0, sna_F2, s...
sna_H2c = sna_H2 - func_correct_iseli_z(2*strF0, sna_F1, ...
sna_H2c = sna_H2c - func_correct_iseli_z(2*strF0, sna_F2,...
smoothwin = 20;
sna_H1c_sm = filter(ones(smoothwin,1)/smoothwin, 1, sna_H...
sna_H2c_sm = filter(ones(smoothwin,1)/smoothwin, 1, sna_H...
subplot(2,1,2); plot([(sna_H1 - sna_H2) (sna_H1c - sna_H2...
title('Calculate'); legend('H1 - H2', 'H1c - H2c', 'H1c -...
}}
#ref(VoiceSauce_H1H2_3.png,,80%);
--同じ結果を再現できました。func_getBWfromFMT.m では[[Haw...
//*謝辞 [#m41a8b99]
//-VoiceSauceは菊池研究室の宮島崇浩研究員が調べてください...
ページ名:
既存のページ名で編集する