Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

LPC 係数によるフォルマント推定

この例では、LPC (線形予測符号化) を使用して母音フォルマント周波数を推定する方法を示します。フォルマント周波数は予測多項式の根を求めることによって得られます。

この例では、音声サンプル mtlb.mat を使用します。これは Signal Processing Toolbox™ に含まれています。音声はローパス フィルター処理されています。サンプリング周波数が低いため、この音声サンプルはこの例には最適ではありません。サンプリング周波数が低いと、データに近似可能な自己回帰モデルの次数が限られます。この制限はありますが、この例は LPC 係数を使用して母音フォルマントを決定する手法について説明しています。

音声信号を読み込みます。録音は、女性が「MATLAB®」と発声しているものです。サンプリング周波数は 7,418 Hz です。

load mtlb

MAT ファイルには、音声波形 mtlb とサンプリング周波数 Fs が含まれます。

関数 spectrogram を使用して、解析する有声セグメントを識別します。

segmentlen = 100;
noverlap = 90;
NFFT = 128;

spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis')
title('Signal Spectrogram')

Figure contains an axes object. The axes object with title Signal Spectrogram, xlabel Time (ms), ylabel Frequency (kHz) contains an object of type image.

解析のために、0.1 秒から 0.25 秒のセグメントを抽出します。抽出されたセグメントは「MATLAB」の最初の母音 /ae/ にほぼ対応します。

dt = 1/Fs;
I0 = round(0.1/dt);
Iend = round(0.25/dt);
x = mtlb(I0:Iend);

線形予測符号化の前に音声波形に対して行われる 2 つの通常の前処理手順は、ウィンドウ処理とプリエンファシス (ハイパス) フィルター処理です。

ハミング ウィンドウを使用して、音声セグメントにウィンドウ関数をかけます。

x1 = x.*hamming(length(x));

プリエンファシス フィルター処理をします。プリエンファシス フィルターはハイパス全極 (AR(1)) フィルターです。

preemph = [1 0.63];
x1 = filter(1,preemph,x1);

線形予測係数を求めます。モデル次数を指定するために、次数は予想されるフォルマント数の 2 倍に 2 を加えた数という一般ルールを使用します。周波数範囲 [0,|Fs|/2] において予想されるフォルマントは 3 です。そこで、モデル次数を 8 に設定します。lpc によって返される予測多項式の根を求めます。

A = lpc(x1,8);
rts = roots(A);

LPC 係数は実数値なので、根は複素共役対になります。1 つの虚数部符号をもつ根だけを残して、それらの根に対応する角度を求めます。

rts = rts(imag(rts)>=0);
angz = atan2(imag(rts),real(rts));

これらの角度が示すラジアン/サンプル単位の角周波数をヘルツに変換し、フォルマントの帯域幅を計算します。

フォルマントの帯域幅は、予測多項式零点の単位円からの距離によって表されます。

[frqs,indices] = sort(angz.*(Fs/(2*pi)));
bw = -1/2*(Fs/(2*pi))*log(abs(rts(indices)));

フォルマント周波数は 90 Hz を超えること、また帯域幅は 400 Hz 未満であることという基準を使用してフォルマントを決定します。

nn = 1;
for kk = 1:length(frqs)
    if (frqs(kk) > 90 && bw(kk) <400)
        formants(nn) = frqs(kk);
        nn = nn+1;
    end
end
formants
formants = 1×3
103 ×

    0.8697    2.0265    2.7380

最初の 3 つのフォルマント周波数は 869.70 Hz、2026.49 Hz および 2737.95 Hz です。

参考文献

[1] Snell, Roy C., and Fausto Milinazzo. "Formant location from LPC analysis data." IEEE® Transactions on Speech and Audio Processing. Vol. 1, Number 2, 1993, pp. 129-134.

[2] Loizou, Philipos C. "COLEA: A MATLAB Software Tool for Speech Analysis."