Main Content

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

ケプストラム解析

ケプストラムについて

ケプストラム解析は、音声処理やイメージ処理などの分野で種々に適用されている非線形信号処理手法です。

シーケンス x"複素ケプストラム" は、x のフーリエ変換の複素自然対数を求め、その結果のシーケンスを逆フーリエ変換することにより計算されます。

xˆ=12π-ππlog[X(ejω)]ejωndω.

ツールボックスの関数 cceps によりこの演算を行って、入力シーケンスに対する複素ケプストラムを推定し、入力シーケンスと同じ長さの実数シーケンスが返されます。

次に、エコー検出のアプリケーションに cceps を使用します。まず、以下のようにして 100 Hz でサンプリングした 45 Hz の正弦波を作成します。信号の立ち上りから 0.2 秒後に、半分の振幅をもつ信号のエコーを付加します。

t = 0:0.01:1.27;
s1 = sin(2*pi*45*t);
s2 = s1 + 0.5*[zeros(1,20) s1(1:108)];

新しい信号の複素ケプストラムを計算し、プロットします。

c = cceps(s2);
plot(t,c)

Figure contains an axes object. The axes object contains an object of type line.

複素ケプストラムは 0.2 秒の点にエコーを表すピークを示します。

信号 x"実数ケプストラム" は、場合によっては単にケプストラムと呼ばれるものですが、x のフーリエ変換の大きさの自然対数を求め、そして、その結果のシーケンスの逆フーリエ変換を得ることにより計算されます。

cx=12π-ππlog|X(ejω)|ejωndω.

このツールボックスの関数 rceps は、この演算を行ってシーケンスの実数ケプストラムを返します。返されるシーケンスは、入力ベクトルと同じ長さの実数値ベクトルです。

関数 rceps では、入力と同じ実数ケプストラムをもつ固有の最小位相シーケンスが返されます。シーケンスの実数ケプストラムと最小位相再現を共に得るには、[y,ym] = rceps(x) を使用します。ここで、y は実数ケプストラム、ymx の最小位相再現です。以下の例は、rceps の 1 出力が x と同じ実数ケプストラムをもつ固有の最小位相シーケンスであることを示します。

y = [4 1 5];                 % Non-minimum phase sequence
[xhat,yhat] = rceps(y);
xhat2 = rceps(yhat); 
[xhat' xhat2']
ans = 3×2

    1.6225    1.6225
    0.3400    0.3400
    0.3400    0.3400

逆複素ケプストラム

複素ケプストラムを逆変換するには、関数 icceps を使用します。関数 cceps では、入力のアンラップされた位相がゼロ周波数で連続になるように、データに依存した位相変調が実行されるため、逆変換が複雑になります。位相の変調は整数倍の遅延と等しくなります。出力引数を 2 つ設定すると、cceps では、この遅延の項が返されます。

x = 1:10;
[xhat,delay] = cceps(x)
xhat = 1×10

    2.2428   -0.0420   -0.0210    0.0045    0.0366    0.0788    0.1386    0.2327    0.4114    0.9249

delay = 1

複素ケプストラムを逆変換するには、以下のように元の遅延パラメーターを設定して、icceps を使用します。

icc = icceps(xhat,2)
icc = 1×10

    2.0000    3.0000    4.0000    5.0000    6.0000    7.0000    8.0000    9.0000   10.0000    1.0000

上の例が示すように、複素ケプストラムになんらかの変更を加えると、元の遅延の項が無効となる可能性があります。複素ケプストラムを厳密に逆変換できません。

参考

| |