信号処理のツールボックスには、見た目の素朴さに反して深い意味を持つ演算子がたまにある。Teager-Kaiser エネルギー演算子(TKEO)もそのひとつだと思う。
定義
連続時間版の定義はこれだ:
Ψ[x(t)]=x˙(t)2−x(t)x¨(t)
微分と掛け算だけ。シンプルすぎて、これが何かに使えるとは最初は思えない。
純粋な正弦波で試す
x(t)=Acos(ωt)
に代入する。x˙=−Aωsin(ωt)、x¨=−Aω2cos(ωt) なので、
Ψ[x]=A2ω2sin2(ωt)+A2ω2cos2(ωt)=A2ω2
時刻 t によらない定数になった。A と ω だけで決まる。
物理との対応
バネ・質量系の調和振動子を思い出すと、ハミルトニアンは
H=21mx˙2+21kx2=21mA2ω2
つまり Ψ[x]=A2ω2=2H/m だ。TKEO は振動の「エネルギー」を文字通り測っている。Teager が energy operator と名付けたのはそういう理由なんだと思う。
AM-FM 信号への拡張
面白いのは、振幅と周波数が時間変化する信号
x(t)=A(t)cos(θ(t)),ω(t)=θ˙(t)
でも、変化がゆっくりなら同じ関係が近似的に成り立つことだ:
Ψ[x(t)]≈[A(t)ω(t)]2
x˙ に同じ演算子を適用すると Ψ[x˙]≈[A(t)ω(t)2]2 となるので、比をとれば
ω^(t)=Ψ[x(t)]Ψ[x˙(t)],A^(t)=ω^(t)Ψ[x(t)]
瞬時周波数と瞬時振幅が同時に出てくる。Fourier 変換もウィンドウも使わない。
離散版
実装で使うのはこちらだ:
Ψ[x(n)]=x(n)2−x(n−1)x(n+1)
x(n)=Acos(ωn) を代入する。積和公式 cosAcosB=21[cos(A−B)+cos(A+B)] を使うと
x(n−1)x(n+1)=2A2[cos(2ω)+cos(2ωn)]
x(n)2=2A2[1+cos(2ωn)]
差をとれば
Ψ[x(n)]=2A2[1−cos(2ω)]=A2sin2(ω)
ω≪π のとき sinω≈ω なので Ψ≈A2ω2 となり、連続版と一致する。
前後 1 点ずつ、合計 3 サンプルだけで計算が完結する。FFT 不要、フィルタ長も決めなくていい。
どこで使うか
- 音声の基本周波数(F0)のリアルタイム追跡
- 軸受振動から故障周波数を拾う機械診断
- EEG やバイタルの瞬時周波数解析
- 限られた計算資源での AM-FM 変調解析
Hilbert 変換ベースの瞬時周波数推定と比べると、TKEO は FFT を一切使わない分、リアルタイム処理や低消費電力の組み込み環境では有利なことがある。ただし、多成分信号やノイズが多い場面では弱くなるので、どちらを選ぶかは信号の性質による。
Teager が 1992 年に発表した演算子で、比較的新しいからか教科書のカバレッジが薄い印象がある。バネのエネルギーと信号処理が同じ式で繋がる、あの「ああそういうことか」という瞬間がなかなか気持ちいいと思う。
— ランキン
コメント
まだコメントはないよ。最初のひとことをどうぞ。