Fourier変換
例1
sin 3x sin 5x sin 7x sin 9x
f (x) sin x
L
3
5
7
9
Plot[{Sin[x],Sin[3x]/3},{x,-Pi,Pi}]
f[x_] := Sin[x] + Sin[3x]/3
Plot[f[x],{x,-Pi,Pi}]
f[x_] := Sin[x]+Sin[3x]/3+Sin[5x]/5+Sin[7x]/7
Plot[f[x],{x,-Pi,Pi}]
例1(続き)
sin(2k - 1)x
f (x)
2k - 1
k 1
n
f[n_,x_]:= Sum[Sin[(2k-1)*x]/(2k-1),{k,1,n}];
Plot[f[30,x],{x,-Pi,Pi}]
n では
-p
0
p
2p
3p
4p
例2
sin 2x sin 3x sin 4x sin 5x
f (x) sin x
L
2
3
4
5
f[n_,x_]:= Sum[Sin[k*x]/k,{k,1,n}];
Plot[f[50,x],{x,-Pi,Pi}]
n では
-p
0
p
2p
3p
4p
例3
cos 2x cos 3x cos 4x cos 5x
f (x) - cos x
L
2
2
2
2
3
4
5
f[n_,x_]:= Sum[(-1)^k Cos[k*x]/k^2,{k,1,n}];
Plot[f[50,x],{x,-Pi,Pi}]
Euler公式
exp(i ) cos i sin
虚数部
exp(i )
sin
-1
単位円
cos
1
実数部
単位円を N 等分
n
単位円を N 等分する点: exp i 2p
N
n 0, 1, 2, ..., N - 1
N 12
2
1 13
0 12
11 -1
10
-2
n=-12, 0, 12, 24, … は全て同じ点
n = -1, 11, 23, … は全て同じ点
公式
1
N
nm 1 (n 0)
exp i 2p
N 0 (n 0)
m 0
N -1
等比級数の和の公式からすぐに導ける。あるいは下の図のようにも理解できる。
2
4
1
0
0
11
10
n=1 の場合:これら 12個の点の和 = 0
8
n=4 の場合:これら 3個の点を4回づつ足す=0
Fourier変換
1
nm
U nm
exp i 2p
N
N
N -1
N -1
1
nm
nm
U nmU mn exp i 2p
exp - i 2p
N m 0
N
N
m 0
1 N -1
(n - n)m
exp i 2p
nn
N m 0
N
UU 1
U と U+ は互いに逆行列で
U U 1 も成り立つ
N個のデータ
a2
a1
a0
aN-1
n
-1
0
1
2
3
N-1
N
N+1
n<0 あるいは n>=N の部分は,周期的に繰り返すことにする
Fourier変換
an N an
N -1
N -1
nm
exp i 2p
an
N
n 0
N -1
N -1
1
nm
an U nm Am
exp - i 2p
Am
N
N m 0
m 0
An N An
1
Am U mn an
N
n 0
特に、 an が実数の場合
A A-n AN -n
*
n
変換
逆変換
MathematicaによるFourier変換
関数 Fourier[]
と InverseFourier[] を用いる
a = {0.2,1.0,1.2,3.3,2.1,-1.1,-2.2,-3.1,-1.2}
A = Fourier[a]
a2 = InverseFourier[A]
ファイルからデータを読むには ReadList[]を使う
SetDirectory["D:\\3d"]
a = ReadList["noise.txt"];
a[[1]]
(先頭のデータ)
ListPlot[a];
(読み込んだデータをプロット)
A = Fourier[a];
(Fourier変換を実行)
ListPlot[Abs[A],PlotRange->{0,6}];
Fourier成分 Am の対称性
Abs[Am]
フィルタリング:
ノイズとみなせるなら
ゼロにしてしまう
m
-N
-2 -1 0 1 2 3
An N An
A A-n AN -n
*
n
よって
N-2
N
N+1
N-3 N-1
An A- n AN - n AN n
たとえば
A1 A-1 AN -1 AN 1
フィルタリング
高周波成分はノイズとみなして捨てる
(AのコピーをBに作る)
B = A;
(ndata = データ数N)
ndata = Length[A]
k = 3;
Do[B[[m]]=0,{m,k+1,ndata-k+1}];
b = InverseFourier[B];
ListPlot[b];
Bk , Bk 1 , ..., BN -k をゼロにする。
Mathematica では B[[k+1]] = Bk なので,B[[k+1]], B[[k+2]], …, B[[ndata-k+1]]
をゼロにすることになる。
演習
noise2.txt で同様のフィルタリングを行ってみよ。
k の値を上手く設定する必要がある(Abs[A] の値を見
て,どこからどこまでをノイズとみなすかを判断する)。
フィルタリング後に逆変換し,グラフを描いてみる。
連続関数へ
an f (t )
N
f (t T ) f (t )
1
Fm
T
f (t )
T
0
exp( imt ) f (t )dt
2p
m
m
T
m 0,1,2,3,...
exp- i t F
m -
m
変換
m
逆変換
三角関数で表す場合
1 T
Fm exp( imt ) f (t )dt
T 0
1 T
cos( mt ) i sin(mt ) f (t )dt
T 0
1
C m iS m
2
2 T
Cm cos( mt ) f (t )dt C- m
T 0
2 T
S m sin(mt ) f (t )dt - S - m
T 0
逆変換を三角関数で表す
f (t )
exp- i t F
m -
m
m
F0 exp- i m t Fm expi m t F-m
m 1
1
1
(c - is) (Cm iS m ) (c is) (Cm - iS m )
2
2
Cm cos(mt ) Sm sin(mt )
1
f (t ) C0 Cm cos(mt ) S m sin(mt )
2
m 1
実関数、奇関数、偶関数
1
Fm
T
T /2
-T / 2
exp( imt ) f (t )dt
2 T /2
Cm cos( mt ) f (t )dt
T -T / 2
f (t ) が実数:
2 T /2
S m sin(mt ) f (t )dt
T -T / 2
f (t ) f (t )
*
つまり
F F-m
Cm ,実数
Sm
*
m
f (t ) が偶関数: f (-t ) f (t )
Sm 0
f (t ) が奇関数: f (-t ) - f (t )
Cm 0
例
f(t)
1
奇関数だから
Cm 0
0
-T/2
-1
t
T/2
T
2 T /2
S m sin(mt ) f (t )dt (1周期分を積分)
T -T / 2
4 1 - cos(mT / 2)
4 T /2
sin(mt )dt
T
m
T 0
2p
2
m
m だから S m
(1 - cos mp )
T
pm
例(つづき)
cosmp (-1)
m
を用いると
4
m: 奇数
2
m
Sm
(1 - (-1) ) p m
pm
0 m: 偶数
sin(mt )
f (t )
p m1:奇数 m
4
4 2p
1
6p
1 10p
sin
t sin
t sin
t ....
p
T
3
T
5
T
グラフで確認してみる
たとえば周期 T=1 とすると(T はもちろん他の値でも良い)
w = 2*Pi;
f[t_]:=(4/Pi)(Sin[w*t]+(1/3)Sin[3w*t]
+(1/5)Sin[5w*t] + (1/7)Sin[7w*t]);
Plot[f[t],{t,-1,1}];
演習
f(t)
1
0
-T/2
-1
T
t
T/2
Cm , Sm を求め、最初の数項の和のグラフを描く
ヒント: 奇関数なので Cm=0
-T / 2 t T / 2
の範囲で
2
f (t ) t
T
2 T /2
2
S m sin(mt ) tdt
T -T / 2
T
部分積分せよ
© Copyright 2026 ExpyDoc