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 2025 ExpyDoc