第1章
フーリエ級数
この章のねらい
- 信号を正弦波の和に分解するという発想を持つ
- フーリエ級数の式の各部品(直流成分・基本波・高調波)を読めるようになる
- 三角関数の直交性を使ってフーリエ係数を導出できるようになる
1.1 信号の分解
そもそもの話なんだお。「信号」って何のことだお? やる夫の頭の中では、信号といえば交差点で光ってるアレだお。
ここで言う信号は、時間とともに変化する量のことだ。マイクで拾った音声の電圧、毎日の気温、株価、加速度センサの出力。横軸が時間 t、縦軸が値 f(t) のグラフに描けるものは全部信号だと思っていい。
ふーん。で、その信号を「処理」するから信号処理かお。そのまんまだお。
そのまんまだ。でだ、信号処理の出発点になる考え方を最初に言ってしまう。
どんなに複雑な波形も、単純なサイン波をたくさん足し合わせれば作れる。逆に言えば、複雑な波形を「どのサイン波がどれだけ入っているか」に分解できる。この分解がフーリエ級数であり、この教材の最初のテーマだ。
うーん、にわかには信じがたいお。サイン波ってあのぐにゃぐにゃした優等生みたいな波だお? あれを何個足しても、カクカクした波形にはならない気がするお。
いい疑いだ。なら目で確かめよう。下のデモは、サイン波を5本まで重ねられる装置だ。まず k=1 だけの状態を見ろ。ただのサイン波だな。そこに k=3、k=5 と追加していってみろ。
HARMONICS — STACK & SUM INTERACTIVE
k=3, 5, 7 のチェックを順にONにする(操作)→ なめらかな下段の合計波形がだんだん角ばってくる(観察)→ サイン波という滑らかな部品の足し算だけで、矩形波の鋭い形が組み上がる(意味)。
やる夫
な、なんか四角くなってきたお!? ぐにゃぐにゃを足したのに角が生えてきたお!
そういうことだ。足すサイン波の「周波数」と「振幅」をうまく選べば、好きな波形に好きなだけ近づけられる。あとはこの「うまく選ぶ」を数学にすればいい。
1.2 フーリエ級数
数学にするにあたって、まずは扱う信号を周期的な関数 f(t) に限定する。周期を T0 とする。つまり f(t+T0)=f(t) がすべての t で成り立つ。周期的でない信号への拡張は第3章でやる。
段階を踏んだほうが結局速いんだ、常識的に考えて。で、この f(t) がサイン波の足し合わせでできているとしよう。こう書ける。
f(t)=a0+k=1∑∞(akcoskω0t+bksinkω0t)(1.1) ここで ω0=2π/T0 だ。これがフーリエ級数だ。
部品ごとに見れば怖くない。順番に行くぞ。
まず先頭の a0。これはただの定数だ。「サイン波の足し合わせ」のはずなのに定数が混ざっているのは変だと思うかもしれないが、周波数 0 のサイン波だと思えばいい。信号の中の振動しない成分、つまり平均値のオフセットで、直流成分と呼ぶ。
信号処理は電気工学育ちだからな。次に総和の中身だ。k=1 の項は a1cosω0t+b1sinω0t。角周波数 ω0 は、時間が T0 進むと位相がちょうど 2π、つまり1周する速さだ。元の信号の1周期の間にちょうど1回振動するサイン波ということだな。これを基本波、ω0 を基本角周波数と呼ぶ。
じゃあ k=2 は1周期の間に2回振動するやつかお。
そうだ。k 倍の周波数の成分を第 k 高調波と呼ぶ。ここで大事な注意がひとつ。式 (1.1) で足しているのは k が自然数のものだけだ。つまり 1.5倍とか 2.7倍とか、半端な周波数のサイン波は入っていない。
それでいいのかお? 半端なやつも入れたほうが表現力が上がる気がするお。
逆だ。元の信号は周期 T0 で繰り返すんだぞ。それを組み立てる部品が、T0 の区間にすっぽり整数回収まらないサイン波だったらどうなる? 足し合わせた結果が T0 で繰り返さなくなるだろ。周期 T0 の信号を作る部品は、周期 T0 で「辻褄が合う」ものに限られる。それが整数倍の周波数ってことだ。
あー、なるほどだお。1周期の終わりと次の1周期の始まりで波がつながってないといけないってことかお。
そういう理解でいい。具体例で言うと、基本周期が 0.01 秒なら基本周波数は 100 Hz。信号は直流成分と、100 Hz、200 Hz、300 Hz、… の成分に分解される。102 Hz や 250 Hz の成分は出てこない。
で、どんな周期信号でも式 (1.1) の形に分解できるのかお? この流れだと当然できるんだお?
落ち着け。「数学的に意地悪な関数では破綻する場合がある」というだけで、実験データとか音声とか、信号処理の対象にしたくなる現実の信号ではまず問題にならない。厳密な収束条件が気になるなら、それは数学の教科書(フーリエ解析)の守備範囲だ。この教材では「実用上は分解できる」で先に進む。
1.3 フーリエ係数
ところで肝心なことを聞いてないお。係数の ak とか bk とかは、どうやって決めるんだお? さっきのデモだと誰かが「うまく」選んでくれてたお。
それがこの節の本題、フーリエ係数の求め方だ。作戦はこうだ。式 (1.1) の両辺に細工をして、欲しい係数以外が全部消えるようにする。残った方程式を解けば係数が手に入る。
ある。いちばん簡単な a0 からやろう。両辺を1周期分、−T0/2 から T0/2 まで積分する。
∫−T0/2T0/2f(t)dt=∫−T0/2T0/2a0dt+k=1∑∞∫−T0/2T0/2(akcoskω0t+bksinkω0t)dt(1.2)積分と総和の順序は入れ替えていいことにした(これについては 1.4 節で触れる)。さて、右辺の総和の中の積分、これが全部 0 になるんだが、わかるか?
えーと…。あ、さっきの「すっぽり整数回収まる」かお! coskω0t も sinkω0t も、積分区間 T0 の中にちょうど k 周期入ってるから、プラスの山とマイナスの谷が同じだけあって、積分したら相殺するお!
正解だ。やればできるじゃないか。式で書くと、任意の自然数 k について
∫−T0/2T0/2coskω0tdt=0,∫−T0/2T0/2sinkω0tdt=0(1.3)なので式 (1.2) の右辺は a0 の項だけが生き残る。
∫−T0/2T0/2f(t)dt=a0T0⟹a0=T01∫−T0/2T0/2f(t)dt(1.4)
おー、a0 が求まったお。これって要するに…信号を1周期分積分して周期で割る…つまり平均値かお。
そのとおり。サイン波の足し合わせ部分はどう頑張っても平均 0 だから、信号の平均値はまるごと a0 が背負うしかない。「直流成分=平均値」だ。
他の ak や bk も同じノリで行けるのかお? 今のは「単純に積分」っていう細工だったけど、それだと毎回 a0 しか出てこないお。
だから細工を一段階強くする。欲しい成分と同じサイン波を掛けてから積分するんだ。鍵になるのは次の3つの式だ。任意の自然数 k, l について
∫−T0/2T0/2coskω0tcoslω0tdt={T0/20(k=l)(k=l)(1.5)∫−T0/2T0/2sinkω0tsinlω0tdt={T0/20(k=l)(k=l)(1.6)∫−T0/2T0/2sinkω0tcoslω0tdt=0(常に)(1.7)
言ってることは単純だ。違う種類・違う周波数のサイン波同士を掛けて1周期積分すると必ず 0 になる。生き残るのは、全く同じもの同士を掛けたときだけ。この性質を三角関数の直交性と呼ぶ。
直観的にはどう思えばいいんだお。同じもの同士なら cos2 とかになって常にプラスだから、積分しても消えないのはわかるお。違うもの同士だと…
違うもの同士の積は、プラスになる区間とマイナスになる区間がちょうど同じ面積だけ現れて、1周期で帳尻が合って 0 になる。疑うなら cosω0t×cos2ω0t あたりを手でグラフに描いてみるといい。
で、この直交性を使う。例えば a2 が欲しければ、式 (1.1) の両辺に cos2ω0t を掛けて1周期積分する。右辺では「cos2ω0t と同じもの同士」の項、つまり a2 の項だけが T0/2 を伴って生き残り、他は直交性で全滅する。
∫−T0/2T0/2f(t)cos2ω0tdt=a2⋅2T0一般化すると、フーリエ係数は次で求められる。
ak=T02∫−T0/2T0/2f(t)coskω0tdt,bk=T02∫−T0/2T0/2f(t)sinkω0tdt(1.8)
ほー…。つまりフーリエ係数を求めるってのは、「信号に、調べたい周波数のサイン波を掛けて積分する」って操作なのかお。
それだ。その感覚は今後ずっと使うから覚えておけ。「f(t) の中に coskω0t がどれだけ含まれているかを、coskω0t を掛けて積分することで取り出す」。フーリエ変換も離散フーリエ変換も、結局ぜんぶこの形をしている。
仕上げに、その矩形波で「部分和」を見よう。無限級数を k=N で打ち切ったものを部分和という。N を増やしていったときの様子がこれだ。
FOURIER SERIES — PARTIAL SUM INTERACTIVE
項数 N を上げる(操作)→ 不連続点のそばのツノは細くはなるが高さは残る(観察)→ これがギブス現象で、ジャンプ(不連続)は有限本の正弦波和では消しきれない(意味)。波形を三角波に切り替えると、滑らかなぶん小さい N でぴたりと重なるのも見比べてほしい。
やる夫
おお、N を上げるとどんどん四角くなるお! …でも、角のところにピョコッとしたツノが残ってるお。N=99 にしても消えないお。
よく気づいた。それはギブス現象という有名な現象だ。不連続点(値がジャンプする点)のそばでは、項数をいくら増やしても約 9% のオーバーシュートが残り続ける。ツノは細くはなるが、低くはならない。
サイン波は連続だから、不連続なジャンプを完璧に再現するのはさすがに苦しいってことかお。
そういう感覚でいい。一方、三角波に切り替えてみろ。あっちは不連続点がない(折れ点だけ)ので、小さい N でもほぼ重なる。滑らかな信号ほど高調波の係数が速く減衰する、これも大事な感覚だ。
1.4 積分と総和の交換
そういえばさっき、「積分と総和の順序は入れ替えていいことにした」ってしれっと言ってたお。あれはいいのかお?
鋭いな。無限級数の総和と積分の交換は、数学的には常に許されるわけじゃない。交換できるための条件(一様収束など)がちゃんとあって、それを確かめるのが本来の作法だ。
確かめない。実用上扱う信号ではまず問題にならないし、ここで数学に深入りすると本題に一生たどり着かないからだ。ただし「本当は確認が要る操作を、断りを入れて省略している」という自覚だけは持っておけ。今後も同じ省略を何度かやる。
この章のまとめ
- 周期 T0 の信号は、直流成分と「基本周波数の整数倍」のサイン波の和(フーリエ級数)で表せる
- 直流成分 a0 は信号の平均値
- フーリエ係数は「調べたい周波数のサイン波を掛けて1周期積分」で取り出せる。これが効くのは三角関数の直交性のおかげ
- 部分和は項数を増やすほど元の波形に近づくが、不連続点のそばにはギブス現象のオーバーシュートが残る
- 滑らかな信号ほど高調波成分は速く減衰する