Main Content

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

cceps

複素ケプストラム解析

説明

xhat = cceps(x) では、フーリエ変換を使用して、実データ シーケンス x の複素ケプストラム xhat が返されます。

メモ

cceps は、実データに対してのみ使用できます。

[xhat,nd] = cceps(x) では、複素ケプストラムを求める前に x に追加した巡回的な遅延のサンプル数 nd が返されます。

[xhat,nd,xhat1] = cceps(x) では、2 番目の複素ケプストラム xhat1 が返されます。

[___] = cceps(x,n) では、x が長さ n になるようにゼロが追加され、長さ n が返されます。

すべて折りたたむ

この例では、cceps を使用してエコーを表示します。100 Hz でサンプリングされる、周波数 45 Hz の正弦を生成します。0.2 秒後に半分の振幅をもつエコーを追加します。信号の複素ケプストラムを計算します。0.2 秒の点にエコーが現れています。

Fs = 100;
t = 0:1/Fs:1.27;

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

c = cceps(s2);

plot(t,c)
xlabel('Time (s)')
title('Complex cepstrum')

Figure contains an axes object. The axes object with title Complex cepstrum, xlabel Time (s) contains an object of type line.

入力引数

すべて折りたたむ

入力信号。実数ベクトルで指定します。線形位相項を適用することで、±π ラジアンで位相の不連続が無いように入力が変更されます。つまり、必要であれば π ラジアンでゼロ位相を持つように、ゼロを付加した後にいくつかのサンプルが巡回的にシフトされます。

ゼロ パディングする信号の長さ。正の実数の整数として指定します。

出力引数

すべて折りたたむ

複素ケプストラム。ベクトルとして返されます。

x に追加された巡回的な遅延のサンプル数。正の実数スカラーとして返されます。

2 番目の複素ケプストラム。ベクトルとして返されます。xhat1 は、参考文献[1]および[2]で指定されている別の因数分解アルゴリズムを使用して計算されます。この方法は有限時間信号にのみ適用できます。複素ケプストラムを計算するためのフーリエ法と因数分解法の比較については、以下の「アルゴリズム」の項を参照してください。

アルゴリズム

ケプストラム解析は、音声処理やホモモルフィック フィルター処理において最も一般的に適用される、非線形の信号処理手法です (参考文献[1])。cceps は、参考文献[3]のアルゴリズム 7.1 を実装するものです。Fortran プログラムでは冗長な表現も、MATLAB® コードでは以下の 3 行で表せます。この 3 行が cceps の核をなしています。

h = fft(x);
logh = log(abs(h)) + sqrt(-1)*rcunwrap(angle(h));
y = real(ifft(logh));

メモ

上記のコード セグメントにおける rcunwrap は、unwrap の特殊な形であり、位相から直線を取り除くものです。rcunwrapcceps 内のローカル関数で、MATLAB のコマンド ラインからは使用できません。

以下の表では、フーリエ アルゴリズムと因数分解アルゴリズムの長所と短所を示します。

アルゴリズム長所短所
フーリエ任意の信号に対して使用可能位相の補正が必要。出力でエイリアスを使用。
因数分解位相の補正は不要。エイリアスはなし。短時間の信号にのみ使用可能。入力信号の Z 変換はすべて零点で、零点が単位円上にないことが必須。

一般に、これら 2 つのアルゴリズムの結果を使用して互いを検証することはできません。このような検証が可能なのは、入力データの最初の要素が正であり、データ シーケンスの Z 変換は零点のみで、これらすべての零点が単位円内にあり、入力データ シーケンスが長い (またはゼロが付加されている) 場合のみです。

参照

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1999, pp. 788–789.

[2] Steiglitz, K., and B. Dickinson. “Computation of the Complex Cepstrum by Factorization of the Z-transform.” Proceedings of the 1977 IEEE® International Conference on Acoustics, Speech and Signal Processing, pp. 723–726.

[3] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入