ケプストラム分析シミュレーター 戻る
信号処理シミュレーター

ケプストラム分析シミュレーター — 音声・振動分析の基礎

対数振幅スペクトルを逆フーリエ変換して実ケプストラムを計算。基本周波数・サンプリング周波数・高調波減衰を変えて、quefrency 軸でのピッチ検出の原理を直感的に学べます。

パラメータ設定
基本周波数 f_0
Hz
サンプリング周波数 F_s
Hz
高調波減衰率 α
ノイズ σ

N = 1024 固定で直接DFTを実行します。信号モデルは高調波5個+白色ノイズです。

計算結果
ケプストラムピーク quefrency
対応する時間 τ
推定基本周波数 f_0
推定誤差 |f_0 − 真値|/真値
信号・スペクトル・ケプストラム

上: 時系列 x[n](青)/中: 対数振幅スペクトル log|X[k]|(緑)/下: ケプストラム c[n](赤、黄縦線=ピーク位置)

理論・主要公式

実ケプストラムは、信号の対数振幅スペクトルを逆フーリエ変換した量です。畳み込みで結合した励振源と伝達系を、時間(quefrency)軸上で分離できます。

DFT。x[n] は長さ N の入力信号、X[k] はその周波数成分:

$$X[k] = \sum_{n=0}^{N-1} x[n]\,e^{-j 2\pi k n / N}$$

実ケプストラム。対数振幅スペクトルの逆DFT(実部のみ):

$$c[n] = \frac{1}{N}\sum_{k=0}^{N-1} \log|X[k]|\,\cos\!\left(\frac{2\pi k n}{N}\right)$$

基本周期の quefrency と推定基本周波数:

$$\tau_\text{pitch} = \frac{F_s}{f_0}, \qquad \hat{f}_0 = \frac{F_s}{\tau_\text{peak}}$$

音声では 2〜20 ms(500〜50 Hz)の範囲でケプストラムのピークを探し、その quefrency からピッチを推定します。

ケプストラム分析シミュレーターとは

🙋
ケプストラムって、スペクトルの綴りを並べ替えただけの名前ですよね。何の役に立つんですか?
🎓
よく気づいたね。「spectrum」をひっくり返して「cepstrum」、「frequency」をひっくり返して「quefrency」と呼ぶ。ざっくり言うと、スペクトルにもう一回フーリエ変換を掛けて、信号の中の「周期」を時間軸で取り出す道具だ。上のシミュレーターで f_0=200Hz、F_s=8000Hz の状態で下のケプストラムを見ると、quefrency=40 サンプルあたりに鋭いピークが立つ。40/8000=5ms、つまり1/200秒の周期だね。
🙋
普通の FFT でも基本周波数は分かりそうですけど、わざわざ二段階にする意味は?
🎓
いいところを突いたね。スペクトル上では基本周波数とその高調波が並んで見えるけど、人の声みたいに「基本波より高調波の方が大きい」ことがあって、ピーク選びを間違えやすい。ケプストラムなら、等間隔に並んだ調波の山がぜんぶ「quefrency=周期」の1点に集約される。シミュレーターで α を 0 から 0.8 に動かしてみて。スペクトル上の高調波の見え方が変わっても、ケプストラムのピークは同じ位置に立ったままだ。
🙋
本当だ、ピーク位置がぶれません。「対数」を取るのは何のためですか?
🎓
これがケプストラムの神髄だ。音声は「声帯の振動(励振)×声道のフィルタ(伝達系)」の畳み込みでできている。スペクトルにすると掛け算、対数を取ると足し算になる。さらに逆フーリエ変換すると、ゆっくり変わる声道成分(低 quefrency)と、鋭いピークを持つピッチ成分(高 quefrency)が時間軸上で分離できる。これを「リフタリング」で切り分けると、音声認識で使う特徴量が取り出せるんだ。
🙋
スライダーで σ を上げてノイズを増やすと、ケプストラムのピークが少しずつ低くなりますね。
🎓
そう、ノイズはスペクトルに薄く広く加わるから、対数を取ると quefrency 軸全体に薄く広がる。それでもピッチ周期に対応する 40 サンプルのピークは残るのが見えるだろう。実務でこれが効くのは機械振動の診断だ。歯車の損傷で出る等間隔の側帯波が、ケプストラム上で1本のピークに圧縮されるから、ノイズの中から損傷周期を見つけ出せる。音声分析と回転機械診断、表面はぜんぜん違うけど中身は同じ数学なんだよ。

よくある質問

この範囲は人の声のピッチに対応します。20 ms は 50 Hz(成人男性の低音域の下限あたり)、2 ms は 500 Hz(女性や子供の高音域の上限あたり)です。低 quefrency 側には声道フィルタに由来する大きな成分があり、これをピッチと誤検出しないように、生理的に妥当な範囲だけで最大値を探します。機械振動診断では対象機器の回転数に応じて探索範囲を変えます。
実ケプストラムは対数振幅 log|X[k]| だけを使い、位相情報を捨てます。本シミュレーターが計算しているのもこちらで、ピッチ検出や調波構造の解析には十分です。複素ケプストラムは log X[k](複素対数)を使うため位相情報も保持し、信号の完全な再構成(同相分解など)に使えます。ただし位相のアンラッピングが必要で実装が難しく、用途が限定されます。
本ツールでは log(|X[k]| + ε) と微小値 ε=1e-10 を加えています。理論的にはノイズの存在で |X[k]| が完全に0になることは稀ですが、零点が周波数軸上にある合成信号では発散する可能性があります。実務では信号にわずかな白色ノイズを足す、または最大値の 1e-6 倍程度を床値として加えるなどの処置が一般的です。
教育用途や N=1024 程度の単発計算なら直接 DFT で十分です(O(N²)=約100万演算、即時計算可能)。ただし実時間処理や長い信号、フレームを連続的に処理する場合は FFT(O(N log N))が必須です。WebAudio API や DSP ライブラリでは FFT が標準実装されており、本シミュレーターの計算ロジックをそのまま FFT に差し替えても結果は変わりません。

実世界での応用

音声分析・音声認識:ケプストラムは音声処理の中心的なツールです。基本周波数(ピッチ)の推定、有声/無声判定、フォルマント(声道共鳴)の抽出が、ケプストラムの低 quefrency 領域と高 quefrency 領域を切り分ける「リフタリング」で実現されます。MFCC(メル周波数ケプストラム係数)はその発展形で、音声認識・話者認識・音声合成のあらゆる場面で標準的な特徴量として使われています。

機械振動診断・回転機械の予兆保全:歯車の歯欠けや転がり軸受の損傷では、損傷周期に対応する等間隔の側帯波がスペクトル上に多数現れます。これらを直接読むのは難しいですが、ケプストラムをとると側帯波群が単一のピークに圧縮され、損傷の有無と周期を一目で判定できます。風力発電機・タービン・大型モーターの状態監視で広く使われ、IoT 時代の予兆保全の基本技術となっています。

地震学・反射波解析:地震波や反射地震探査では、地下の反射面で多重反射が起こり、同じ波形が一定の遅延時間で繰り返し現れます。ケプストラムをとると、この遅延時間に対応する quefrency にピークが立ち、地層構造の推定に利用されます。音響エコー解析でも同じ原理で、部屋の反響時間や反射面までの距離を測定できます。

生体信号解析:心音・呼吸音・筋電図など、生理的な周期信号の解析にもケプストラムが応用されます。心音の S1・S2 周期、心拍変動の隠れた周期成分、嚥下音のパターン分類などで、時間領域や周波数領域だけでは見えない構造を明らかにします。臨床診断支援や着用型バイタルセンサーの信号処理で実装が進んでいます。

よくある誤解と注意点

最も多い誤解は、「ケプストラムの横軸は周波数だ」と思い込むことです。横軸は時間の次元を持つ quefrency(サンプル数または秒)で、値が大きいほど「周期の長い成分」、つまり低い周波数に対応します。シミュレーターで f_0 を 200 Hz から 400 Hz に上げると、ケプストラムのピークは右ではなく左へ動きます。これは周期 T_0=F_s/f_0 が短くなるためです。「ケプストラム上で右に動く=高周波になる」という直感は通用しないので注意してください。

次に多いのが、ピーク位置の整数倍を見落とすことです。基本周期 T_0 に対応する n=T_0 だけでなく、n=2T_0, 3T_0… にも小さなピークが立ちます。これは基本周期の「倍音」ではなく、対数スペクトルの周期構造(基本周波数の整数倍に並ぶ調波)が再びフーリエ変換されたときに自然に現れる現象です。シミュレーターで α を小さく(高調波を強く)すると、ケプストラムの 2倍位置、3倍位置にも副ピークが出てくるのが見えます。最大ピークだけでなく、基本ピークを正しく拾うアルゴリズム(オクターブエラーの回避)が実装上の課題です。

最後に、ケプストラムは万能の周期検出器ではない点に注意が必要です。信号が非定常(ピッチが時間とともに変化する)場合、長い解析窓では複数のピッチが混ざり、ピークがぼやけます。実用では短い窓(20〜40 ms 程度)でフレームを切り、フレームごとにケプストラムを計算してピッチ軌跡を作ります。また周期性のない信号(破裂音、衝撃応答)にはそもそもピークが立ちません。ケプストラムは「周期性の強い信号」に対して威力を発揮する道具だと理解して使ってください。