スペクトル分解能(解像度)・窓関数・標本化
準備 : コマンドプロンプトで次のとおりに mksine.exe を実行することによって,サンプリング周波数が 16 kHz の条件で,周波数が 1234 Hz である正弦波(純音)を作成してください。
mksine -s 16000 s1234.16k.wav 1234
ここで -s は mksine のサンプリング周波数指定のオプションであり,2行目の「1234 エンター」は mksine に対する周波数の入力です。 mksine は -f オプションでファイル名が与えられなければ,プログラム動作後にキーボード(正確には標準入力)から周波数を読み込みますので,これによって 1234 Hz の純音が入ったファイル s1234.16k.wav が作成されます。
- 問い
フレーム長 64 点, サンプリング周波数 16 kHz の場合のスペクトルの周波数分解能 (解像度) を,講義資料に示された式を使って求めてください。
なお,本資料で扱うスペクトル分析は複数のフレームを使った短時間スペクトル分析ではありませんが, 単一のスペクトルを求めるために使用する波形のデータ長あるいは窓長をフレーム長と呼ぶこととします。
フレーム長を変更するとスペクトルの解像度はどのように変化するか, また,フレーム長を 64 点にした場合のスペクトルの解像度は計算値と比べてどうであるかを, WaveSurfer を使って調べてください。
そのためには,まず,上の準備にて作成した正弦波(純音)の FFT スペクトルを WaveSurfer で表示してください。 wavesurfer.exe と s1234.16k.wav がカレントディレクトリにあるならば
wavesurfer s1234.16k.wav
を実行してください(Choose Configuration では Waveform を選択)。 あるいはマウスで WaveSurfer を起動してから s1234.16k.wav を読み込んだ後に, 波形上で右クリックして Spectrum Section…をクリックします。
スペクトルを表示しているウィンドウの FFT points がフレーム長(= 窓長あるいは DFT でのデータ数)に相当しますので, これを変更してスペクトルの解像度を確認してください。
FFT スペクトルでは,スペクトルの成分が連続して存在しているように見えますが,それは成分同士が直線で結ばれているためです。周波数解像度の低い FFT スペクトルを見ると,そのことがわかります。周波数解像度は,隣合う周波数成分が何 Hz 離れているか(= 直線の長さが何 Hz であるか)をマウスで観察してみるとわかります。
また,スペクトルは波形のどの区間から求めたかによって変化しますので,FFT スペクトルのウィンドウを開いたまま,波形上の異なる場所をクリックしてみてください。スペクトルはクリックした場所を始点とする FFT points 分の区間から計算されます。
窓関数を変更すると,スペクトルはどのように変化しますか。
先のスペクトルのウィンドウにおいて,Window を変更して観察してください。 なお,Rectangle(矩形窓)は,窓を用いない単なる波形の切り出しに相当します。
- 周波数が 5000 Hz, 7000 Hz, 9000 Hz の正弦波(純音)をサンプリング周波数 16 kHz で作成し,各純音の音や波形,スペクトルを比較観察して結果を記してください。何故,そうなると考えられますか。