音声認識メモ(フーリエ変換)

フーリエ変換を用いることで、波形データを純音に分解できる。
結果、波形データの特徴を解析しやすくなる。
音声のみならず、画像処理でも用いられているので、理解しておくと役に立ちそうだ。

フーリエ変換の定義式

f:id:ichou1:20171016202047p:plain

ω:角周波数/角速度[rad/s]
t:時間[s]
j:虚数単位
f(t):変換前の時間波形
F(ω):角周波数ωにおけるcos成分の大きさ、sin成分の大きさ

2つの関数の内積を取れば類似性が分かる性質を利用する。

f(t)・cos(ωt)
f(t)・sin(ωt)

類似性がない場合、"0"(直交する)
類似性がある場合、非0

例)"500Hzのsin波の純音(振幅100)"と"250Hzのsin波の純音(振幅50)"の合成波

波形データ

※サンプリング周波数は16000Hz
f:id:ichou1:20171015113327p:plain

フーリエ変換

※DFTのサイズは2の9乗(=512)
f:id:ichou1:20171015115436p:plain

indexが1〜20の区間(先頭20個)

f:id:ichou1:20171015120103p:plain

今回、16000Hzでサンプリングしたデータに対して、サイズ「512」のDFTを適用したので、
各indexが表す周波数は以下のとおりとなる。

Frequency[Hz] = (16000[Hz] / 512) * index

今回はsin波を使ったので、虚数部分が非ゼロとなっている。
f:id:ichou1:20171123132622p:plain

spectrumおよびamplitudeは以下の式で求められ、

spectrum = (DFT実数部の2乗) + (DFT虚数部の2乗)
amplitude = spectrumの平方根

結果は以下のとおりであった。
f:id:ichou1:20171015132517p:plain

DFTのプロット図を見ると、indexが「8」と「16」で値が大きくなっており、それぞれ、250 [Hz]と500[Hz]に該当する。

また、spectrumの比率は1:4で、"純音の振幅の2乗の比"(50の2乗:100の2乗)と一致していることが分かる。
同様に、amplitudeの比率は1:2で、"純音の振幅の比"(50:100)と一致していることが分かる。

indexが493〜512の区間(末尾から20個)

f:id:ichou1:20171015120259p:plain

index「257」以降、周波数の符号は反転し、"負の周波数"となる。
index「256」を軸とした偶関数(コサイン関数など、cos(-x)=cos(x)が成立)となり、
indexが「496」のspectrumおよびamplitudeは、index「16」の値と一致している。
同様に、indexが「504」のspectrumおよびamplitudeは、index「8」の値と一致している。

f:id:ichou1:20171015132459p:plain