Last modified: Tue Jun 19 21:07:48 JST 2007
伊達
>>
生体情報システム
>>
課題6
課題6
目的
コンピュータで周波数分析(フーリエ変換)をおこなうことで,
その意味を直感的に理解し,
フーリエ変換のイメージを確固たるものにする.
速修 フーリエ変換
試して確認してみることの例
- いろいろな周波数成分を含んだ波を作り,それをフーリエ変換してみる.
もとの周波数成分がとりだせるか.
- コンピュータで扱える情報は離散的な情報のため,
関数を手計算で変換(応用数学2の講義で計算したような)きれいな結果は得られない.
- もとの信号の位相を変化させてもフーリエ変換後のパワースペクトルは不変.
- 実数関数 f(t) をフーリエ変換すると,F(ω) のグラフは左右対称になる.
- 白色ノイズのフーリエ変換と,インパルスのフーリエ変換の違い.
% octave
octave:1> t = 0: 1/44100 : 5; % 時間軸の作成. t は220500次元のベクトル.
octave:2> whos % 変数がどうなっているか確認
octave:3> y = 0.9 * sin(2*pi*440*t); % 440Hz の正弦波を作成
octave:4> plot(y) ;
octave:5> plot(y(1:1000)) ; % 1,1000 の範囲だけを表示.
octave:6> Y = fft(y, 1024); % 最初の1024個のデータをフーリエ変換
octave:7> f = (0:512)/1024*44100; % 周波数軸を作成
octave:8> plot(f,20*log10(abs(Y(1:513)))); % フーリエ変換後のデータを表示(絶対値)
サンプルデータ
- 部分的な正弦波 short_tone.dat
(1024 次元のデータ. 441000 Hz でサンプリング.)
この信号を作成したコード generate_data060608.c
-
「おはよう」
ohayo57.txt
(51865 次元のデータ. 441000 Hz でサンプリング.)
% less ohayo57.txt としてヘッダーにこの情報が書かれていることを確認する)
octave:26> load 'ohayo57.txt' % 変数 sig に音声データを入力
octave:27> plot (sig); % 音声波形の表示
octave:28> plot (sig(17000:20000)); % 音声信号の一部を表示
octave:29> plot (sig(16000:17024));
octave:30> sp = fft(sig(16001:17024).*hamming(1024));
octave:31> f = (0:512)/1024*44100;
octave:32> plot(f,20*log10(abs(sp(1:513))));
補足
- 速修 フーリエ変換
- 1対1の変換. n 個のデータをフーリエ変換した結果は n 個のデータ.
- 1対1の変換なので,お互いの表現を行き来できる.f(t) ←→ F(ω). ロスはない.
- ただし,ベクトル f(t) の個々の要素は実数値をとる.
-
一方,ベクトル F(ω) の個々の要素は複素数値をとる.
-
したがって n 個のデータをフーリエ変換した場合,
2n 個の実数が得られる.
-
しかし,もともとの情報は n 個なので,2n 個のデータのうち,本質的な情報は
n 個の実数(具体的には n/2 個の複素数)に含まれている.
- どの本でもいいから,フーリエ変換した後の図があれば,それをよく見て
みよう.
- 横軸はω.
F(ω) は複素数なので,正確にプロットしようとすると3次元の図になる.
- 3次元の中に1本の線が漂っているイメージができればOK.
- 3次元は見にくいので,2次元の図で書いてある場合が多い.
- その場合,縦軸は,たいていの場合,絶対値 |F(ω)| になっている.
- 本来,位相 arg F(ω) も図示しないといけないが,人間の聴覚系はパワー
スペクトル(絶対値)に依存し,位相はあまり影響ないと考えられている
(これは怪しい)ため,表示されていない場合が多い.
- F(ω) が純粋に,実数の値しかとらない場合もあるが,それは特殊な場合.
- octave 入門
各変数は行列(ベクトルを含む)なので,ベクトル演算が
楽にできる.
t = 0: 1/44100 : 5; とすると,変数 t として,
0から5までで,1/44100 おきの値をとるベクトル t が作成される.
使い方がわからばければ
octave:33> help plot
などとする.
あとは google で 「octave 初歩」などで検索.
そのほか