[音声認識] MFCCに基づくGMM音声認識[Matlabソースコード535期間を含む]

1.はじめに

MFCC(メル周波数ケプストラム係数):メル周波数ケプストラム係数。Mel周波数は、人間の聴覚特性に基づいて提案されており、Hz周波数と非線形の関係があります。Mel Frequency Cepstral Coefficient(MFCC)は、これらの間のこの関係を使用して、Hzスペクトル特性を計算します。主に音声データの特徴抽出と運用次元の縮小に使用されます。例:512次元(サンプリングポイント)データのあるフレームの場合、MFCCの後で、最も重要な40次元(一般的に言えば)データを抽出でき、ディメンション化の目的も達成されます。
MFCCは通常、プリエンファシス、フレーミング、ウィンドウ処理、高速フーリエ変換(FFT)、メルフィルターバンク、離散コサイン変換(DCT)のいくつかのステップを実行します。これらの中で最も重要なのは、FFTとメルフィルタリングです。メンテナンス操作。
1.プリエンファシス
サンプリングされたデジタル音声信号s(n)をハイパスフィルターに通します。通常、約0.95かかります。プリエンファシス後の信号は次のとおりです。

プリエンファシスの目的は、高周波部分を強調し、信号の周波数スペクトルを平坦化し、低周波数から高周波までの全周波数帯域に維持することです。同じ信号対雑音比を使用して、周波数スペクトル。同時に、発生過程での声帯や唇の影響を排除し、発音システムによって抑制された音声信号の高周波部分を補正し、高周波フォルマントを強調することでもあります。 。

2.フレーミング
音声の分析を容易にするために、音声をフレームと呼ばれる小さなセグメントに分割することができます。まず、N個のサンプリングポイントをフレームと呼ばれる観測ユニットに集めます。通常、Nの値は256または512であり、カバーされる時間は約20〜30ミリ秒です。2つの隣接するフレーム間の過度の変化を回避するために、2つの隣接するフレーム間にオーバーラップ領域があります。このオーバーラップ領域にはM個のサンプリングポイントが含まれ、通常、Mの値はNの約1/2または1/3です。一般に、音声認識に使用される音声信号のサンプリング周波数は8KHzまたは16KHzです。8KHzの場合、フレーム長が256サンプリングポイントの場合、対応する時間長は256/8000×1000 = 32msです。

3.ウィンドウ化された
音声は、長距離で絶えず変化し、固定された特性なしでは処理できないため、各フレームがウィンドウ関数に置き換えられ、ウィンドウ外の値が0に設定されます。目的は、次の可能性を排除することです。各フレームの両端。結果として生じる信号の不連続性。一般的に使用されるウィンドウ関数には、正方形ウィンドウ、ハミングウィンドウ、ハニングウィンドウなどがあります。ウィンドウ関数の周波数領域特性に応じて、ハミングウィンドウがよく使用されます。

各フレームにハミングウィンドウを掛けて、フレームの左端と右端の間の連続性を高めます。フレーミング後の信号がS(n)、n = 0,1 ...、N-1、Nがフレームサイズであると仮定すると、ハミングウィンドウを乗算した後、W(n)は次の形式になります:
異なる値さまざまなハミングウィンドウの場合、通常、aは0.46です。

4.高速フーリエ変換
通常、時間領域で信号の特性を確認することは困難であるため、通常、観測のために周波数領域のエネルギー分布に変換されます。エネルギー分布が異なれば、音声の特性も異なる可能性があります。したがって、ハミングウィンドウを乗算した後、周波数スペクトルのエネルギー分布を取得するには、各フレームを高速フーリエ変換する必要があります。各フレームの周波数スペクトルを取得するために、フレーム分割とウィンドウ処理の後に各フレーム信号に対して高速フーリエ変換が実行されます。そして、音声信号の周波数スペクトルのモジュラス二乗を取り、音声信号のパワースペクトルを取得します。音声信号のDFTが次のようになっているとします。

ここで、x(n)は入力音声信号であり、Nはフーリエ変換ポイントの数を表します。

ここでは、最初にナイキスト周波数を紹介する必要があります。ナイキスト周波数(ナイキスト周波数)は、離散信号システムのサンプリング周波数の半分であり、ハリーナイキストまたはナイキストシャノンサンプリング定理にちなんで名付けられています。サンプリング定理は、ディスクリートシステムのナイキスト周波数がサンプリングされた信号の最高周波数または帯域幅よりも高い限り、エイリアシングを回避できると述べています。音声システムでは、私は通常16khzのサンプリングレートを取り、人間の発生頻度は300hz〜3400hzの間です。ナイキスト周波数の定義によれば、ナイキスト周波数は8khzに等しく、これはの最高周波数よりも高いです。ナイキスト周波数の制限条件を満たす人間の発生。FFTは、ナイキスト周波数に従ってサンプリングレートの半分をインターセプトすることによって計算されます。具体的には、フレーム内に512のサンプリングポイントがあると仮定すると、フーリエ変換ポイントの数も512であり、FFT計算後に出力されるポイントの数は257です。 (N / 2 + 1)は、0(Hz)からサンプリングレート/ 2(Hz)までのN / 2 +1ポイントの周波数成分を意味します。つまり、FFT計算中に、信号が時間領域から周波数領域に転送され、サンプリングされた信号の最高周波数よりも高いポイントの影響が除去されるだけでなく、次元も減少します。

5.メルフィルターバンク
人間の耳は異なる周波数に敏感で非線形の関係があるため、人間の耳の感度に応じて周波数スペクトルを複数のメルフィルターバンクに分割します。メル尺度の範囲内で、各フィルターの中心周波数はデバイスは等間隔の線形分布ですが、周波数範囲内で等間隔ではありません。これは、周波数とメル周波数変換の式によるものです。式は次のとおりです。

式のログは、log10(lg)に基づいています。

エネルギースペクトルをメルスケールの三角フィルターバンクのセットに通し、M個のフィルターでフィルターバンクを定義します(フィルターの数は臨界バンドの数と同じです)。使用されるフィルターは三角フィルターで、中心周波数はf(m)、m = 1,2、...、Mです。Mは通常22-26かかります。図に示すように、各f(m)間の間隔は、mの値が減少すると減少し、mの値が増加すると拡大します。

式のkは、FFT計算後のポイントの添え字(前の例では0〜257)を指します。f(m)もポイントの添え字に対応します。具体的な方法は次のとおりです。

1.音声信号の最低(通常は0hz)と最高(通常はサンプリングレートの半分)の周波数とMelフィルターの数を決定します

2.最低周波数と最高周波数に対応するメル周波数を計算します

3. 2つの隣接するメルフィルターの中心周波数間の距離を計算します:(最高のメル周波数-最低のメル周波数)/(フィルターの数+ 1)

4.各中心メル周波数を周波数に変換します

5.FFTの中点の添え字に対応する頻度を計算します

例:サンプリングレートが16khz、最低周波数が0hz、フィルターの数が26、フレームサイズが512であると仮定すると、フーリエ変換ポイントの数も512になり、変換から最低のMelが得られます。メル周波数と実際の周波数の式周波数は0、最高メル周波数は2840.02です。中心周波数距離は(2840.02-0)/(26 + 1)= 105.19なので、メルの中心周波数を取得できます。フィルタバンク:[0、105.19、210.38、...、2840.02]次に、この中心周波数のグループを実際の周波数グループに変換し(ここにリストされていない式に従ってください)、最後に実際の周波数の添え字を計算します。 FFTポイントに対応する周波数グループ計算式は次のとおりです。各周波数/サンプリングレートの実際の周波数グループ*(フーリエ変換ポイント+1)。このようにして、FFTポイント添え字グループが取得されます:[0,2,4,7,10,13,16、...、256]、つまりf(0)、f(1)、...、 f(27)。
これらを使用して、各フィルターの出力を計算します。計算式は次のとおりです。
ここで、Mはフィルターの数を表し、NはFFT内のポイントの数を表します(上記の例では257)。上記の計算の後、データの各フレームのフィルターの数に等しい次元を取得します。これにより、次元が減少します(この例では26次元)。

6.離散コサイン変換
離散コサイン変換は、信号処理や画像処理で信号や画像の不可逆データ圧縮を実行するためによく使用されます。これは、離散コサイン変換が強力な「エネルギー集中」特性を備えているためです。ほとんどの自然信号エネルギー(音と画像)は、離散コサイン変換後の低周波部分に集中します。これは、実際にはデータの各フレームの次元です。式は次のとおりです。
上記の各フィルターの対数エネルギーを離散コサイン変換に取り込み、L次のメルスケールケプストラムパラメーターを取得します。L次数は、MFCC係数の次数を指し、通常は12〜16です。ここで、Mは三角フィルターの数です。

7.動的差分パラメータの抽出
標準のケプストラムパラメータMFCCは、音声パラメータの静的特性のみを反映し、音声の動的特性は、これらの静的特性の差分スペクトルによって記述できます。実験によると、動的機能と静的機能を組み合わせると、システムの認識パフォーマンスを効果的に向上させることができます。差分パラメータの計算には、次の式を使用できます。
ここで、dtはt番目の1次差分、Ctはt番目のケプストラム係数、Qはケプストラム係数の次数、Kはの時間差を表します。 1または2の1次導関数。上記の式の結果を再度代入すると、2次の差のパラメーターを取得できます。
したがって、MFCCの全体的な構成は、実際には次のようになります。N次元MFCCパラメーター(N / 3MFCC係数+ N / 3一次差分パラメーター+ N / 3二次差分パラメーター)+フレームエネルギー(この項目は、次のように置き換えることができます)必要に応じて)。
ここでのフレームエネルギーとは、フレームの体積(つまりエネルギー)を指します。これは、音声の重要な機能でもあり、計算が非常に簡単です。したがって、通常、フレームの対数エネルギーを加算すると(定義:フレーム内の信号の2乗の合計、10に基づく対数値を取得し、10を掛ける)、各フレームの基本的な音声機能がもう1つの次元になります。 、対数エネルギーと残りのケプストラムパラメータを含みます。さらに、最初に40次元で何が起こっているのかを説明します。離散コサイン変換の次数が13であると仮定すると、1次と2次の差の後、39次元になり、フレームエネルギーは合計40次元になります。もちろん、これで問題ありません。実際のニーズに応じて動的に調整してください。

第二に、ソースコード

% ====== Load wave data and do feature extraction
clc,clear
waveDir='trainning\';
speakerData = dir(waveDir);
%Matlab使用dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中.
% dir函数可以有调用方式
% dir('.') 列出当前目录下所有子文件夹和文件
% dir('G:\Matlab') 列出指定目录下所有子文件夹和文件
% dir('*.m') 列出当前目录下符合正则表达式的文件夹和文件
% 得到的为结构体数组每个元素都是如下形式的结构体
%         name    -- filename
%         date    -- modification date
%         bytes   -- number of bytes allocated to the file
%         isdir   -- 1 if name is a directory and 0 if not
%         datenum -- modification date as a MATLAB serial date number
% 分别为文件名,修改日期,大小,是否为目录,Matlab特定的修改日期
% 可以提取出文件名以作读取和保存用.
speakerData(1:2) = [];
speakerNum=length(speakerData);%speakerNum:人数;


% ====== Feature extraction
fprintf('\n读取语音文件并进行特征提取...       ');
% cd('D:\MATLAB7\toolbox\dcpr\');
for i=1:speakerNum
	fprintf('\n正在提取第%d个人%s的特征\n', i, speakerData(i,1).name(1:end-4));
    [y, fs, nbits]=wavread(['trainning\' speakerData(i,1).name]);
    epInSampleIndex = epdByVol(y, fs);		% endpoint detection端点检测
    y=y(epInSampleIndex(1):epInSampleIndex(2));	% silence is not used去除静音
    speakerData(i).mfcc=wave2mfcc(y, fs);
    fprintf('  完成!!');
end

save speakerData speakerData;		% Since feature extraction is slow, you can save the data for future use if the features are not changed.
graph_MFCC;                                 %由于特征提取速度慢,如果功能没有改变,可以保存供日后使用的数据,
fprintf('\n');
clear all;
fprintf('特征参数提取完成! \n\n请点击任意键继续...');
 pause;


% ====== GMM training
fprintf('\n训练每个语者的高斯混合模型...\n\n');
load speakerData.mat
gaussianNum=12;					% No. of gaussians in a GMM高斯混合模型中的高斯个数
speakerNum=length(speakerData);


for i=1:speakerNum
	fprintf('\n为第%d个语者%s训练GMM……\n', i,speakerData(i).name(1:end-4));
	[speakerGmm(i).mu, speakerGmm(i).sigm,speakerGmm(i).c] = gmm_estimate(speakerData(i).mfcc,gaussianNum);
    fprintf('  完成!!');
end

fprintf('\n');
save speakerGmm speakerGmm;
pause(10);
clear all;
fprintf('高斯混合模型训练结束! \n\n请点击任意键继续...');
 pause;

% ====== recognition
fprintf('\n识别中...\n\n');
load speakerData;
load speakerGmm;

[filename, pathname] = uigetfile('*.wav','select a wave file to load');
    if pathname == 0
        errordlg('ERROR! No file selected!');
        return;
    end    
wav_file = [pathname filename];
[testing_data, fs, nbits]=wavread(wav_file);
 pause(10);
match= MFCC_feature_compare(testing_data,speakerGmm);
 disp('待测模型匹配中,请等待10秒!')
 pause(10);
[max_1 index]=max(match);
if length(filename)>7
   fprintf('\n\n\n说话人是%s。',speakerData(index).name(1:end-4));
else
   fprintf('\n\n\n说话人是%s。',filename(1:end-4));
end

3、実行中の結果

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

四、備考

完全なコードまたは書き込み追加QQ1564658423過去のレビュー
>>>>>>
[機能の抽出] matlabウェーブレット変換に基づくオーディオ透かしの埋め込みと抽出[Matlabソースコード053を含む]
[音声処理] matlabGUIに基づく音声信号処理[Matlabを含むソースコードの問題290]
[音声取得] matlabGUI音声信号収集に基づく[Matlabソースコード291を含む]
[音声変調] matlabGUI音声振幅変調に基づく[Matlabソースコード292を含む]
[音声合成] matlabGUI音声に基づく合成[Matlabソースコードの問題293を含む]
[音声暗号化] matlabGUI音声信号の暗号化と復号化に基づく[Matlabソースコード295を含む]
[音声拡張] Matlabウェーブレット変換ベースの音声拡張[Matlabソースコード296]
[音声認識] matlabGUI音声ベース周波数認識に基づく[Matlabソースコード294を含む]
[音声拡張] Matlab GUIWienerフィルタリングベースの音声拡張[Matlabソースコード298を含む]
[音声処理] matlabGUI音声信号処理に基づく[Matlabソースコード299を含む]
[信号処理] Matlab音声信号スペクトルアナライザーに基づく[Matlabソースコード325を含む]
[変調信号] matlabGUIに基づくデジタル変調信号シミュレーション[Matlabソースコード336を含む]
[感情認識] matlabBPニューラルに基づく音声感情認識ネットワーク[Matlabソースコード349の​​問題を含む]
[音声ステガノグラフィー] Matlabウェーブレット変換に基づく定量化されたオーディオデジタルウォーターマーキング[Matlabソースコードの問題351を含む]
[特徴抽出] matlabオーディオ透かしの埋め込みと抽出に基づく[Matlabソースコード350期間を含む]
[音声ノイズ除去] matlabローパスと適応フィルターノイズ除去に基づく[Matlabソースコード352期間を含む]
[感情認識] matlabGUI音声に基づく感情分類認識[Matlabソースコード354期間を含む]
[基本処理] Matlabベースの音声信号前処理[Matlabソースコード364期間を含む]
[音声認識] Matlabフーリエ変換0-9デジタル音声認識[Matlabソースコード384期間を含む]
[音声認識] 0-9 matlab GUIDTWに基づくデジタル音声認識[Matlabソースコード385を含む]
[音声再生] Matlab GUIMP3設計[Matlabソースコード425を含む]
[音声処理]人間の耳のマスキング効果に基づく音声強調アルゴリズムノイズ比の計算[Matlabソースコード428を含む]
[音声ノイズ除去] matlabスペクトル減算ノイズ除去に基づく[Matlabソースコード429を含む]
[音声認識] matlabの運動量項目に基づくBPニューラルネットワーク音声認識[Matlabソースコード430を含む]
[音声ステガノグラフィ] matlabLSB音声隠蔽に基づく[Matlabソースコード431を含む]
[音声認識] matlabの男性と女性の音声認識に基づく[Matlabソースコード452を含む]
[音声処理] matlab音声ノイズの追加とノイズリダクション処理に基づく[MatlabソースコードIssue473を含む]
[音声ノイズ除去] matlab最小二乗(LMS)適応フィルターに基づく[ Matlabソースコード481を含む]
[音声強調] matlabスペクトル減算、最小平均二乗、およびWienerフィルター音声強調に基づく[Matlabを含むソースコード482期間】
[通信] matlab GUIデジタル周波数帯域(ASK、PSK、QAM)変調シミュレーションに
基づく[ Matlabソースコード483を含む] [信号処理] matlabECG信号処理に基づく[Matlabソースコード484を含む]
[音声ブロードキャスト] matlabに基づく音声ブロードキャスト[Matlabソースコード507を含む]
[信号処理] EEG信号特徴抽出に基づくMatlabウェーブレット変換[Matlabソースコード511を含む]
[音声処理] matlab GUIデュアルトーンマルチ周波数(DTMF)信号検出に基づく[Matlabを含むソースコード512】
【音声ステガノグラフィ】音声信号のデジタル透かしを実現するmatlabLSBに基づく【Matlabソースコード513を含む】
【音声強調】matlab整合フィルターに基づく音声認識【Matlabソースコード514を含む】
【音声処理】ベースmatlabGUI音声周波数ドメインスペクトログラム分析[Matlabソースコード527を含む]
[音声ノイズ除去] matlab LMSに基づく、RLSアルゴリズム音声ノイズ除去[Matlabソースコード528を含む]
[音声ノイズ除去] matlabLMSスペクトル減算音声ノイズ除去[Matlabを含むソースコードの問題529]
[音声ノイズ除去] matlabソフトしきい値、ハードしきい値、妥協しきい値に基づく音声ノイズ除去[Matlabソースコード530を含む]
[音声認識] matlab特定の人の音声認識識別に基づく[Matlabソースコード534を含む]
[音声[ノイズ除去] matlabウェーブレットソフトしきい値音声ノイズリダクションに
基づく[ Matlabソースコード531を含む] [音声ノイズ除去] matlabウェーブレットハードしきい値音声ノイズリダクションに基づく[ Matlabソースコード532を含む]
[音声認識] matlabMFCCおよびSVM固有のヒューマンに基づく性別認識[Matlabソースコード533を含む]

おすすめ

転載: blog.csdn.net/TIQCmatlab/article/details/114877082