ディジタル信号処理 第11回-1 相関関数

💡
信号と信号の似ている度合いを図りたい.それは関数で表される.

0. 2つの信号の「似ている度」をどう定量化する?

上記動画の1:08頃から始まるバスドラムの音を考えてみよう.

ケース1:異なる2つの信号

この 2 つの信号の「似ている度」をどうやって計算したら良いだろうか?

(音引用元: https://maou.audio/se_inst_drum1_kick/)

 直感的に良さそうなのは,各時刻について信号を掛けて,それを総和する方法.信号をそれぞれ x(n),y(n)x(n), y(n) とすると,

似ている度=1Nn=0N1x(n)y(n)\begin{align} 似ている度 = \frac{1}{N}\sum\limits_{n = 0}^{N-1}x(n)y(n) \end{align}

例えば,

ケース2:時刻のズレた信号同士

 波形の形は似ている.ただ,波形の現れるタイミングが違うから式(1)でやっても測れなさそう.言い換えると,下の波形を左側にいい感じにシフトしてあげれば,ケース1と同じようになって式(1)で測れそう.

ケース3:自分自身

 自分自身と式(1) を計算すると,

似ている度=1Nn=0N1x2(n)\begin{align} 似ている度 = \frac{1}{N}\sum\limits_{n = 0}^{N-1}x^2(n) \end{align}

のように 2乗和(=パワー)になる.また,時間をずらした自分自身を計算すると,上図で信号の山谷のタイミングが揃う程度にずらしたときに,似ている度が大きくなりそう.

ケース1〜3を通して言えそうなこと

1. 自己相関関数・相互相関関数

定義

 相関関数とは、2つの信号(あるいは系列)の一致度を測る関数である。この関数は、片方の信号に対してずらした時間を引数にして、その時の信号間の一致度を返す。2 つの異なる信号x,yx, y間で測る相関関数を相互相関関数という。

ϕxy(m)=1Nn=0N1x(n)y(n+m)\begin{align} \phi_{xy}(m) = \frac{1}{N}\sum\limits_{n = 0}^{N-1}x(n)y(n+m) \end{align}

 mm はずらした時間値である。この式は、信号 yy を時刻 mm だけずらした時の、信号同士を掛けて総和したもの(=式(1))である。イメージは以下のとおり。

 一方で、1つの信号の中で計算される相関関数を自己相関関数という。

ϕxx(m)=1Nn=0N1x(n)x(n+m)\begin{align} \phi_{xx}(m) = \frac{1}{N}\sum\limits_{n = 0}^{N-1}x(n)x(n+m) \end{align}

この式は、自分自身を時刻 mm だけずらした時の、自分同士を掛けて総和したもの(=式(1))。定常信号(平均や分散などの統計的性質が時間で変化しない信号)では偶関数になる(ϕxx(m)=ϕxx(m)\phi_{xx}(m) = \phi_{xx}(-m))。

💡
相関係数 (correlation coefficient) と相関関数 (correlation function) は異なることに注意しよう。両者とも 2 つのデータを入力にとる点は共通する。前者は 0 ~ 1 に正規化されたスカラ値を出力するが、後者はシフト値を変数にとる、正規化されていない関数である。

手計算してみよう

💡
x(n)=sin(π4(n1)),N=8x(n)=\sin\left(\frac{\pi}{4}(n-1) \right), N=8 における自己相関関数を計算せよ。関数の値が大きくなるのは、信号の周期に一致する時刻であることを確認せよ。

2. まとめ