前のページから続く
フーリエ級数展開 |
周期 T で繰り返す周期関数 f(x)
のフーリエ級数展開は
f(x)〜a0
+ a1 cos(2px/T)
+ a2 cos(4px/T)
+ a3 cos(6px/T)
+ ...
+ am cos(2pmx/T)
+ ...
+ b1 sin(2px/T)
+ b2 sin(4px/T)
+ b3 sin(6px/T)
+ ...
+ bm sin(2pmx/T)
+ ...
です。
a0 , a1 , a2 , ... をうまく選ぶと、元の波形を再現できるのでは、と思われます。
|
元の波形f(x)が 式で 与えられている時 |
ここに出てくる係数は
a0 = (1/T)
∫0T
f(x) dx
am = (2/T)
∫0T
f(x) cos(2mpx/T)dx
bm = (2/T)
∫0T
f(x) sin(2mpx/T)dx
で求められます。
これは、f(x) |
|
に sin(2mpx/T) |
|
をかけたもの |
こんなの→ |
|
を1周期積分する |
(そのあと2/Tをかける) |
ということです。 |
|
f(x)が式でなく データで 与えられている時 |
f(x)が式でなくd秒間隔のデータで与えられている時は、
f(x)は |
|
こんな感じなので、sin(2mpx/T) をかけた結果も、 |
|
こんな感じにd秒おきの「飛び飛び」になっています。
これじゃ積分できないので、定積分=面積 を思い出し、長方形の積分の和で代用しましょう。
データが d秒間隔なので、長方形の横幅は d,
高さは f(x)sin(2mpx/T) です。
時刻 x は、x=0, x=d, x=2d, x=3d, ... のように増えていきます。
k番目のデータfk の時刻は x = k d になります。
1周期T秒までのデータの個数がN個なら
(データ0番から N-1番まででN個)
T = N d
よって
k番目の長方形の面積は
fk sin(2mp kd / Nd ) d
|
|
これを0番からN-1番まで全部足して(2/T)をかければ
元の式 |
bm = |
(2/T ) |
∫0T |
f(x) |
sin(2mpx / T ) dx が |
|
bm = |
(2/Nd) |
Σk=0N-1 |
fk |
sin(2mp kd / Nd ) d になります。
|
約分して |
|
bm = |
(2/N ) |
Σk=0N-1 |
fk |
sin(2mp k / N ) |
|
am = |
(2/N ) |
Σk=0N-1 |
fk |
cos(2mp k / N ) |
|
a0 = |
(1/N ) |
Σk=0N-1 |
fk |
結局、
a0 を求めるには fk (kは0, 1, 2, ...) の値をk=0 から k=N-1まで全部足して(1/N) をかければよく、
am を求めるには fk の値にcos(2mpk/N) をかけたものを全部足して(2/N) をかければよく、
bm を求めるには fk の値にsin(2mpk/N) をかけたものを全部足して(2/N) をかければよい、
ということになります。これならプログラムできそう。
|
|
Σがピンとこない
手動でやってみる(4個)
手動でやってみる(8個)
プログラムへ
|
|