第1章

フーリエ級数

この章のねらい

  • 信号を正弦波の和に分解するという発想を持つ
  • フーリエ級数の式の各部品(直流成分・基本波・高調波)を読めるようになる
  • 三角関数の直交性を使ってフーリエ係数を導出できるようになる

1.1 信号の分解

やる夫

そもそもの話なんだお。「信号」って何のことだお? やる夫の頭の中では、信号といえば交差点で光ってるアレだお。

やらない夫

ここで言う信号は、時間とともに変化する量のことだ。マイクで拾った音声の電圧、毎日の気温、株価、加速度センサの出力。横軸が時間 tt、縦軸が値 f(t)f(t) のグラフに描けるものは全部信号だと思っていい。

やる夫

ふーん。で、その信号を「処理」するから信号処理かお。そのまんまだお。

やらない夫

そのまんまだ。でだ、信号処理の出発点になる考え方を最初に言ってしまう。

どんなに複雑な波形も、単純なサイン波をたくさん足し合わせれば作れる。

逆に言えば、複雑な波形を「どのサイン波がどれだけ入っているか」に分解できる。この分解がフーリエ級数であり、この教材の最初のテーマだ。

やる夫

うーん、にわかには信じがたいお。サイン波ってあのぐにゃぐにゃした優等生みたいな波だお? あれを何個足しても、カクカクした波形にはならない気がするお。

やらない夫

いい疑いだ。なら目で確かめよう。下のデモは、サイン波を5本まで重ねられる装置だ。まず k=1 だけの状態を見ろ。ただのサイン波だな。そこに k=3、k=5 と追加していってみろ。

HARMONICS — STACK & SUM INTERACTIVE
k=3, 5, 7 のチェックを順にONにする(操作)→ なめらかな下段の合計波形がだんだん角ばってくる(観察)→ サイン波という滑らかな部品の足し算だけで、矩形波の鋭い形が組み上がる(意味)。
やる夫

な、なんか四角くなってきたお!? ぐにゃぐにゃを足したのに角が生えてきたお!

やらない夫

そういうことだ。足すサイン波の「周波数」と「振幅」をうまく選べば、好きな波形に好きなだけ近づけられる。あとはこの「うまく選ぶ」を数学にすればいい。

1.2 フーリエ級数

やらない夫

数学にするにあたって、まずは扱う信号を周期的な関数 f(t)f(t) に限定する。周期を T0T_0 とする。つまり f(t+T0)=f(t)f(t + T_0) = f(t) がすべての tt で成り立つ。周期的でない信号への拡張は第3章でやる。

やる夫

最初から全部やればいいのに、もったいぶるお。

やらない夫

段階を踏んだほうが結局速いんだ、常識的に考えて。で、この f(t)f(t) がサイン波の足し合わせでできているとしよう。こう書ける。

f(t)=a0+k=1(akcoskω0t+bksinkω0t)(1.1)f(t) = a_0 + \sum_{k=1}^{\infty} \left( a_k \cos k\omega_0 t + b_k \sin k\omega_0 t \right) \tag{1.1}

ここで ω0=2π/T0\omega_0 = 2\pi / T_0 だ。これがフーリエ級数だ。

やる夫

前置きで見たやつだお…。本当に出てきたお…。

やらない夫

部品ごとに見れば怖くない。順番に行くぞ。

まず先頭の a0a_0。これはただの定数だ。「サイン波の足し合わせ」のはずなのに定数が混ざっているのは変だと思うかもしれないが、周波数 0 のサイン波だと思えばいい。信号の中の振動しない成分、つまり平均値のオフセットで、直流成分と呼ぶ。

やる夫

直流ってのは電気っぽい言い方だお。

やらない夫

信号処理は電気工学育ちだからな。次に総和の中身だ。k=1k=1 の項は a1cosω0t+b1sinω0ta_1 \cos \omega_0 t + b_1 \sin \omega_0 t。角周波数 ω0\omega_0 は、時間が T0T_0 進むと位相がちょうど 2π2\pi、つまり1周する速さだ。元の信号の1周期の間にちょうど1回振動するサイン波ということだな。これを基本波ω0\omega_0基本角周波数と呼ぶ。

やる夫

じゃあ k=2k=2 は1周期の間に2回振動するやつかお。

やらない夫

そうだ。kk 倍の周波数の成分をkk 高調波と呼ぶ。ここで大事な注意がひとつ。式 (1.1) で足しているのは kk自然数のものだけだ。つまり 1.5倍とか 2.7倍とか、半端な周波数のサイン波は入っていない。

やる夫

それでいいのかお? 半端なやつも入れたほうが表現力が上がる気がするお。

やらない夫

逆だ。元の信号は周期 T0T_0 で繰り返すんだぞ。それを組み立てる部品が、T0T_0 の区間にすっぽり整数回収まらないサイン波だったらどうなる? 足し合わせた結果が T0T_0 で繰り返さなくなるだろ。周期 T0T_0 の信号を作る部品は、周期 T0T_0 で「辻褄が合う」ものに限られる。それが整数倍の周波数ってことだ。

やる夫

あー、なるほどだお。1周期の終わりと次の1周期の始まりで波がつながってないといけないってことかお。

やらない夫

そういう理解でいい。具体例で言うと、基本周期が 0.01 秒なら基本周波数は 100 Hz。信号は直流成分と、100 Hz、200 Hz、300 Hz、… の成分に分解される。102 Hz や 250 Hz の成分は出てこない。

やる夫

で、どんな周期信号でも式 (1.1) の形に分解できるのかお? この流れだと当然できるんだお?

やらない夫

残念、できないものもある

やる夫

ここまで聞かせておいてそれかお!!

やらない夫

落ち着け。「数学的に意地悪な関数では破綻する場合がある」というだけで、実験データとか音声とか、信号処理の対象にしたくなる現実の信号ではまず問題にならない。厳密な収束条件が気になるなら、それは数学の教科書(フーリエ解析)の守備範囲だ。この教材では「実用上は分解できる」で先に進む。

やる夫

実用上いいなら、いいお。

1.3 フーリエ係数

やる夫

ところで肝心なことを聞いてないお。係数の aka_k とか bkb_k とかは、どうやって決めるんだお? さっきのデモだと誰かが「うまく」選んでくれてたお。

やらない夫

それがこの節の本題、フーリエ係数の求め方だ。作戦はこうだ。式 (1.1) の両辺に細工をして、欲しい係数以外が全部消えるようにする。残った方程式を解けば係数が手に入る。

やる夫

そんな虫のいい細工があるのかお。

やらない夫

ある。いちばん簡単な a0a_0 からやろう。両辺を1周期分、T0/2-T_0/2 から T0/2T_0/2 まで積分する。

T0/2T0/2f(t)dt=T0/2T0/2a0dt+k=1T0/2T0/2(akcoskω0t+bksinkω0t)dt(1.2)\int_{-T_0/2}^{T_0/2} f(t)\, dt = \int_{-T_0/2}^{T_0/2} a_0\, dt + \sum_{k=1}^{\infty} \int_{-T_0/2}^{T_0/2} \left( a_k \cos k\omega_0 t + b_k \sin k\omega_0 t \right) dt \tag{1.2}

積分と総和の順序は入れ替えていいことにした(これについては 1.4 節で触れる)。さて、右辺の総和の中の積分、これが全部 0 になるんだが、わかるか?

やる夫

えーと…。あ、さっきの「すっぽり整数回収まる」かお! coskω0t\cos k\omega_0 tsinkω0t\sin k\omega_0 t も、積分区間 T0T_0 の中にちょうど kk 周期入ってるから、プラスの山とマイナスの谷が同じだけあって、積分したら相殺するお!

やらない夫

正解だ。やればできるじゃないか。式で書くと、任意の自然数 kk について

T0/2T0/2coskω0tdt=0,T0/2T0/2sinkω0tdt=0(1.3)\int_{-T_0/2}^{T_0/2} \cos k\omega_0 t \, dt = 0, \qquad \int_{-T_0/2}^{T_0/2} \sin k\omega_0 t \, dt = 0 \tag{1.3}

なので式 (1.2) の右辺は a0a_0 の項だけが生き残る。

T0/2T0/2f(t)dt=a0T0a0=1T0T0/2T0/2f(t)dt(1.4)\int_{-T_0/2}^{T_0/2} f(t)\, dt = a_0 T_0 \quad\Longrightarrow\quad a_0 = \frac{1}{T_0} \int_{-T_0/2}^{T_0/2} f(t)\, dt \tag{1.4}
やる夫

おー、a0a_0 が求まったお。これって要するに…信号を1周期分積分して周期で割る…つまり平均値かお。

やらない夫

そのとおり。サイン波の足し合わせ部分はどう頑張っても平均 0 だから、信号の平均値はまるごと a0a_0 が背負うしかない。「直流成分=平均値」だ。

やる夫

他の aka_kbkb_k も同じノリで行けるのかお? 今のは「単純に積分」っていう細工だったけど、それだと毎回 a0a_0 しか出てこないお。

やらない夫

だから細工を一段階強くする。欲しい成分と同じサイン波を掛けてから積分するんだ。鍵になるのは次の3つの式だ。任意の自然数 kk, ll について

T0/2T0/2coskω0tcoslω0tdt={T0/2(k=l)0(kl)(1.5)\int_{-T_0/2}^{T_0/2} \cos k\omega_0 t \cos l\omega_0 t \, dt = \begin{cases} T_0/2 & (k = l) \\ 0 & (k \neq l) \end{cases} \tag{1.5}T0/2T0/2sinkω0tsinlω0tdt={T0/2(k=l)0(kl)(1.6)\int_{-T_0/2}^{T_0/2} \sin k\omega_0 t \sin l\omega_0 t \, dt = \begin{cases} T_0/2 & (k = l) \\ 0 & (k \neq l) \end{cases} \tag{1.6}T0/2T0/2sinkω0tcoslω0tdt=0(常に)(1.7)\int_{-T_0/2}^{T_0/2} \sin k\omega_0 t \cos l\omega_0 t \, dt = 0 \quad (\text{常に}) \tag{1.7}
やる夫

うっ、大軍が押し寄せてきたお。

やらない夫

言ってることは単純だ。違う種類・違う周波数のサイン波同士を掛けて1周期積分すると必ず 0 になる。生き残るのは、全く同じもの同士を掛けたときだけ。この性質を三角関数の直交性と呼ぶ。

やる夫

直観的にはどう思えばいいんだお。同じもの同士なら cos2\cos^2 とかになって常にプラスだから、積分しても消えないのはわかるお。違うもの同士だと…

やらない夫

違うもの同士の積は、プラスになる区間とマイナスになる区間がちょうど同じ面積だけ現れて、1周期で帳尻が合って 0 になる。疑うなら cosω0t×cos2ω0t\cos \omega_0 t \times \cos 2\omega_0 t あたりを手でグラフに描いてみるといい。

で、この直交性を使う。例えば a2a_2 が欲しければ、式 (1.1) の両辺に cos2ω0t\cos 2\omega_0 t を掛けて1周期積分する。右辺では「cos2ω0t\cos 2\omega_0 t と同じもの同士」の項、つまり a2a_2 の項だけが T0/2T_0/2 を伴って生き残り、他は直交性で全滅する。

T0/2T0/2f(t)cos2ω0tdt=a2T02\int_{-T_0/2}^{T_0/2} f(t) \cos 2\omega_0 t \, dt = a_2 \cdot \frac{T_0}{2}

一般化すると、フーリエ係数は次で求められる。

ak=2T0T0/2T0/2f(t)coskω0tdt,bk=2T0T0/2T0/2f(t)sinkω0tdt(1.8)a_k = \frac{2}{T_0} \int_{-T_0/2}^{T_0/2} f(t) \cos k\omega_0 t \, dt, \qquad b_k = \frac{2}{T_0} \int_{-T_0/2}^{T_0/2} f(t) \sin k\omega_0 t \, dt \tag{1.8}
やる夫

ほー…。つまりフーリエ係数を求めるってのは、「信号に、調べたい周波数のサイン波を掛けて積分する」って操作なのかお。

やらない夫

それだ。その感覚は今後ずっと使うから覚えておけ。「f(t)f(t) の中に coskω0t\cos k\omega_0 t がどれだけ含まれているかを、coskω0t\cos k\omega_0 t を掛けて積分することで取り出す」。フーリエ変換も離散フーリエ変換も、結局ぜんぶこの形をしている。

やらない夫

仕上げに、その矩形波で「部分和」を見よう。無限級数を k=Nk = N で打ち切ったものを部分和という。NN を増やしていったときの様子がこれだ。

FOURIER SERIES — PARTIAL SUM INTERACTIVE
項数 N を上げる(操作)→ 不連続点のそばのツノは細くはなるが高さは残る(観察)→ これがギブス現象で、ジャンプ(不連続)は有限本の正弦波和では消しきれない(意味)。波形を三角波に切り替えると、滑らかなぶん小さい N でぴたりと重なるのも見比べてほしい。
やる夫

おお、N を上げるとどんどん四角くなるお! …でも、角のところにピョコッとしたツノが残ってるお。N=99 にしても消えないお。

やらない夫

よく気づいた。それはギブス現象という有名な現象だ。不連続点(値がジャンプする点)のそばでは、項数をいくら増やしても約 9% のオーバーシュートが残り続ける。ツノは細くはなるが、低くはならない。

やる夫

サイン波は連続だから、不連続なジャンプを完璧に再現するのはさすがに苦しいってことかお。

やらない夫

そういう感覚でいい。一方、三角波に切り替えてみろ。あっちは不連続点がない(折れ点だけ)ので、小さい N でもほぼ重なる。滑らかな信号ほど高調波の係数が速く減衰する、これも大事な感覚だ。

1.4 積分と総和の交換

やる夫

そういえばさっき、「積分と総和の順序は入れ替えていいことにした」ってしれっと言ってたお。あれはいいのかお?

やらない夫

鋭いな。無限級数の総和と積分の交換は、数学的には常に許されるわけじゃない。交換できるための条件(一様収束など)がちゃんとあって、それを確かめるのが本来の作法だ。

やる夫

で、この教材では?

やらない夫

確かめない。実用上扱う信号ではまず問題にならないし、ここで数学に深入りすると本題に一生たどり着かないからだ。ただし「本当は確認が要る操作を、断りを入れて省略している」という自覚だけは持っておけ。今後も同じ省略を何度かやる。

やる夫

正直な省略だお。それなら付き合うお。

この章のまとめ
  • 周期 T0T_0 の信号は、直流成分と「基本周波数の整数倍」のサイン波の和(フーリエ級数)で表せる
  • 直流成分 a0a_0 は信号の平均値
  • フーリエ係数は「調べたい周波数のサイン波を掛けて1周期積分」で取り出せる。これが効くのは三角関数の直交性のおかげ
  • 部分和は項数を増やすほど元の波形に近づくが、不連続点のそばにはギブス現象のオーバーシュートが残る
  • 滑らかな信号ほど高調波成分は速く減衰する