20151120 ckinoshita

相関関数 木下 知奈美 廣安 知之 日和 悟 2015 年 10 月 28 日 IS Report No. 2015111701 Report
Medical Information System Laboratory Abstract
相関関数とは信号の性質を記述する方法の一つであり,ある信号を一定時間 τ ずらしたとき,元の信
号とどの程度関係があるか,類似度を調べることができる.MATLAB のコマンドを例に出しながら
相関関数について理解を深める.
キーワード: 信号の類似度,自己相関関数,相互相関関数,正規相互相関関数,MATLAB
目次
第 1 章 はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
相関関数とは
. . . . . . . . . . . . . . . . . . . . . . . . . .
第 2 章 信号の類似度と相関関数の定義
2
2
. . . . . . . . . . . . . . . . . . .
3
第 3 章 相関関数の種類 . . . . . . . . . . . . . . . . . . . . . . . . . .
4
3.1
自己相関関数
. . . . . . . . . . . . . . . . . . . . . . . . . .
4
3.2
相互相関関数
. . . . . . . . . . . . . . . . . . . . . . . . . .
4
第 4 章 相互相関関数の仕組み . . . . . . . . . . . . . . . . . . . . . . .
5
連続データを用いた例 . . . . . . . . . . . . . . . . . . . . . . .
5
4.1.1
正弦波と余弦波 . . . . . . . . . . . . . . . . . . . . . . . . .
5
4.1.2
正弦波とホワイトノイズ . . . . . . . . . . . . . . . . . . . . .
5
ベクトル変数を用いた例 . . . . . . . . . . . . . . . . . . . . . .
5
第 5 章 MATLAB を用いた相互相関関数の算出 . . . . . . . . . . . . . . . .
8
5.1
直接法での算出 . . . . . . . . . . . . . . . . . . . . . . . . . .
8
5.2
FFT 法での算出 . . . . . . . . . . . . . . . . . . . . . . . . .
8
5.3
FFT 法による巡回対策 . . . . . . . . . . . . . . . . . . . . . . .
9
第 6 章 正規相互相関関数 . . . . . . . . . . . . . . . . . . . . . . . . .
10
第 7 章 まとめ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
4.1
4.2
第 1 章 はじめに
1.1
相関関数とは
相関関数とは信号の性質を記述する方法の一つであり,ある信号を一定時間 τ ずらしたとき,元の
信号とどの程度関係があるか,類似度を調べることができる.
2
第 2 章 信号の類似度と相関関数の定義
信号の類似度の表し方の一つに,2 つの信号 x(t),y(t) の差を二乗の期待値で表現したものがある.
[
]
[
]
[
]
∥x − y∥2 = E (x(t) − y(t))2 = E x(t)2 + E y(t)2 − 2E [x(t)y(t)]
(2.1)
2E [x(t)y(t)]
∥x − y∥2 = x2 + ∥y∥2 −
∥x∥ ∥y∥
∥x∥ · ∥y∥
(2.2)
となる.また,三角形 ABC において余弦定理を考えて 2 つの信号 x,y をある空間ベクトルである
とみなすこともでき,
∥x − y∥2 = ∥x∥2 + ∥y∥2 − 2 cos θ · ∥x∥ ∥y∥
(2.3)
が成立する.式 (2.2),式 (2.3) より
cos θ ⇐⇒
E [x(t)y(t)]
∥x∥ · ∥y∥
(2.4)
の関係が成立する.x,y ベクトルの示す角度は空間ベクトルの類似度と一致するため,2 つの信号の
期待値も 2 つの信号の類似度と一致するといえる.このような理由で定義されたのが相関関数
ϕxy = E [x(t)y(t)]
である.
3
(2.5)
第 3 章 相関関数の種類
3.1
自己相関関数
自己相関関数は,信号の時間遅れやむだ時間の検出に使われる.引数 τ を用いて,時間変化に伴う
類似度を表現することができる.
1
T →∞ 2T
ϕxy (τ ) = E [x(t)x(t + τ )] = lim
∫
T
x(t)x(t + τ )dt
(3.1)
−T
信号中に周期変動成分が存在していれば τ がその周期に一致するときに相関が高くなる性質を持つ.
3.2
相互相関関数
相互相関関数は,2 つの信号の類似度を表現することができる.
1
T →∞ 2T
ϕxy (τ ) = E [x(t)y(t + τ )] = lim
∫
T
x(t)y(t + τ )dt
(3.2)
−T
また,実用上データ点数が N 点であると仮定し,離散値で表現すると式 (3.3) のようになる.
ϕxy [τ ] =
N
∑
x [k] y [k + τ ]
k=1
4
(3.3)
第 4 章 相互相関関数の仕組み
4.1
4.1.1
連続データを用いた例
正弦波と余弦波
Fig. 4.1 のような y = sin(t) と y = cos(t) の τ = 0 のときの相関値は式 (4.1) ようになり (t は
0.01 ∗ π 刻み),相関がないことが示せる.
ϕxy [τ ] =
4π
∑
sin [t] cos [t] = −0.0012
(4.1)
t=0
Fig. 4.1 y = sin(t) と y = cos(t)(0 ≤ t ≤ 4π)(自作)
y = cos(t) を
π
2
平行移動させたとき,つまり τ =
π
2
のとき,2 つのグラフは一致するため相関値が
高くなる.
τ を変化させたときの相関関数は Fig. 4.2 のようになる.
4.1.2
正弦波とホワイトノイズ
Fig. 4.3 のような y = sin(t) とホワイトノイズの相関関数を求めると Fig. 4.4 のような結果となり,
相関がないということがわかる.
4.2
ベクトル変数を用いた例
[
]
[
]
x = 0 0 2 3 4 5 ,y = 2 3 4 5 の 2 つのベクトル変数を用いて Fig. 4.5 のように τ を
変化させ,相関値を求める.2 回ずらしたところで,x と y の値が一致するため,この時の相関値が
最も高くなることがわかる.
5
4.2 ベクトル変数を用いた例
第 4 章 相互相関関数の仕組み
Fig. 4.2 y = sin(t) と y = cos(t) の相関関数 (自作)
Fig. 4.3 y = sin(t) とホワイトノイズ (0 ≤ t ≤ 4π)(自作)
Fig. 4.4 y = sin(t) とホワイトノイズの相関関数 (自作)
6
4.2 ベクトル変数を用いた例
第 4 章 相互相関関数の仕組み
Fig. 4.5 ベクトル変数の τ 変化の模式図 (参考文献 1) より自作)
7
第 5 章 MATLAB を用いた相互相関関数の算出
5.1
直接法での算出
直接法では,Fig. 4.5 の流れを配列演算子と sum 関数を活用したスクリプトで Fig. 5.1 のように
表せる.しかし,for 文を利用するため処理速度があまり早くないという問題がある.
Fig. 5.1 Fig. 4.5 の MATLAB スクリプト (自作)
5.2
FFT 法での算出
FFT 法は,処理速度の面で直接法より優れている.このため,MATLAB Single Processing Toolbox に存在している相互相関係数を計算する’xcorr’ 関数には FFT 法が採用されており,処理手順は
以下のようになっており,FFT 法を用いた相関関数は式 (5.1) のように表せる.
1. 周波数領域に分解
2. 周波数ごとに計算
3. 一方のデータは複素共役を取り,乗算
4. 周波数ごとのずれ (角度に相当) を計算
5. 逆 FFT を利用し時間軸データに変換
ϕxy = IF F T (F F T (x(k). ∗ conj(F F T (y(k))))
(5.1)
しかし,FFT 法にも巡回的影響という問題がある.これは FFT で扱う信号が周期関数データであり,
データの始点と終点が連続しているためである.この問題を解決せずに計算を行うと,直接法と異
8
5.3FFT 法による巡回対策
第 5 章 MATLAB を用いた相互相関関数の算出
なる値が出てくる.このときの値を巡回的相関係数と呼んでいる.MATLAB に存在する’xcorr’ 関数
では,データの大きさに応じて 0 を挿入することで相互相関係数を求めることで,巡回対策を行って
いる.
5.3
FFT 法による巡回対策
[
]
[
]
x = 2 3 4 5 ,y = 3 4 5 7 の 2 つのベクトル変数について,相関は以下の手順で計算さ
れている.
1. x,y ベクトルの長さを計測し,長い方を選択する
2. FFT 処理のため,x,y ベクトルに 0 を挿入し,データ長を一致させる
3. 巡回対策のため,長い方のデータ長 lxy より 1 短い lxy − 1 の長さの 0 ベクトルを xx,yy ベク
トルの前後に挿入し,FFT を計算する
手順に対応する MATLAB のスクリプト Fig. 5.2 に示す.
Fig. 5.2 巡回対策した FFT 法の MATLAB スクリプト (自作)
9
第 6 章 正規相互相関関数
ここまでで算出した相関値は正規かされていなかったため,相関値の大きさの意味合いが不明確で
あった.正規相互相関関数 Rxy (τ ) は式 (6.1) のように定義されており,最も類似している場合に 1,
最も類似していない場合に-1 となる.
Rxy (τ ) = √
ϕXY (τ )
√
ϕXX (0) ϕY Y (0)
(6.1)
MATLAB では’coeff’ オプションを用いることで簡単に正規相互相関関数を求めることができる.ス
クリプトとその結果を Fig. 6.1 に示す.Fig. 6.2 のようの τ が変化しており,4 つずれたところ
で値が 3 つ揃っているため,この正規相互相関関数は τ = 4 のところで Fig. 6.3 のようにピークを
持つ.
Fig. 6.1 ”coeff”オプションを用いた際の MATLAB スクリプトとその結果 (自作)
Fig. 6.2 τ 変化の模式図 (参考文献 1) より自作)
10
第 6 章 正規相互相関関数
Fig. 6.3 正規相互相関数 (自作)
11
第 7 章 まとめ
相関関数とは信号の性質を記述する方法の一つであり,ある信号を一定時間 τ ずらしたとき,元
の信号とどの程度関係があるか,類似度を調べることができる.自己相関関数では信号の時間遅れの
検出もできる.MATLAB の’xcorr’ 関数を用いることで簡単に相関関数を求めることができる.さら
に’coeff’ オプションを用いることで正規相関関数を求めることもできる.正規化することで相関値の
大きさの意味合いが明確になる.
12
参考文献
[1] 小林一行, MATLAB 活用ブック, 初版第 1 刷, 株式会社秀和システム, 2001.
13