復習
- サンプリング周波数:1秒間にサンプリングする音圧値の数(サンプル数).通常は16,000Hz.
- サンプルサイズ:音圧値を離散値に変換する際の目盛りの数.
- 全サンプル数 / サンプリング周波数 = 音声データの秒数
- フーリエ変換:時間信号を周波数軸に変換する.蝸牛内の基底膜と同様の働き.
- スペクトル:フーリエ変換の結果得られたもの.
- 振幅スペクトル:スペクトルの絶対値.複素数から振幅成分を取り出す.
- パワースペクトル:振幅スペクトルの二乗.
- 対数振幅スペクトル:振幅スペクトルのままだと値の振れ幅が大きく見づらいため,対数を取る.
短時間フーリエ変換
- 記事3.フーリエ変換では,音声波形をフーリエ変換してスペクトルを可視化した.一方で,横軸が周波数のせいで時間情報が分からなくなってしまった.
- そこで,時間変化の情報も維持するために,短い時間ごとに音声を区切り,短時間ごとにフーリエ変換を行う.(短時間フーリエ変換)
- フレーム:短時間ごとに取り出されたデータそれぞれ
- オーバーラップ:隣のフレームとの被り.ある程度被らないと音声の変化を捉えられない.
- フレームサイズ:フレームの幅.
- フレームシフト:フレームの間隔.
窓関数
- あまり知られていない(?)が,これ重要.就活でも理解を問われたことがある.
- フーリエ変換では分析区間を1周期分とみなす.すなわち,分析区間の波形がその前後に連続すると解釈.
- ゆえに分析区間の始端と終端が一致している必要がある.
- しかし,現実には波の周期と分析区間は一致していない.
- そのため,波形の不連続な結合がノイズを生じる
- そこで,窓関数の出番.
ハミング窓
- 最もよく使われる窓関数.
- 始端,終端に近付くにつれて0に近付く.
- よって,波の継ぎ目の不連続部分が0に収束する.
- 故に,不連続部分が目立たなくなり,ノイズが生じにくくなる.
短時間フーリエ変換・スペクトログラム作成
- Colab: https://colab.research.google.com/drive/1Q12VvZ9Qkzzln2L6ahxAWp__clChG3-g?usp=sharing
-
int(fft_size/2)+1
:振幅スペクトルは左右対称であり,右半分は不要. -
np.fft.fft(frame, n=fft_size)
:サンプル数400に対して,500になるまで0を加えた後でfftを行う.