Last modified: Fri Jun 9 16:21:13 JST 2006
伊達
>>
生体情報システム
>>
課題6
課題6
目的
コンピュータで周波数分析(フーリエ変換)をおこなうことで,
その意味を直感的に理解し,
フーリエ変換のイメージを確固たるものにする.
(octave の練習も兼ねる.)
試して確認してみることの例
- いろいろな周波数成分を含んだ波を作り,それをフーリエ変換してみる.
もとの周波数成分がとりだせるか.
- コンピュータで扱える情報は離散的な情報のため,手計算で変換したときほどきれいな結果は得られない.
- もとの信号の位相を変化させてもフーリエ変換後のパワースペクトルは不変.
- 実数関数 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(ω) は複素数値ベクトル.
- フーリエ変換した後の図をよく見てみよう. 縦軸はたいてい絶対値 |F(ω)| になっている.
- 本来,位相 arg F(ω) も図示しないといけないが,人間の聴覚系はパワースペクトル(絶対値)に依存し,位相はあまり影響ないと考えられている(これは怪しい).
- F(ω) が実数値ベクトルになる場合もあるが,それは特殊な場合.
- octave 入門
各変数は行列(ベクトルを含む)なので,ベクトル演算が
楽にできる.
t = 0: 1/44100 : 5; とすると,変数 t として,
0から5までで,1/44100 おきの値をとるベクトル t が作成される.
使い方がわからばければ
octave:33> help plot
などとする.
あとは google で 「octave 初歩」などで検索.
- 本来,各自で音を録音したり,聞いてもらうはずでしたが,演習室の環境を整えることが間に合いませんでした.
うまくいけば夏以降には,音信号の編集ソフトが使えるようになります.
そのほか