04 フーリエ変換とパワースペクトル

時系列を周波数で見直し、フーリエ変換とパワースペクトルの意味を図と数式で理解する。

この回の中心
フーリエ変換とパワースペクトルの考え方
見るもの
単純な波、混合波、ノイズ入り波のスペクトル
次につながる内容
Blackman–Tukey、FFT、MEM の比較

1. 時間領域と周波数領域

時系列データは通常、時間に対して値をプロットする。この見方を時間領域という。しかし、時間領域だけでは「どの周期が強いか」は分かりにくい。

そこで、横軸を時間ではなく周波数や周期にして、どの時間スケールの変動が強いかを見る。この見方を周波数領域という。

同じデータでも、時間領域では「いつ起きたか」、周波数領域では「何か月・何年スケールか」を見ることができる。

2. 単純な波

Single wave in time domain
周期20の単純な波。時間領域では規則的な振動として見える。
Single wave spectrum
そのパワースペクトル。1つの周波数にピークが現れる。

単純な1つの波だけでできている信号なら、スペクトルでは対応する周波数に1本のピークが出る。

3. フーリエ変換の数式(導出から理解する)

① まずやりたいこと

時系列 x(t) の中に、ある周期の波が含まれているかを調べたい。

例えば、周波数 f の波を調べたいなら、次のような波を用意する。

cos(2πft)

ここで f = 1 / 周期 である。つまり、周期20なら f = 1/20 = 0.05 になる。


② 「似ているか」をどう測るか

2つの関数が似ているかどうかは、「掛けて、全体で足し合わせる」と判断できる。

∫ x(t) cos(2πft) dt

この値が大きければ、x(t)cos(2πft) によく似ている。逆に小さければ、あまり似ていない。

つまりこれは、元のデータと、その周波数の波との一致度を測っている。

ここでやっていることは「その周波数の波を1本用意して、元のデータとどれくらい重なるかを見る」ことである。

③ でも cos だけでは足りない

同じ周期でも、波には位相のずれがある。例えば次の波は、cos と同じ周期だが 90 度ずれている。

sin(2πft)

もし元のデータが sin 型の波だったら、cos との一致度だけでは十分に検出できない。そこで、sin との一致度も調べる必要がある。

∫ x(t) sin(2πft) dt

つまり、1つの周波数について調べるには、

の両方が必要になる。


④ 2つを1つにまとめる

cos と sin を毎回別々に書くのは面倒なので、複素指数関数で1つにまとめる。

ここでオイラーの公式を使う。

e = cosθ + i sinθ

この式で θ を −2πft と置くと、

e-i2πft = cos(2πft) - i sin(2πft)

となる。

なぜ「−i」なのか

上の式でマイナスがつくのは、オイラーの公式に θ = -2πft を代入しているからである。

つまり、

ei(-2πft) = cos(-2πft) + i sin(-2πft)

であり、cos は偶関数、sin は奇関数なので、

cos(-2πft) = cos(2πft), sin(-2πft) = -sin(2πft)

したがって、

e-i2πft = cos(2πft) - i sin(2πft)

となる。

− は「解析するときの向き」であり、逆変換では + が使われる。片方を −、もう片方を + にすることで、分解した波を元の信号に戻せる。

⑤ ここでフーリエ変換を定義する

これまでに見たように、ある周波数 f に対して

∫ x(t) e-i2πft dt

を計算すると、その周波数の波がどれだけ含まれているかが分かる。

これを、すべての周波数 f について計算したものを X(f) と定義する。

X(f) = ∫ x(t) e-i2πft dt
これがフーリエ変換である。

⑥ 本当に展開してみる

この式に、さきほどの

e-i2πft = cos(2πft) - i sin(2πft)

を代入すると、

X(f) = ∫ x(t)[cos(2πft) - i sin(2πft)] dt

積分の線形性により、

X(f) = ∫ x(t)cos(2πft)dt - i∫ x(t)sin(2πft)dt

と書ける。つまり、

を表している。


⑦ なぜ「内積」と言えるのか

関数の内積は、次のように定義される。

⟨f, g⟩ = ∫ f(t)g(t)dt

したがって、フーリエ変換は

X(f) = ⟨x(t), e-i2πft

と見なせる。つまり、x(t) を「周波数 f の波」に投影しているのである。

内積が大きいほど、その周波数の波と元のデータがよく似ている。

⑧ 離散版にする前に、時間を刻む

ここまでは連続的な時間 t を使っていた。しかし、実際のコンピュータで扱うデータは離散である。そこで時間を一定間隔 Δt ごとに区切る。

t = nΔt

ここで、

である。


⑨ 積分を足し算に置き換える

積分は「細かく分けて足し合わせる」ことで近似できる。したがって、

X(f) = ∫ x(t)e-i2πftdt

は、

X(f) ≈ Σ x(nΔt)e-i2πf nΔtΔt

と書ける。

Δt = サンプリング間隔(例:1か月)

ここで注意が必要なのは、最後に付いている Δt である。 これは「時間の刻み幅」であり、周波数 f には依存しない定数である。

つまり、厳密にはフーリエ変換は次のように書かれる:

Xcont(f) ≈ Δt Σ x(nΔt)e-i2πf nΔt

ここでは、連続時間の式から離散化した形を区別するために、 連続版を Xcont(f) と書いている。

しかし、ここで私たちが知りたいのは 「どの周波数が強いか(ピークの位置)」であり、 全体に一定の倍率がかかるかどうかは本質ではない。

そのため授業では、この定数 Δt を フーリエ変換の定義の中にまとめて吸収してしまい、

X(f) ≈ Σ x(nΔt)e-i2πf nΔt

という形で扱う。

Δt は「スケール(大きさ)」を決めるだけで、 「どの周波数にピークが出るか」には影響しないため、 スペクトル解析では省略されることが多い。

以後、離散化された時系列データを簡単に表すために、 x(nΔt)x(n) と書く。


⑩ 周波数も離散化する

データ数が有限なら、区別できる周波数も有限個になる。データ数を N とすると、周波数は次のように離散化できる。

f = k / (NΔt)

ここで、

である。

k は振動数そのものではなく、 「データ全体の中で何回振動するか」を表す量である。 実際の振動数は f = k / (NΔt) で与えられる。

この式を

X(f) ≈ Σ x(nΔt)e-i2πf nΔt

に代入すると、指数の中は

2πf nΔt = 2π × (k / (NΔt)) × nΔt = 2πkn / N

となり、Δt が消える。

したがって、

X(k) = Σ x(n)e-i2πkn/N

となる。これが離散フーリエ変換である。


⑪ k, n, N の意味

X(k) は「周波数番号 k に対応する波がどれだけ含まれているか」を表す。

⑫ Pythonとの対応

np.fft.rfft(x)

この1行が、上の総和をすべての周波数について計算している。


⑬ X(f)とは何か

X(f) は「周波数 f の波がどれだけ含まれているか」を表す量である。

ただし X(f) は複素数なので、そのままでは見にくい。そこには

の情報が入っている。


⑭ 振幅とパワー

まず、複素数 X(f) の大きさをとる。

|X(f)| = √(実部2 + 虚部2)

さらに、その2乗をとる。

Power(f) = |X(f)|2

これがパワースペクトルである。

パワースペクトルは「その周波数がどれくらい強く効いているか」を表す。

⑮ なぜ2乗するのか

物理では、エネルギーは振幅の2乗に比例することが多い。たとえば波の強さも、単純には振幅の2乗に比例すると考えられる。

Energy ∝ 振幅2

したがって、振幅そのものではなく、その2乗をとると「どの周波数がどれだけエネルギーを持つか」が見やすくなる。


⑯ パワースペクトルの横軸と縦軸

グラフのピークは、「その周波数の成分が強い」ことを意味する。


⑰ 周波数と周期の関係

f = 1 / 周期

したがって、

である。

例えば、


⑱ なぜスペクトルでピークが出るのか

すべての周波数について「その周波数の波とどれだけ似ているか」を計算しているので、元のデータに本当に含まれている周期では一致度が大きくなる。

その結果、スペクトルにピークが現れる。

フーリエ変換とは、さまざまな周波数の波を当てはめて、その一致度を全部調べる操作である。

4. 複数の周期が混ざる場合

Mixed waves in time domain
時間領域では複雑に見える。
Mixed waves spectrum
しかしスペクトルでは2つのピークとして分離される。

5. ノイズがある場合

Noisy waves in time domain
ノイズがあると時間領域では周期が見えにくい。
Noisy waves spectrum
それでもスペクトルでは周期成分が残る。

6. パワースペクトル

Power(f) = |X(f)|2

パワースペクトルは、各周波数の強さを表す。

7. 周波数と周期

周期 = 1 / 周波数

8. まとめ