音のスペクトル(FFT)
合成音・マイク・音声ファイルの音を FFT で周波数に分けて、波形・スペクトル・スペクトログラムで表示します。窓関数の違いや、標本化で起きるエイリアシングも確かめられます。
- ピーク
- —
- 音名
- —
- ピークの大きさ
- —
- 実効値
- —
- 周波数分解能
- 11.72 Hz
- 時間窓
- 85.3 ms
音源を選んで再生してください
窓関数の比べ方
FFT は切り出した区間がそのまま繰り返すとみなすので、端で波形が途切れると、ない周波数にまで成分が漏れます(スペクトル漏れ)。 窓関数で端を 0 に近づけると漏れは減りますが、山(メインローブ)が太くなり、近い 2 つの音を見分けにくくなります。行を選ぶと上の解析にも使います。
| 窓関数 | メインローブの幅 | 最大のサイドローブ | 等価雑音帯域幅 | 振幅の倍率 |
|---|---|---|---|---|
| 2.0 本 | -13.3 dB | 1.00 本 | 1.000 | |
| 4.0 本 | -31.5 dB | 1.50 本 | 0.500 | |
| 4.0 本 | -42.4 dB | 1.36 本 | 0.540 | |
| 6.0 本 | -58.1 dB | 1.73 本 | 0.420 | |
| 10.0 本 | -88.2 dB | 3.77 本 | 0.216 |
振幅の倍率は窓を掛けたあとの振幅の割合(このアプリはこれで割り戻して、振幅 1 の正弦波を 0 dB と表示します)。等価雑音帯域幅が広いほど、ノイズを多く拾います。
標本化とエイリアシング
デジタルの音は、1 秒に fs 回だけ値を記録(標本化)したものです。fs の半分(ナイキスト周波数)を超える音は、標本の点だけを見ると低い音と区別できず、折り返した周波数に化けて見えます。 分かりやすいように、ここでは 1 秒に数回〜数十回の遅い標本化で示します。
- ナイキスト周波数
- 5 Hz
- 見かけの周波数
- 1 Hz
折り返しています(点線が見かけの波)
CD やこのブラウザの音は 44.1 kHz か 48 kHz で標本化するので、人に聞こえる 20 kHz までは折り返しません。録音の前には、ナイキスト周波数より高い音をフィルタで取り除いておきます。
使い方
- 音源を「合成音」「マイク」「音声ファイル」から選び、「再生」(Space キー)を押します。合成音は 4 種類の波形・周波数のスイープ・2 つ目の正弦波・ホワイトノイズを組み合わせられます。
- 上から順に、波形・スペクトル・スペクトログラム(時間とともに流れるスペクトル)を表示します。スペクトルにカーソルを合わせると、その周波数の大きさを表示します。
- 「一時停止」(F キー)で表示だけを止めて、じっくり見られます。
- FFT の点数を増やすと周波数を細かく見分けられますが、1 回に使う時間(時間窓)が長くなり、速い変化を追いにくくなります。矩形波やのこぎり波で倍音を、2 つの近い音で窓関数による見分けやすさの違いを確かめてみてください。
- ピークの周波数は、一番大きい線と両隣の 3 本から放物線で補間して、線と線の間まで推定します。楽器の音ならおおよその音名(A4 = 440 Hz)も分かります。
計算方法
- Web Audio API の AnalyserNode から直近の波形を読み、窓関数を掛けてから、基数 2 の FFT(クーリー–テューキー法)でスペクトルを計算します。FFT はこのアプリで実装したものです。
- 振幅は窓の和で割って 2 倍し、振幅 1(デジタルで出せる最大)の正弦波が 0 dB になるようにしています(dBFS)。
- 平均化は前のフレームとの指数移動平均、ピークの保持は大きい値を残して少しずつ下げます。
- 合成音の矩形波・のこぎり波・三角波は、ブラウザが折り返しの起きない形で作るので、倍音はナイキスト周波数で止まります。
注意事項
- マイクの音と音声ファイルは、この端末の中で解析するだけで、送信も保存もしません。マイクの音はスピーカーから出しません。
- 高い周波数や大きな音は耳を傷めることがあります。はじめは音量を小さくしてください。
- マイクやスピーカーの特性、ブラウザの処理によって、実際の音とは大きさが違って表示されることがあります。