音声認識メモ(フーリエ変換)
フーリエ変換を用いることで、波形データを純音に分解できる。
結果、波形データの特徴を解析しやすくなる。
フーリエ変換の定義式
ω:角周波数/角速度[rad/s]
t:時間[s]
j:虚数単位
f(t):変換前の時間波形
F(ω):角周波数ωにおけるcos成分の大きさ、sin成分の大きさ
2つの関数の内積を取れば類似性が分かる性質を利用する。
類似性がない場合、"0"(直交する)
類似性がある場合、非0
例)"500Hzのsin波の純音(振幅100)"と"250Hzのsin波の純音(振幅50)"の合成波
波形データ
※サンプリング周波数は16000Hz
フーリエ変換後
※DFTのサイズは2の9乗(=512)
indexが0〜19の区間(先頭20個)
今回、16000Hzでサンプリングしたデータに対して、サイズ「512」のDFTを適用したので、
各indexが表す周波数は以下のとおりとなる。
Frequency[Hz] = (16000[Hz] / 512) * index
今回はsin波を使ったので、虚数部分が非ゼロとなっている。
"power spectrum"および"amplitude spectrum"は以下の式で求められ、
power spectrum = (DFT実数部の2乗) + (DFT虚数部の2乗)
amplitude spectrum = power spectrumの平方根
結果は以下のとおりであった。
DFTのプロット図を見ると、indexが「8」と「16」で値が大きくなっており、それぞれ、250 [Hz]と500[Hz]に該当する。
また、"power spectrum"の比率は1:4で、"純音の振幅の2乗の比"(50の2乗:100の2乗)と一致していることが分かる。
同様に、"amplitude spectrum"の比率は1:2で、"純音の振幅の比"(50:100)と一致していることが分かる。
indexが493〜512の区間(末尾から20個)
index「257」以降、周波数の符号は反転し、"負の周波数"となる。
index「256」を軸とした偶関数(コサイン関数など、cos(-x)=cos(x)が成立)となり、
indexが「496」のspectrumは、index「16」の値と一致している。
同様に、indexが「504」のspectrumは、index「8」の値と一致している。