スペクトル分解能(解像度)・窓関数・標本化
準備 : コマンドプロンプトで次のとおりに 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 の場合のスペクトルの周波数分解能 (解像度) を,講義資料に示された式を使って求めてください。
WaveSurfer を使って,先の準備において作成した正弦波(純音)のスペクトルを表示してください。
そのためには,WaveSurfer を起動して,純音のファイル s1234.16k.wav を読み込んだ後 (Choose Configuration では Waveform を選択), 波形上で右クリックして, Spectrum Section…をクリックします。
さて,スペクトルを表示しているウィンドウにおいて, FFT points (= フレーム長) を変更すると,スペクトルの解像度はどのように変化しますか。 FFT points を 64 点にした場合のスペクトルの解像度は計算値と比べてどうですか。
なお,WaveSurfer による FFT スペクトルでは,スペクトルの成分が連続して存在しているように見えますが,それは成分同士が直線で結ばれているためです。周波数解像度の低い FFT スペクトルを見ると,そのことがわかります。周波数解像度は,直線と直線の間が何 Hz であるかを観察すればわかります。
また,スペクトルは波形のどの区間から求めたかによって変化しますので,FFT スペクトルのウィンドウを開いたまま,波形上の異なる場所をクリックしてみてください。スペクトルはクリックした場所を始点とする FFT points 分の区間から計算されます。
- 先のスペクトルのウィンドウにおいて,Window(窓関数)を変更すると,スペクトルはどのように変化しますか。なお,Rectangle(矩形窓)は単なる波形区間の切り出しに相当します。
- 周波数が 5000 Hz, 7000 Hz, 9000 Hz の正弦波(純音)をサンプリング周波数 16 kHz で作成し,各純音の音や波形,スペクトルを比較観察して結果を記してください。何故,そうなると考えられますか。