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

フーリエ変換を用いることで、波形データを純音に分解できる。
結果、波形データの特徴を解析しやすくなる。

フーリエ変換の定義式


\begin{eqnarray}
 F(\omega) &=& \int f(t) \ e^{ -j{\omega}t } dt \\
 &=& \int f(t) \cos({\omega}t) \ dt - j \int f(t) \sin({\omega}t) \ dt
\end{eqnarray}

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

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



f(t) \cdot \cos({\omega}t) \\
f(t) \cdot \sin({\omega}t)

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

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

波形データ

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

フーリエ変換

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

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

f:id:ichou1:20190101094111p:plain

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

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

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

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

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

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

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個)

f:id:ichou1:20190101094140p:plain

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

f:id:ichou1:20181231110737p:plain