応用数学 Part3-2 フーリエ級数
フーリエ級数展開からフーリエ変換まで
畳み込み積分とフーリエ変換の関係
$$ f(x) * g(x) = \int_{\infty}^{\infty} f(s)g(x-s)ds $$ 畳み込み積分の定義
足したらxになる変数全てで足し合わせたという意味である。例えば信号からパルス波を送ったときの出力波形を得るのに使ったりする(らしい)
畳み込み積分の性質
-
交換法則が成り立つ ab = ba
-
結合法則が成り立つ (a+b)+c = a+(b+c)
-
分配法則が成り立つ a * (b + c) = ab + ac
これをフーリエ変換してみる。
※この部分で、広義積分の入れ替えを無証明で行っている。これは一般には成り立たないことだが、本書の範囲を超えるので、認めてもらうことにする。
$$ \begin{eqnarray} \int_{-\infty}^{\infty} f(t) * g(t) e^{-iwt} dt &=& \int_{-\infty}^{\infty} \left(\int_{-\infty}^{\infty} f(s)g(t-s)ds \right) e^{-iwt} dt \\ &=& \int_{-\infty}^{\infty} f(s) \left(\int_{-\infty}^{\infty} g(t-s)e^{-iwt}dt \right) ds \\ &=& \int_{-\infty}^{\infty} f(s) \left(\int_{-\infty}^{\infty} g(t-s)e^{-iw(t-s)}e^iws dt \right) ds \\ &=& \int_{-\infty}^{\infty} f(s) \left(\int_{-\infty}^{\infty} g(t-s)e^{-iw(t-s)}dt \right) e^{iws} ds \\ &=& \int_{-\infty}^{\infty} f(s) \left(\int_{-\infty}^{\infty} g(t')e^{-iwt'}dt' \right) e^{iws} ds (\because変数変換)\\ &=& \int_{-\infty}^{\infty} f(s) G(\omega) e^{iws} ds \\ &=& G(\omega) \int_{-\infty}^{\infty} f(s) e^{iws} ds \\ &=& G(\omega)F(\omega) \\ &=& F(\omega)G(\omega) \end{eqnarray} $$$$ \therefore \int_{-\infty}^{\infty} f(t) * g(t) e^{-iwt} dt = F(\omega)G(\omega) $$ウィンドウ化~ハイパスフィルタ、ローパスフィルタ~
例えば、f(t)を$t-w$~$t+w$で平均化した値で作った関数$\bar{f}(t)$を考えると、
$$ \bar{f}(t) = \int_{-w}^{w} \frac{1}{2w}f(t-s) ds $$となる。これを畳み込みをつかって表すと、 $$ w(t) = \left\{ \begin{array}{l} \frac{1}{2w} &(-w<=t<=w) \\ 0 &(other) \end{array} \right. \\ $$ $$ \begin{eqnarray} \bar{f}(t) &=& \int_{-\infty}^{\infty} w(t)f(t-s) ds \\ &=& w(t) * f(t) \end{eqnarray} $$ と書ける。
この$w(t)$を別の関数にすることで、様々な変換が書ける。この操作を関数$w(t)$によるフィルターという
この時$\bar{f}(t), f(t), w(t)$のフーリエ変換をそれぞれ$\tilde{F}(\omega), F(\omega), W(\omega)$と置くと、$\bar{f}(t)$のフーリエ変換は以下のようになる
$$ \tilde{F}(\omega) = F(\omega)W(\omega) $$前回やったように、$W(\omega)$はこんな形の関数で、大域的にみると、$|\omega|$が小さいところではと大きく、大きいところでは小さくなっている
このようなフィルターをローパスフィルタと呼び、逆に高周波成分を増幅させ(低周波数成分を減弱させ)るものをハイパスフィルターと呼ぶ。低周波成分と高周波成分を減弱させ(てその中間を増幅し)たものを帯域フィルタと呼ぶ。
例えば関数$f(x)$をフーリエ変換して、ローパスフィルタを作用させると、高周波成分を取り除いたものが出来上がる。
今回はsin波にノイズを加えた関数をフーリエ変換して、ローパスフィルタでノイズを除去しているところを紹介する。
# 参考にしたサイト
# https://helve-python.hatenablog.jp/entry/2018/06/17/000000
# https://qiita.com/ajiron/items/ca630de8b6e3ed28ad1e
import numpy as np
import matplotlib.pyplot as plt
def func(t):
f1 = 10
# 正規分布ノイズ
return 1.5 * np.sin(2*np.pi*f1*t)
# np.arange(start, end, dt) [start, end)
N = 1024
dt = 0.001
start = 0
end = N * dt
t = np.arange(start, end, dt)
x = func(t)
noise = 1 * np.random.randn(x.shape[0])
x += noise
fig, ax = plt.subplots()
ax.plot(t[:300], x[:300])
ax.set_xlabel("Time[s]")
ax.set_ylabel("Signal")
ax.grid()
plt.show()
ノイズが入って、ガタガタになっている。
F = np.fft.fft(x) # 変換結果
freq = np.fft.fftfreq(N, d=dt) # 周波数
fig, ax = plt.subplots(nrows=2, sharex=True, figsize=(6,6))
ax[0].plot(F.real[:N//2], label="Real part")
# ax[0].plot(F.real, label="Real part")
ax[0].legend()
ax[1].plot(F.imag[:N//2], label="Imaginary part")
# ax[1].plot(F.imag, label="Imaginary part")
ax[1].legend()
plt.show()
G = F.copy()
freq = np.linspace(0, 1.0/dt, N) # 周波数軸
fc = 100 #カットオフ周波数
fc_upper = 1/dt - fc
G[((freq > fc) & (freq < fc_upper))] = 0 * 0j
g = np.fft.ifft(G)
g = g.real
fig, ax = plt.subplots(nrows=2)
ax[0].plot(t,x,label="before")
ax[0].legend()
ax[1].plot(t, g, label="after")
ax[1].legend()
plt.show()
パワースペクトル、自己相関関数
以下で定義された関数$P(\omega)$を関数$f(t)$のパワースペクトルという
$$ P(\omega) = |F(\omega)|^2 $$以下で定義された関数$R(\tau)$を信号$f(t)$の自己相関関数という
$$ R(\tau) = \int_{-\infty}^{\infty} f(t) \overline{f(t-\tau)} dt $$ただし$\overline{x}$は$x$の共役を表す。
自己相関関数をフーリエ変換する。
$$ \begin{eqnarray} \int_{-\infty}^{\infty} R(\tau)e^{-i\omega \tau}d\tau &=& \int_{-\infty}^{\infty} \left(\int_{-\infty}^{\infty} f(t) \overline{f(t-\tau)} dt \right)e^{-i\omega \tau}d\tau \\ &=& \int_{-\infty}^{\infty} \left(\int_{-\infty}^{\infty} f(t) \overline{f(t-\tau)} e^{-i\omega \tau} d\tau \right) dt \\ &=& \int_{-\infty}^{\infty} f(t) \left(\int_{-\infty}^{\infty} \overline{f(t-\tau)} e^{-i\omega \tau} d\tau \right) dt \\ % &=& \int_{-\infty}^{\infty} f(t) \left(\int_{-\infty}^{\infty} \overline{f(t-\tau)e^{i\omega \tau}} d\tau \right) dt \\ &=& \int_{-\infty}^{\infty} f(t) \overline{ \int_{-\infty}^{\infty} f(t-\tau)e^{i\omega \tau} d\tau} dt \\ &=& \int_{-\infty}^{\infty} f(t) \overline{ \int_{-\infty}^{\infty} f(t-\tau)e^{i\omega (\tau-t)} e^{i\omega t} d\tau} dt \\ &=& \int_{-\infty}^{\infty} f(t) \overline{ \int_{-\infty}^{\infty} f(t-\tau)e^{i\omega (\tau-t)} d\tau} e^{-i\omega t} dt \\ &=& \int_{-\infty}^{\infty} f(t) e^{-i\omega t} dt \overline{ \int_{-\infty}^{\infty} f(t-\tau)e^{-i\omega (t-\tau)} d\tau} \\ &=& \int_{-\infty}^{\infty} f(t) e^{-i\omega t} dt \overline{ \int_{\infty}^{-\infty} f(\tau')e^{-i\omega \tau'} (-d\tau')} (\because \tau' = t-\tauとおいた)\\ &=& \int_{-\infty}^{\infty} f(t) e^{-i\omega t} dt \overline{ \int_{-\infty}^{\infty} f(\tau')e^{-i\omega \tau'} d\tau'} \\ &=& F(\omega)\overline{F(\omega} \\ &=& |F(\omega)|^2 \\ &=& P(\omega) \end{eqnarray} $$$$ \therefore \int_{-\infty}^{\infty} R(\tau)e^{-i\omega \tau}d\tau = P(\omega) $$これらを合わせて考えると、
$$ f(t) →(フーリエ変換)→ F(\omega) →(2乗)→ P(\omega)(=|F(\omega)|^2) \\ f(t) →(自己相関関数)→R(\tau) →(フーリエ変換)→ P(\omega) $$という2通りでパワースペクトル$P(\omega)$に変換することが出来る