2 原理

2.1 フーリエ級数(実数)

「電気回路」の授業で学んだように,正弦波以外の波形の交流を「ひずみ波交流」と言う.波形のひずみ(正弦波からのひずみ)が少ないときには,これと等価な正弦波として取り扱うことができるが,ひずみ波の度合いが大きいとそのような取り扱いはできない.

1に示すように,ひずみ波は周波数の異なった複数の正弦波が重なったものと考え られる.

図: ひずみ波交流の例(左: $ f(x)=\sin x+\frac{1}{3}\sin 3x$右: $ f(x)=\sin x-\frac{1}{3}\sin 2x$)
\includegraphics[keepaspectratio,scale=1.0]{figure/FFT/hizumiha.eps}

一般に,変数$ x$の関数$ f(x)$$ 2\pi$の周期をもつ周期関数であるとき,すなわち $ f(x)=f(x+2\pi)$であるときは,$ f(x)$

$\displaystyle f(x)$ $\displaystyle =\frac{a_0}{2}+a_1\cos x+a_2\cos 2x+a_3\cos 3x+\cdots+b_1\sin x+b_2\sin 2x+b_3\sin 3x+\cdots$    
  $\displaystyle =\frac{a_0}{2}+\sum_{n=1}^{\infty}\left[a_n\cos nx+b_n\sin nx\right]$ (1)

とフーリエ級数に展開することができる.ここでは,関数や変数,あるいは係数の全ては,実数である.

ここで,時間$ t$の関数の場合を考える.独立変数が$ t$になり,関数$ f(t)$は周期$ T$の周期関数とする.関数が$ 2\pi$の周期を持つためには,

$\displaystyle f(t)=g\left(\frac{2\pi}{T}t\right)$ (2)

という形になる.独立変数は,$ 2\pi t/T$というふうになるということである.ここで,$ 2\pi/T$は角振動数$ \omega$に等しいので,周期$ T$で繰り返される関数は,

$\displaystyle f(t) =\frac{a_0}{2}+\sum_{n=1}^{\infty}\left[a_n\cos(n\omega t)+b_n\sin(n\omega t)\right]$    

と書き表すことができる.もう少し変形すると,

$\displaystyle f(t)=\frac{a_0}{2}+\sum_{n=1}^{\infty}A_n\cos(n\omega t+\phi_n)$ (3)

と記述しても,同じである.ただし,

  $\displaystyle A_n=\sqrt{a_n^2+b_n^2}$   $\displaystyle \phi_n=-\arctan\frac{a_n}{b_n}$   (4)

である.ここで,$ a_0/2$は直流成分を表す.今までの話から,$ a_0$$ n=0$すなわち$ n\omega=0$を表していることから理解できるであろう.$ A_n$$ \phi_n$は交流成分の振幅と位相を表す.$ n=1$は基本波を表し,$ \omega$は基本波の角振動数である.$ n$が2以上の場合,それは$ n$次高調波を表し,その角振動数は$ n\omega$となる.

ここで,$ A_n$$ \phi_n$を求めることにが残された問題である.通常,それらを直接求めるのではなく,フーリエ係数$ a_n$$ b_n$を求めることになる.そのためには,三角関数が直交関数であること

$\displaystyle \int_{-T/2}^{\pi}\cos(m\omega t)\cos(n\omega t) =\begin{cases}0 & m \neq n\ \frac{T}{2} & m=n\ \end{cases}$ (5)
$\displaystyle \int_{-T/2}^{T/2}\sin(m\omega t)\sin(n\omega t)=\begin{cases}0 & m \neq n\ \frac{T}{2} & m=n\ \end{cases}$ (6)
$\displaystyle \int_{-T/2}^{T/2}\cos(m\omega t)\sin(n\omega t)=0$   (7)

や,その他の性質

  $\displaystyle \int_{-T/2}^{T/2}\cos(n\omega t)=0$   $\displaystyle \int_{-T/2}^{T/2}\sin(n\omega t)=0$   (8)

を使うことになる.ただし,$ m$$ n$は整数である.これらの性質を上手に使い,フーリエ係数$ a_n$を求めるのである.実際には,式(3)の両辺に $ \cos(m\omega t)$ $ \sin(m\omega t)$を乗じて,一周期にわたって積分をすると

  $\displaystyle a_n=\frac{2}{T}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(x)\cos(n\omega t)dt$   $\displaystyle (n=0,1,2,3,\cdots)$   (9)
  $\displaystyle b_n=\frac{2}{T}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(x)\sin(n\omega t)dt$   $\displaystyle (n=1,2,3,\cdots)$   (10)

が得られる.これで,任意の周期関数を三角関数で展開するとき,必要な情報の全てが得られたことになる.

2.2 複素フーリエ級数

これまでは,実数で考えていたが,複素数で考える方が簡単な場合が多い.特に理論的な計算をする場合は,複素数にして取り扱う方が手間が少なくて済む.三角関数を複素数は,オイラーの公式1

$\displaystyle e^{i\theta}=\cos\theta+i\sin\theta$ (11)

で結ばれる.したがって,

  $\displaystyle \cos\theta=\frac{e^{i\theta}+e^{-i\theta}}{2}$   $\displaystyle \sin\theta=\frac{e^{i\theta}-e^{-i\theta}}{2i}$   (12)

となる.これを使うと,式(3)は

$\displaystyle f(x)=\frac{a_0}{2}+\sum_{n=1}^{\infty}\left[\frac{a_n-ib_n}{2}e^{in\omega t}+\frac{a_n+ib_n}{2}e^{-in\omega t}\right]$ (13)

となる.ここで,$ e^{inx}$$ e^{-inx}$の係数を考える.式 (10)と(11)から,

\begin{equation*}\begin{aligned}\frac{a_n-ib_n}{2} &= \frac{1}{2\pi}\int_{-\pi}^...
...x\ &=\frac{1}{2\pi}\int_{-\pi}^{\pi}f(x)e^{-inx}dx \end{aligned}\end{equation*}

となる.もう一方も,

\begin{equation*}\begin{aligned}\frac{a_n+ib_n}{2} &= \frac{1}{2\pi}\int_{-\pi}^...
...dx\ &=\frac{1}{2\pi}\int_{-\pi}^{\pi}f(x)e^{inx}dx \end{aligned}\end{equation*}

と似たような式になる.というか,複素共役の関係である.ここで,

$\displaystyle c_n=\frac{a_n-ib_n}{2}$ (16)

とおく.すると,(10)と(11)から,

\begin{equation*}\begin{aligned}c_{-n}&=\frac{a_{-n}-ib_{-n}}{2}\ &=\frac{a_{n}+ib_{-n}}{2} \end{aligned}\end{equation*}

となり,式(15)と(16)とも矛盾しない.同様 に,

\begin{equation*}\begin{aligned}c_{0}&=\frac{a_{0}-ib_{0}}{2}\ &=\frac{a_n}{2} \end{aligned}\end{equation*}

となる.これらから,式(14)は,

\begin{equation*}\begin{aligned}f(x)&=\sum_{n=-\infty}^{\infty}c_ne^{inx} \end{aligned}\end{equation*}

となる.その係数$ c_n$は,

\begin{equation*}\begin{aligned}c_n=\frac{1}{2\pi}\int_{-\pi}^{\pi}f(x)e^{-inx}dx \end{aligned}\end{equation*}

と計算できる.これが複素フーリエ級数である.

式(20)は式(3)と同等 であり,式(21)はまた式(10)や式(11)と同等となっている.同等な式であるが,複素数で表し た方が簡素に記述できている.これだけでも複素数を使う価値はある.

2.3 離散フーリエ変換と高速フーリエ変換

実際にデータを測定する場合,それは必ず離散量である.1秒間間に100万回測定しても, それは離散化された量である.この離散化された量のフーリエ係数を求めることが,離散 フーリエ変換や高速フーリエ変換である.ここでは詳しく述べないが,いわゆるフーリエ 変換(フーリエ積分)とは,少しばかり異なる.

ここで,データを取得した間隔を$ T$とする.その,期間の中で$ N$個 の等間隔でデータがえられたとする.そして,$ j$番目のデータは,

$\displaystyle t_j$ $\displaystyle =\frac{T}{N}j\qquad(j=0,1,2,\cdots,N-1)$ (21)

の時刻にデータが得られたものとする.ここで得られデータを

$\displaystyle f_j=f(t_j)$ (22)

とする.

実際のフーリエ級数の式(20) を評価したい.測定量である$ f_j$$ x_j$はそれぞれ$ N$個なので,フーリエ係数の$ c_n$も 独立に$ N$個決めることができる.そうすると展開の基底関数もN個となる.したがってフー リエ級数の展開式は,

$\displaystyle f_j=\sum_{n=0}^{N-1}c_n e^{in\omega t_j}$ (23)

と書くことができる.ここで残された問題は,測定量の$ t_j$$ f_j$から$ c_n$を決め ることである.この辺の計算は大変なので,結論のみ載せる2$ c_n$を求める式は,

$\displaystyle c_n=\frac{1}{N}\sum_{j=0}^{N-1}f_je^{-in\omega t_j}$ (24)

とすることができる.この式が離散フーリエ変換,Discreate Fourier Transform(DFT)と 呼ばれる式である.

式(25)は離散フーリエ変換,式(24)逆変換と呼ば れ,相関関数や周波数スペクトラムなどの時間および周波数領域でのデジタル信号処理の 基礎となるものである.

FFTはDFTの計算で同じ乗算を何回も繰り返すことがないよう,演算手順を合理化したもの である3.それはデータのサンプル 数$ N$が2つ以上の整数 $ n_1,n_2,n_3,\cdots$の積になっているときに可能であり,このと き通常必要な$ N^2$の乗算が $ (n_1+n_2+n_3+\cdots)N$回に短縮される.

1965年に米国のCooleyとTukeyによって開発されたFFTのアルゴリズムは,$ N=2^n$として2 進のデジタル計算に適するようにしたもので,このとき乗算回数は$ N^2$回から $ 2N\log_2N$回に短縮された.例えば,$ N=1024$の場合に乗算回数が50分の1に短縮され, $ N$が大きいほど短縮の割合が大きくなることが分かっている.

デジタル信号処理において,かなりの計算時間を要する乗算の回数が大幅に減少するFFT のアルゴリズムの利用によって,周波数スペクトラム分析がデジタル計算機を用いて短時 間で行えるようになった.また,LSI技術の発展に伴って,小型で低価格の専用のFFT周波 数分析装置が開発され,広く利用されている.


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成17年10月21日


no counter