フーリエ級数展開は、周期関数を三角関数(sin と cos)の無限和として表現する手法です。信号処理、通信工学、振動解析、量子力学など、理工学のあらゆる分野で基盤となる重要な理論です。
大雑把に言うと、「どんな複雑な周期的な波でも、単純な sin と cos の波を重ね合わせれば作れる」というのがフーリエ級数展開の考え方です。本記事では、フーリエ級数の定義からフーリエ係数の導出までを省略せずに丁寧に解説し、Python で可視化を行います。
本記事の内容
- フーリエ級数の直感的な理解
- フーリエ級数の数学的な定義
- フーリエ係数の導出(三角関数の直交性を利用)
- 三角関数の直交性の証明
- 具体例:矩形波のフーリエ級数展開
- Python による可視化とギブス現象
前提知識
この記事を読む前に、以下の概念を理解しておくと学習がスムーズです。
フーリエ級数展開の直感
まずは、フーリエ級数展開のイメージを掴みましょう。
私たちの身の回りには、さまざまな「周期的な波形」が存在します。音楽の音、心電図、交流電圧など、一定の周期で同じパターンを繰り返す信号です。こうした波形は、見た目がどんなに複雑であっても、周波数の異なる sin 波と cos 波を適切な振幅で足し合わせることで再現できます。
イメージとしては、オーケストラに似ています。個々の楽器はそれぞれ単純な正弦波的な音を出していますが、それらを重ね合わせることで、豊かで複雑な音色が生まれます。フーリエ級数展開は、この「複雑な波 → 単純な波の和」という分解を数学的に厳密に行うものです。
フーリエ級数の数学的定義
周期 $2\pi$ の周期関数 $f(x)$ が一定の条件(ディリクレ条件)を満たすとき、$f(x)$ は次のように三角関数の無限級数で表現できます。
$$ f(x) = \frac{a_0}{2} + \sum_{n=1}^{\infty}\left(a_n \cos nx + b_n \sin nx\right) $$
ここで、$a_0$, $a_n$, $b_n$ はフーリエ係数と呼ばれ、次の積分で定義されます。
$$ a_0 = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\, dx $$
$$ a_n = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\cos nx\, dx \quad (n = 1, 2, 3, \dots) $$
$$ b_n = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\sin nx\, dx \quad (n = 1, 2, 3, \dots) $$
なぜこの形になるのかを、次のセクションで導出していきます。
三角関数の直交性
フーリエ係数の導出には、三角関数の直交性が本質的な役割を果たします。まず、直交性とは何かを定義し、それを証明します。
関数 $g(x)$ と $h(x)$ が区間 $[-\pi, \pi]$ で直交するとは、次の内積が $0$ になることを意味します。
$$ \langle g, h \rangle = \int_{-\pi}^{\pi} g(x) h(x)\, dx = 0 $$
三角関数系 $\{1, \cos x, \sin x, \cos 2x, \sin 2x, \dots\}$ は、区間 $[-\pi, \pi]$ 上で互いに直交します。具体的には、以下の3つの関係が成り立ちます。
(1) cos と sin の直交
任意の正整数 $m$, $n$ に対して、
$$ \int_{-\pi}^{\pi} \cos mx \cdot \sin nx\, dx = 0 $$
が成り立ちます。これは、$\cos mx \cdot \sin nx$ が奇関数であり、対称区間 $[-\pi, \pi]$ 上の積分が $0$ になることから明らかです。積和公式を用いて確認しましょう。
$$ \cos mx \cdot \sin nx = \frac{1}{2}\left[\sin(m+n)x – \sin(m-n)x\right] $$
$$ \begin{align} \int_{-\pi}^{\pi} \cos mx \cdot \sin nx\, dx &= \frac{1}{2}\int_{-\pi}^{\pi} \sin(m+n)x\, dx – \frac{1}{2}\int_{-\pi}^{\pi} \sin(m-n)x\, dx \\ &= 0 \end{align} $$
$\sin$ は奇関数なので、対称区間 $[-\pi, \pi]$ での積分は $0$ です。
(2) cos 同士の直交
正整数 $m \neq n$ に対して、
$$ \int_{-\pi}^{\pi} \cos mx \cdot \cos nx\, dx = 0 $$
が成り立ちます。積和公式を使って示します。
$$ \cos mx \cdot \cos nx = \frac{1}{2}\left[\cos(m-n)x + \cos(m+n)x\right] $$
$$ \begin{align} \int_{-\pi}^{\pi} \cos mx \cdot \cos nx\, dx &= \frac{1}{2}\int_{-\pi}^{\pi} \cos(m-n)x\, dx + \frac{1}{2}\int_{-\pi}^{\pi} \cos(m+n)x\, dx \\ &= \frac{1}{2}\left[\frac{\sin(m-n)x}{m-n}\right]_{-\pi}^{\pi} + \frac{1}{2}\left[\frac{\sin(m+n)x}{m+n}\right]_{-\pi}^{\pi} \\ &= 0 + 0 = 0 \end{align} $$
$m \neq n$ のとき、$m-n$ と $m+n$ はいずれも $0$ でない整数なので、$\sin$ の周期性から各項が $0$ になります。
一方、$m = n$ のときは、
$$ \int_{-\pi}^{\pi} \cos^2 nx\, dx = \int_{-\pi}^{\pi} \frac{1 + \cos 2nx}{2}\, dx = \frac{1}{2}\cdot 2\pi + 0 = \pi $$
(3) sin 同士の直交
正整数 $m \neq n$ に対して、
$$ \int_{-\pi}^{\pi} \sin mx \cdot \sin nx\, dx = 0 $$
が成り立ちます。同様に積和公式を使います。
$$ \sin mx \cdot \sin nx = \frac{1}{2}\left[\cos(m-n)x – \cos(m+n)x\right] $$
$$ \begin{align} \int_{-\pi}^{\pi} \sin mx \cdot \sin nx\, dx &= \frac{1}{2}\int_{-\pi}^{\pi} \cos(m-n)x\, dx – \frac{1}{2}\int_{-\pi}^{\pi} \cos(m+n)x\, dx \\ &= 0 – 0 = 0 \end{align} $$
$m = n$ のときは、
$$ \int_{-\pi}^{\pi} \sin^2 nx\, dx = \int_{-\pi}^{\pi} \frac{1 – \cos 2nx}{2}\, dx = \frac{1}{2}\cdot 2\pi – 0 = \pi $$
直交性のまとめ
以上をまとめると、次のようになります。
$$ \int_{-\pi}^{\pi} \cos mx \cdot \cos nx\, dx = \begin{cases} 0 & (m \neq n) \\ \pi & (m = n \geq 1) \end{cases} $$
$$ \int_{-\pi}^{\pi} \sin mx \cdot \sin nx\, dx = \begin{cases} 0 & (m \neq n) \\ \pi & (m = n \geq 1) \end{cases} $$
$$ \int_{-\pi}^{\pi} \cos mx \cdot \sin nx\, dx = 0 \quad (\text{任意の } m, n) $$
フーリエ係数の導出
それでは、三角関数の直交性を使って、フーリエ係数 $a_n$, $b_n$ を導出しましょう。
$a_0$ の導出
フーリエ級数の定義式の両辺を $[-\pi, \pi]$ で積分します。
$$ \int_{-\pi}^{\pi} f(x)\, dx = \int_{-\pi}^{\pi} \frac{a_0}{2}\, dx + \sum_{n=1}^{\infty}\left(a_n \int_{-\pi}^{\pi} \cos nx\, dx + b_n \int_{-\pi}^{\pi} \sin nx\, dx\right) $$
右辺の $\cos nx$, $\sin nx$ の積分はいずれも $0$($n \geq 1$ のとき、完全な周期分の積分)なので、
$$ \int_{-\pi}^{\pi} f(x)\, dx = \frac{a_0}{2} \cdot 2\pi = a_0 \pi $$
したがって、
$$ a_0 = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\, dx $$
$a_n$($n \geq 1$)の導出
フーリエ級数の定義式の両辺に $\cos mx$($m$ は正の整数)を掛けて $[-\pi, \pi]$ で積分します。
$$ \int_{-\pi}^{\pi} f(x)\cos mx\, dx = \frac{a_0}{2}\int_{-\pi}^{\pi} \cos mx\, dx + \sum_{n=1}^{\infty}\left(a_n \int_{-\pi}^{\pi} \cos nx \cos mx\, dx + b_n \int_{-\pi}^{\pi} \sin nx \cos mx\, dx\right) $$
直交性より、以下が成り立ちます。
- $\int_{-\pi}^{\pi} \cos mx\, dx = 0$($m \geq 1$)
- $\int_{-\pi}^{\pi} \cos nx \cos mx\, dx = 0$($n \neq m$)
- $\int_{-\pi}^{\pi} \cos nx \cos mx\, dx = \pi$($n = m$)
- $\int_{-\pi}^{\pi} \sin nx \cos mx\, dx = 0$(任意の $n$, $m$)
よって、$n = m$ の項だけが生き残り、
$$ \int_{-\pi}^{\pi} f(x)\cos mx\, dx = a_m \cdot \pi $$
$$ a_m = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\cos mx\, dx $$
$b_n$($n \geq 1$)の導出
同様に、両辺に $\sin mx$ を掛けて $[-\pi, \pi]$ で積分します。
$$ \int_{-\pi}^{\pi} f(x)\sin mx\, dx = \frac{a_0}{2}\int_{-\pi}^{\pi} \sin mx\, dx + \sum_{n=1}^{\infty}\left(a_n \int_{-\pi}^{\pi} \cos nx \sin mx\, dx + b_n \int_{-\pi}^{\pi} \sin nx \sin mx\, dx\right) $$
直交性より、$n = m$ の $\sin$ 項だけが残り、
$$ \int_{-\pi}^{\pi} f(x)\sin mx\, dx = b_m \cdot \pi $$
$$ b_m = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\sin mx\, dx $$
以上で、フーリエ係数の公式がすべて導出されました。ポイントは、三角関数の直交性を利用して「特定の $n$ に対応する係数だけを抽出する」という操作です。
具体例:矩形波のフーリエ級数展開
フーリエ級数展開の代表的な例として、矩形波を取り上げます。周期 $2\pi$ の矩形波 $f(x)$ を次のように定義します。
$$ f(x) = \begin{cases} 1 & (0 < x < \pi) \\ -1 & (-\pi < x < 0) \end{cases} $$
この関数は奇関数です。つまり、$f(-x) = -f(x)$ を満たします。
$a_n$ の計算
$f(x)\cos nx$ は奇関数 $\times$ 偶関数 $=$ 奇関数なので、対称区間上の積分は $0$ になります。
$$ a_n = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\cos nx\, dx = 0 \quad (n = 0, 1, 2, \dots) $$
$b_n$ の計算
$f(x)\sin nx$ は奇関数 $\times$ 奇関数 $=$ 偶関数なので、次のように計算できます。
$$ \begin{align} b_n &= \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\sin nx\, dx \\ &= \frac{2}{\pi}\int_{0}^{\pi} f(x)\sin nx\, dx \quad (\because \text{偶関数の対称性}) \\ &= \frac{2}{\pi}\int_{0}^{\pi} 1 \cdot \sin nx\, dx \\ &= \frac{2}{\pi}\left[-\frac{\cos nx}{n}\right]_{0}^{\pi} \\ &= \frac{2}{\pi}\left(-\frac{\cos n\pi}{n} + \frac{1}{n}\right) \\ &= \frac{2}{n\pi}\left(1 – \cos n\pi\right) \end{align} $$
ここで、$\cos n\pi = (-1)^n$ なので、
$$ b_n = \frac{2}{n\pi}\left(1 – (-1)^n\right) $$
$n$ が偶数のとき $(-1)^n = 1$ なので $b_n = 0$、$n$ が奇数のとき $(-1)^n = -1$ なので、
$$ b_n = \frac{2}{n\pi}\cdot 2 = \frac{4}{n\pi} \quad (n = 1, 3, 5, \dots) $$
矩形波のフーリエ級数
以上より、矩形波のフーリエ級数展開は次のようになります。
$$ f(x) = \frac{4}{\pi}\sum_{k=0}^{\infty} \frac{\sin(2k+1)x}{2k+1} = \frac{4}{\pi}\left(\sin x + \frac{\sin 3x}{3} + \frac{\sin 5x}{5} + \frac{\sin 7x}{7} + \cdots\right) $$
奇数次の $\sin$ のみが現れ、高次になるほど振幅が小さくなっていきます。
Python で矩形波のフーリエ級数近似を可視化
フーリエ級数の項数 $N$ を増やしていくと、近似が矩形波にどのように近づくかを Python で確認しましょう。
import numpy as np
import matplotlib.pyplot as plt
# 矩形波の定義
def square_wave(x):
"""周期2πの矩形波"""
# [-π, π] の範囲に正規化
x_mod = np.mod(x + np.pi, 2 * np.pi) - np.pi
y = np.where(x_mod > 0, 1.0, -1.0)
y[np.isclose(x_mod, 0)] = 0 # 不連続点では 0
return y
# フーリエ級数近似(N項まで)
def fourier_square_wave(x, N):
"""矩形波のフーリエ級数近似(奇数次N項まで)"""
result = np.zeros_like(x, dtype=float)
for k in range(N):
n = 2 * k + 1 # 奇数次: 1, 3, 5, ...
result += (4.0 / (n * np.pi)) * np.sin(n * x)
return result
# 可視化
x = np.linspace(-2 * np.pi, 2 * np.pi, 2000)
N_values = [1, 3, 5, 10, 50]
fig, axes = plt.subplots(len(N_values), 1, figsize=(10, 14), sharex=True)
for ax, N in zip(axes, N_values):
y_exact = square_wave(x)
y_approx = fourier_square_wave(x, N)
ax.plot(x, y_exact, 'k--', linewidth=1.0, alpha=0.5, label='Square wave')
ax.plot(x, y_approx, 'b-', linewidth=1.5, label=f'Fourier (N={N})')
ax.set_ylabel('f(x)')
ax.set_ylim(-1.5, 1.5)
ax.legend(loc='upper right')
ax.grid(True, alpha=0.3)
ax.set_title(f'Fourier Series Approximation (N={N} odd terms)')
axes[-1].set_xlabel('x')
plt.tight_layout()
plt.savefig('fourier_square_wave.png', dpi=150, bbox_inches='tight')
plt.show()
上記のコードを実行すると、$N=1$ では単純な $\sin$ 波だったものが、$N=3, 5$ と項数を増やすにつれて矩形波に近づいていく様子が見て取れます。$N=50$ ではかなり矩形波に近い近似が得られますが、不連続点の付近に特徴的なオーバーシュートが残っていることがわかります。
ギブス現象
上の可視化で不連続点付近に見られるオーバーシュート(行き過ぎ)は、ギブス現象(Gibbs phenomenon)と呼ばれます。
フーリエ級数の項数 $N$ をどれだけ増やしても、不連続点の近傍では約 9%(正確には約 8.95%)のオーバーシュートが残ります。つまり、矩形波の振幅が $1$ であるのに対して、不連続点付近のピーク値は約 $1.089$ に達します。
このオーバーシュートの大きさは $N \to \infty$ でも消えず、ピーク位置が不連続点に限りなく近づくだけです。ギブス現象は、フーリエ級数が不連続点で元の関数に一様収束しないことの現れです。
信号処理の分野では、ギブス現象を軽減するために窓関数(ハニング窓、ハミング窓など)やランツォシュのシグマ因子(Lanczos sigma factor)が用いられます。
まとめ
本記事では、フーリエ級数展開について解説しました。
- フーリエ級数展開は、周期関数を $\sin$ と $\cos$ の無限和として表現する手法です
- フーリエ係数は三角関数の直交性を利用して導出されます。直交性により、各周波数成分の振幅を独立に抽出できます
- 矩形波のフーリエ級数展開では、奇数次の $\sin$ のみが現れ、$b_n = \frac{4}{n\pi}$ となります
- 不連続点付近ではギブス現象によるオーバーシュートが生じ、項数を増やしても完全には消えません
次のステップとして、フーリエ係数の具体的な計算方法やフーリエ変換への拡張もぜひ学んでみてください。