情報通信システム(2) http://www10.plala.or.jp/katofmly/chiba-u/ 2015年4月28日 火曜日 午後4時10分~5時40分 NTT-IT Corp. 加藤 洋一 千葉大学 2- 2 FFT(Fast Fourier Transform)の実際的応用 • FFTは信号解析のための主要なツールです。 信号解析手法の一端に触れ、考え方に慣れる ことが目標です。 • 3回に渡ってFFTの仕組みを理解します – 資料にはなるべく丁寧に式の展開を記述しました が、講義では適宜とばして説明します – フーリエ級数 > フーリエ変換 > 標本化定理 > ディジタルフーリエ変換(DFT) > 高速フーリエ変 換(FFT)の順に説明します • まずはじめにちょっとしたFFTのデモを行いま す。 千葉大学 2- 3 最初の段階として周期的信号を扱います • 「周期的信号」とは同じ波形が繰り返される信号のこと • 繰り返しの周期はT(本講義では単位は秒、1/Tは1秒当たり の振動数、つまり「周波数」となる) この区間と同じ形の信号が(無限の 昔から)永遠に繰り返されている。 f (t ), t 0 t T -T/2 T T/2 T 3T/2 5T/2 f (t) f (t T ) f (t 2T ) f (t nT), nは任意の整数 千葉大学 2- 4 フーリエ級数 信号f (t )が周期Tで繰り返すとき、 t f (t ) An sin(n 2 n) と展開できるという。 T n 0 t T ここで An sin(n 2 n) は周期 、振幅 An、 初期位相nのサイン波。 T n n 0のときは、 の中はA0 sin( 0) t n 0のときは、 の中はAn sin(n 2 n) T t t An sin(n 2 ) cos(n) cos(n 2 ) sin(n) T T t t An cos(n) sin(n 2 ) An sin(n) cos(n 2 ) T T sin(a b) sin(a) cos(b) cos(a) sin(b)の公式を使いました。 Gcalcで「波」について確認 (Fourier1.gcd Phase and Amplitude, Frequency) 千葉大学 2- 5 フーリエ級数 a0 A0 sin( 0), an An sin(n), bn An cos(n)とすると 2 a0 t t f (t ) an cos(n 2 ) bn sin(n 2 ) (こちらが一般的) 2 n1 T T 上式は、周期関数(周期的信号)がサイン波とコサイン 波の足し合わせで表せることを示している。では、T/n の周期のサイン波の振幅 an、コサイン波の振幅 bn をど のように決めれば良いか求めてみよう。 t n sin(n 2 ) sin(2 t ) T T これは、周波数 n T 、即ち、周期 のサイン波 T n その前に、三角関数の積分のおさらいを少々。。。 千葉大学 2- 6 三角関数の積分(基本) T /2 T T dt t ( ) T (下記 Cは積分定数) 2 2 T / 2 T / 2 n 1, 2, 3, 4, 5, ... d nt 2n nt nt T nt sin(2 ) cos(2 ), 即ち cos(2 )dt sin(2 ) C dt T T T T 2n T T /2 nt n T /2 T cos(2 )dt sin 2 t 00 0 T T T / 2 2n T / 2 T /2 d nt 2n nt nt T nt cos(2 ) sin(2 ), 即ち sin(2 )dt cos(2 ) C dt T T T T 2n T T /2 nt n T /2 T T T sin( 2 ) dt cos 2 t 0 T T T / 2 2n 2n 2n T / 2 千葉大学 2- 7 三角関数の積の積分(sinとcos) T /2 t t sin( n 2 ) cos( m 2 )dt T T T / 2 1 t t sin(( n m ) 2 ) sin(( n m ) 2 )dt T T T / 2 2 T /2 1 T 1 T 1 T /2 (n m) cos((n m)2 t ) ((n m) cos 2 t ) 0 2 (n m) 2 T (n m) 2 T T / 2 1 T 1 T /2 (n m) cos(2n 2 t ) 0 2 2n 2 T T / 2 周期がT/n(n>0)のSinとCosの掛けあわせの積 分は、積分範囲が-T/2からT/2(つまり一周期) のときは0になる(0からT、Tから2Tでも同じ) 千葉大学 2- 8 三角関数の積の積分(cosとcos) T /2 t t cos( n 2 ) cos( m 2 )dt T T T / 2 1 t t cos(( n m ) 2 ) cos(( n m ) 2 )dt T T T / 2 2 T /2 1 T t T t T /2 (n m) sin((n m) 2 ) sin((n m) 2 ) 0 2 (n m) 2 T (n m) 2 T T / 2 1 T t T T T / 2 1 T (n m) sin(2n 2 ) t ( ) 2 2n T 2 2 T / 2 2 2 周期がT/n(n>0)のCosとCosの掛けあわせの積分 は、積分範囲が-T/2からT/2のとき、 n=mのときはT/2になる それ以外の時は0になる (積分範囲が0からT、Tから2Tでも同じ) 千葉大学 2- 9 三角関数の積の積分(sinとsin) T /2 t t sin( n 2 ) sin( m 2 )dt T T T / 2 1 t t cos(( n m ) 2 ) cos(( n m ) 2 )dt T T T / 2 2 T /2 1 T t T t T /2 (n m) sin((n m) 2 ) sin((n m) 2 ) 0 2 (n m) 2 T (n m) 2 T T / 2 1 T t T T T / 2 1 T (n m) sin(2n 2 ) t ( ) 2 2n T 2 2 T / 2 2 2 周期がT/n(n>0)のSinとSinの掛けあわせの積分 は、積分範囲が-T/2からT/2のとき、 Gcalcで見てみよう n=mのときはT/2になる (Fourier1.gcd: それ以外の時は0になる (積分範囲が0からT、Tから2Tでも同じ) Integral) 千葉大学 2- 10 フーリエ級数(anの導出) フーリエ級数の式は以 下のとおり(前出) a0 t t f (t ) an cos(n 2 ) bn sin(n 2 ) 2 n1 T T 以下の式を計算してみる。 T /2 t f (t ) cos(m 2 )dt T T / 2 千葉大学 2- 11 フーリエ級数(anの導出) T /2 a0 t t t t f ( t ) cos( m 2 ) dt a cos( n 2 ) b n sin( n 2 ) cos( m 2 )dt 2 n T T T T n1 T / 2 T / 2 T /2 T /2 a0 t cos( m 2 )dt 2 T T / 2 (この項は0ですね) T /2 T /2 t t t t a 1 cos(1 2 ) cos( m 2 ) dt b 1 sin(1 2 ) cos( m 2 )dt T T T T T / 2 T / 2 T /2 T /2 t t t t a 2 cos(2 2 ) cos( m 2 ) dt b 2 sin(2 2 ) cos( m 2 )dt T T T T T / 2 T / 2 。。。 T /2 T /2 t t t t a cos( n 2 ) cos( m 2 ) dt b sin( n 2 ) cos( m 2 )dt n n T T T T T / 2 T / 2 。。。 sinと cosの積の項すべてと、cosと cosの積の項でn mである項は全て0とな るので、 T /2 t t T am cos(n 2 ) cos(n 2 )dt am , 2 T T T / 2 t 2 T /2 am f (t ) cos(m 2 )dt T T / 2 T 千葉大学 2- 12 フーリエ級数(bnの導出) フーリエ級数の式 a0 t t f (t ) an cos(n 2 ) bn sin(n 2 ) 2 n1 T T さらに、以下の式を計 算してみる。 T /2 t f (t ) sin(m 2 )dt T T / 2 千葉大学 2- 13 フーリエ級数(bnの導出) T /2 a0 t t t t f ( t ) sin( m 2 ) dt a cos( n 2 ) b sin( n 2 ) sin( m 2 )dt n n T T T T n1 T / 2 T / 2 2 T /2 T a0 t sin( m 2 )dt 2 T T / 2 (この項は 0ですね) T T t t t t a 1 cos(1 2 ) sin( m 2 ) dt b 1 sin(1 2 ) sin( m 2 )dt T T T T T / 2 T / 2 T T t t t t a 2 cos(2 2 ) sin( m 2 ) dt b 2 sin(2 2 ) sin( m 2 )dt T T T T T / 2 T / 2 。。。 T T t t t t a cos( n 2 ) sin( m 2 ) dt b sin( n 2 ) sin( m 2 )dt n n T T T T T / 2 T / 2 。。。 sinと cosの積の項全てと、sinと sin の積の項でn mである項は全て0とな るので、 T t t T bm sin(m 2 ) sin(m 2 )dt bm , T T 2 T / 2 2 T /2 t bm f (t ) sin(m 2 )dt T T / 2 T 千葉大学 2- 14 フーリエ級数まとめ f (t )が周期Tで繰り返す周期関数であるとき、 T /2 2 t an f (t ) cos(n 2 )dt, T T / 2 T T /2 2 t bn f (t ) sin(n 2 )dt, T T / 2 T n 0の整数 n 0の整数 とすれば、 a0 t t f (t ) an cos(n 2 ) bn sin(n 2 ) 2 n1 T T と展開することができ る。 数学的な厳密さには欠けるところもあります。詳しくは専門書をどうぞ。 千葉大学 2- 15 フーリエ級数例題 0.4 0.2 -0.5 0.5 1 1.5 -0.2 -0.4 周期1、振幅0.5の「のこぎり」波 のフーリエ級数を求める。 f (t ) t, 0.5 t 0.5 t 1, 0.5 t 1.5 のこぎり波を聞いてみよう。 ちょっといやな音だ。。。 千葉大学 2- 16 フーリエ級数例題(のこぎり波) d f ( x) g ( x) d f ( x) d g ( x) g ( x) f ( x) (関数の積の微分) dx dx dx d f ( x) g ( x) d f ( x) d g ( x) dx dx dx g( x)dx f ( x) dx dx (両辺を積分する) d f ( x) d g ( x) g ( x ) dx f ( x ) g ( x ) f ( x ) dx (部分積分の公式) dx dx 2 T /2 t an t cos(n 2 )dt T T / 2 T T t g (t ) t, f (t ) sin(n 2 )とおくと、 n 2 T T /2 2 T t 2 T /2 T t t sin(n 2 ) sin(n 2 )dt T n 2 T T / 2 T T / 2 n 2 T T /2 2 T T t T cos(n ) cos(n ) cos( n 2 ) 2 2 T n 2 n 2 T T / 2 4n 0 (cos(t ) cos(t )です) 0 千葉大学 2- 17 フーリエ級数例題(のこぎり波) 2 T /2 t T t bn t sin(n 2 )dt g (t ) t , f (t ) cos(n 2 )とおくと、 T T / 2 T n 2 T T /2 2 T t 2 T /2 T t t cos(n 2 ) cos(n 2 )dt T n 2 T T / 2 T T / 2 n 2 T 2 T T T T cos(n ) ( ) cos(n ) 0 T 2 n 2 2 n 2 T T cos(n ) (1)n , n 0の整数 n n f (t ) n1 T t (1)n sin (n 2 ) n T (のこぎり波のフーリエ 級数表現) Gcalcで確認Fourie1.gcd Saw Shape 千葉大学 2- 18 フーリエ級数例題(のこぎり波) 0.4 0.3 n=1 n=2 n=3 n=4 n=5 n=6 n=7 n=8 n=9 0.2 0.1 0 -0.1 -0.2 bn T (1)n , n 0の整数 ( anは常に0でした) n f (t ) n1 T t (1)n sin (n 2 ) n T (のこぎり波のフーリエ 級数表現) 千葉大学 2- 19 のこぎり波の級数を書き下すと。。。 f (t ) 2A t (1)n sin(n 2 ) (のこぎり波のフーリエ 級数表現) n T n1 2A t 2A 2t 2A 3t 2A 4t sin(2 ) sin(2 ) sin(2 ) sin(2 ) T 2 T 3 T 4 T 2A 5t 2A 6t 2A 7t 2A 8t sin(2 ) sin(2 ) sin(2 ) sin(2 ) ..... 5 T 6 T 7 T 8 T 0.6 0.4 0.2 -0.4 -0.2 0.2 0.4 -0.2 -0.4 n=8まで合算 したところ A -0.4 0.4 0.4 0.4 0.4 0.2 0.2 0.2 0.2 -0.2 0.2 -0.4 -0.2 0.2 0.4 -0.4 -0.2 0.2 0.4 -0.4 -0.2 -0.2 -0.2 -0.2 -0.4 -0.4 -0.4 -0.4 0.4 0.4 0.4 0.4 0.2 0.2 0.2 0.2 -A -T/2 -0.4 0.4 -0.2 -0.2 0.2 0.2 0.4 0.2 0.4 T/2 0.4 -0.4 -0.2 0.2 0.4 -0.4 -0.2 0.2 0.4 -0.4 -0.2 -0.2 -0.2 -0.2 -0.2 -0.4 -0.4 -0.4 -0.4 千葉大学 2- 20 具体的な例 440Hz (「ラ」の音です)ののこぎり波をフーリエ級数展開します。振幅を10,000とし、周期 は、1/周波数ですので、約2.27msecとなります(WaveGeneで確認)。 振幅 10000 時間 msec -10000 -3.41 f (t ) n1 で -2.27 -1.13 2A t (1)n sin (n 2 ) n T 0 1.13 2.27 3.41 (のこぎり波のフーリエ 級数表現) 2A (1)nの値を具体的に計算すると、以下のようにな n 440Hzのサイン波成分の振幅 = 6366.19772368 880Hzのサイン波成分の振幅 = -3183.09886184 1320Hzのサイン波成分の振幅 = 2122.06590789 2640Hzのサイン波成分の振幅 = -1591.54943092 5280Hzのサイン波成分の振幅 = 1273.23954474 : る。 saw_fourie.pyというプログラムで、 左記のようなサイン波を順に加えて waveファイルを作ってみました。加 えるサイン波、そのサイン波を加え た波、の順で録音されています。 n=20まで加算し、その後、正確なの こぎり波を録音しました。 千葉大学 2- 21 もうひとつ具体的な例:三角波 振幅 A 時間 T/2 -T/2 -A 4 At T A , t 0 T 2 f (t ) 4 At T A , 0t T 2 周期=T T /2 2 t 2 0 4 At t 2 T /2 4 At t an f (t ) cos(n 2 )dt ( A ) cos(n 2 )dt ( A ) cos(n 2 )dt T T / 2 T T T / 2 T T T 0 T T T /2 2A T /2 t 8A 0 t t cos( n 2 ) dt t cos( n 2 ) dt t cos( n 2 )dt 0 T T/ 2 T T 2 T/ 2 T T d g ( x) d h( x) h ( x ) dx g ( x ) h ( x ) g ( x ) dx dx dx T t h(t ) t , g (t ) sin(n 2 ) とおくと、 n 2 T (部分積分の公式) Gcalc: triangle 0 T /2 0 T /2 8 A T t T t t T t T 2 t sin(n 2 ) sin(n 2 )dt t sin(n 2 ) sin(n 2 )dt T n 2 T T / 2 T / 2 n 2 T T 0 T n 2 0 n 2 0 T /2 8 A T T t T t 2A T 2 cos(n 2 ) cos(n 2 ) 2 2 1 (1)n (1)n 1 T n 2 n 2 T T / 2 n 2 n 2 T 0 n 4A 8A 1 (1)n 2 2 , n 1,3,5,7,... 2 2 n n bnは 0 になります。自分で計 算してみてください。 千葉大学 2- 22 閑話休題:奇関数と偶関数 振幅 10000 -3.41 -2.27 -1.13 0 3.41 2.27 1.13 2A t n f (t ) (1) sin(n 2 ) n T n1 振幅 A 時間 msec -10000 奇関数[ f(x)=-f(-x)]であるのこぎり 波はsinの項だけを含み、偶関数 [ f(x)=f(-x)]である三角波はcosの 項だけを含む。 これは、sinが奇関数であり、cosが 偶関数であることに起因している。 時間 T/2 -T/2 -A -0.4 周期=T 8A t f (t ) 2 2 cos(n 2 ) T n1,3,5,... n 1 1 0.5 0.5 -0.2 0.2 0.4 -0.4 -0.2 0.2 -0.5 -0.5 -1 -1 周波数1,2,3, 4のコサイン波 0.4 周波数1,2,3, 4のサイン波 千葉大学 2- 23 フーリエ級数まとめ 周期的に繰り返す信号は、その繰り返しの周波数(基本周波数)の整数倍の サイン波とコサイン波の全てに重みをかけたものの和に展開できる。 基本周波数= 1 0 繰り返しの周期 T -3T/2 t T -T/2 T T/2 3T/2 1周期の平均値 重みb1と基本周波数サイン波をかける 重みa1と基本周波数コサイン波をかける 重みb2と基本周波数X2サイン波をかける 全て加 える 重みa2と基本周波数X2コサイン波をかける 重みb3と基本周波数X3サイン波をかける 重みa3と基本周波数X3コサイン波をかける : : 千葉大学 2- 24 フーリエ級数の複素表現(の準備、オイラーの公式) eを自然対数の底(値は 、2.7182818284 ...)とする d x x e e となることは有名。 dx j 1とする(数学では i が用いられるが、 なぜか電気系では j を用いる) オイラーの公式 e jx cos(x) j sin( x) 右辺は、複素平面上での円運動を表している 。 では左辺のeの虚数乗とは何か? 千葉大学 2- 25 テイラー展開 d f ( x)を f ' ( x)と表すことにする。 dx たとえば、 f '' ( x)はf ( x)を2階微分したもの。 関数f ( x)の導関数 f ( x)のx aの近傍でのテイラー級 数は以下のように表せ る。 1 ' 1 '' 1 ''' 2 f ( x) f (a) f (a)(x a) f (a)(x a) f (a)(x a)3 1! 2! 3! 1 f (a) f ( n) (a)(x a)n n1 n! a 0のとき、 1 f ( x) f (0) f ( n) (0) x n これをマクローリン展 開という。 n1 n! 千葉大学 2- 26 テイラー展開 sin( x)のマクローリン展開。 d sin( x) cos(x), dx d3 d sin( x) sin( x) cos(x), 3 d x dx d2 d sin( x) cos(x) sin( x), 2 d x dx d4 d sin( x) cos(x) sin( x) 4 d x dx 1 1 1 1 2 3 sin( x) sin(0) cos(0) x sin(0) x cos(0) x sin(0) x 4 1 2! 3! 4! 1 1 1 1 5 6 7 cos(0) x sin(0) x cos(0) x sin(0) x8 5! 6! 7! 8! 1 1 3 1 5 1 7 1 x x x x (1)n x( 2n1) 1 3! 5! 7! n0 (2n 1)! 千葉大学 2- 27 テイラー展開 cos(x)のマクローリン展開。 d d2 d cos(x) sin( x), cos( x ) sin( x) cos(x), 2 dx d x dx d3 d d4 d cos(x) cos(x) sin( x), 4 cos(x) sin( x) cos(x) 3 d x dx d x dx 1 1 1 1 2 3 cos(x) cos(0) sin(0) x cos(0) x sin(0) x cos(0) x 4 1 2! 3! 4! 1 1 1 1 sin(0) x5 cos(0) x6 sin(0) x7 cos(0) x8 5! 6! 7! 8! 1 2 1 4 1 6 1 8 1 1 x x x x (1)n x( 2n) 2! 4! 6! 8! n0 (2n)! Gcalcで確認してみよう fourier1.gcd: Tayler アニメで表示 千葉大学 2- 28 テイラー展開(オイラーの公式の証明) e xのマクローリン展開。 2 3 4 d x d d d x x x x e ex , 2 ex ex , e e , e e dx d x d 3x d 4x 1 1 1 1 e x e0 e0 x e0 x 2 e0 x 3 e0 x 4 1 2! 3! 4! 1 1 1 1 1 x x 2 x3 x 4 1 2! 3! 4! x jxとすると、 1 1 1 1 jx 2 3 e 1 ( jx) ( jx) ( jx) ( jx)4 1 2! 3! 4! 1 1 1 1 ( jx)5 ( jx)6 ( jx)7 ( jx)8 5! 6! 7! 8! 1 1 1 1 1 1 1 1 1 x 2 x 4 x6 x8 j ( x x3 x5 x7 ) 2! 4! 6! 8! 1 3! 5! 7! 1 1 n 2n (1) x j (1)n x( 2n1) cos(x) j sin( x) n0 2n! n0 (2n 1)! 千葉大学 2- 29 複素指数関数の性質 A e j2 cos(2 ) j sin(2 ) 1 e jn 1, nが偶数のとき B e j cos( ) j sin( ) 1 e jn 1, nが奇数のとき j cos( ) j sin( ) j 2 2 3 j 3 3 2 D e cos( ) j sin( ) j 2 2 Ce 2 e e j ( 2n1) j ( 2 n1) 2 2 j, nが偶数のとき j, nが奇数のとき Imaginary part (j) C 1 0.5 B -1 -0.5 0.5 -0.5 -1 D 1 Real part A 千葉大学 2- 30 フーリエ級数の複素表現 a0 t t フーリエ級数 f (t ) an cos(n 2 ) bn sin(n 2 ) 2 n1 T T オイラーの公式 e jx cos(x) j sin( x), x xとおくと e j ( x) cos( x) j sin( x) e jx cos(x) j sin( x) が得られる。これから 、 e jx e jx e jx e jx cos(x) , sin( x) となる。上式に代入し 、 2 2j t t t t jn2 jn2 jn2 jn2 T T a0 e T e e T e f (t ) an jbn 2 n1 2 2 a0 (an jbn) jn2 Tt (an jbn) jn2 Tt e e 2 n1 2 2 n1 千葉大学 2- 31 フーリエ級数の複素表現 a0 (an jbn) jn2 Tt (an jbn) jn2 Tt f (t ) e e 2 n1 2 2 n1 a0 (an jbn) (an jbn) c0 , cn , n 1,2,.... c( n) , n 1,2,.... とおくと 2 2 2 f (t ) cne n t jn2 T というシンプルな 式で表せる (次のページの用意) 複素共役c a jb, c* a jb (虚数部の符号を反転させる) (e jn2 e t T * t t * t t ) [cos(n 2 ) j sin(n 2 )] cos(n 2 ) j sin(n 2 ) T T T T jn2 t T 千葉大学 2- 32 フーリエ級数の複素表現 jn2 Tt 複素フーリエ級数 f (t ) cne での cnの求め方。 n 複素共役c a jb, c* a jb (虚数部の符号を反転させる) T /2 T / 2 f (t )(e jm2 n mのとき t T * ) dt T /2 T / 2 T /2 e jn2 t T e f (t )e jm2 t T jm2 dt T / 2 n mのとき e T / 2 jn2 jn2 Tt jm2 Tt dt cne dt e T / 2 n T /2 T /2 e j ( nm)2 t T T / 2 T /2 t T t T e jm2 t T T /2 j ( nm)2 Tt T dt e j (n m) 2 T / 2 T e j ( nm) e j ( nm) 0 j (n m) 2 dt T /2 e j ( nm)2 T / 2 [t ]TT/ 2/ 2 T t T dt T /2 e T / 2 j ( nm)2 t T dt T /2 0 e dt T / 2 千葉大学 2- 33 フーリエ級数の複素表現 前頁より、 T /2 e n mのとき jn2 t T e jm2 t T dt 0 T / 2 T /2 e n mのとき jn2 t T e jm2 t T dt T T / 2 したがって、 T /2 f (t )e T / 2 jn2 t T CnT , T /2 1 Cn f (t )e T T / 2 jn2 t T 千葉大学 2- 34 複素フーリエ級数の例題 幅kT、振幅1/kのステップ関数 4 3 1 T e kT jn 2 2 1 -0.5 1 kT / 2 1 jn2 Tt Cn e dt, T kT / 2 k 0.5 1 1.5 1 k k f (t ) , t k 2 2 k k 0, t 1 2 2 1 k k , 1 t 1 k 2 2 t jn2 T 0 k 1 kT / 2 , n0 kT / 2 1 e jnk e jnk , n 0 k jn 2 1 e jnk e jnk , n0 kn 2j 1 sin(kn ), n 0 kn 1, n 0 千葉大学 2- 35 複素フーリエ級数の例題 前頁より 1 cn sin(kn ), n 0 kn 1, n0 lim cn はどうるか? knを xとおくと cnは k 0 sin( x) sin( x) の形をしている。これ はx 0で 1となる。 x x つまり、 lim cn 1となる。 k 0 Gcalcで確認 fourier1.gcd: Step Shape これはどういう意味か?基本周期Tの1/nの波を全て同じ量だけ(つまり振幅が同 じ)足し合わせると、周期Tのインパルスとなる。逆にいうと、インパルスは、全ての 周期の波を等しく含んでいる。
© Copyright 2025 ExpyDoc