第15回(最終回) 音声と秩序(7月21日)


授業評価アンケートのお願い

QRコード 


フォルマントと秩序

 フォルマントの中でも、F1とF2は、母音を区別するために重要な手がかりとなっている。下左図は、日本語の5つの母音のフォルマント周波数(単位はHz)の平均値(25人分)である(書籍「フーリエの冒険」より引用)。下左図は、横軸をF1、縦軸をF2(単位はHz)にとったグラフで、F1-F2ダイアグラムと呼ぶ。男性と女性は、周波数が異なるが、ダイアグラムでは同様な台形の形をしている。このように、同じ「あ」でも人によって周波数は異なるが、同じ人の中で言葉のばらつきから音韻を判断している。

   

 (横軸:F1. 縦軸:F2. 青:男性. 橙:女性)


 「あいうえお」のフォルマントについて、もう少し詳しく見てみよう。下の図は、男性のフォルマント周波数を横軸に周波数にをとった並べ直したグラフである。5母音の秩序は見えてくるだろうか。



 下図では、横軸が周波数の対数をとってプロット(Logプロット)し直したものである。


 このLogプロットで見ると、多少のズレはあるものの、対称性が見えてくる。ここに補助線を入れるとより明確になる。約800 Hz(太線)を中心として、「あ」と「え」は高周波数側に、「う」と「お」は低周波数側に寄っている。また、「あ」と「お」、「え」と「う」が線対称になっている。「い」は、偏りがなく基準(中心)を定める音声であることが見て取れる。また、「い」は両端を決めるので、その人が動かし得るF1とF2の範囲を決めている。


 日本語の5つの母音には、このような対称性が見られる。もし他の言語の母音も同様の条件でできているとするならば、同じルールで3母音や9母音などを作ることができる。



「あ」


入力例1

Clear["Global`*”]

SetDirectory[$UserDocumentsDirectory]

data = Import["20160714_104006.wav”]

datalist = Part[data, 1, 1, 1]

ListLinePlot[datalist, PlotRange -> {{58000 - 44100, 58000}, {-1, 1}}]

voicea = Take[datalist, {58000 - 44100 + 1, 58000}]

ListLinePlot[voicea, PlotRange -> All]

Length[voicea]

ListPlay[voicea, SampleRate -> 44100]

voiceaf = Fourier[voicea]

ListPlot[Abs[voiceaf], PlotRange -> All, Filling -> Axis]

ListLinePlot[Abs[voiceaf], 

 PlotRange -> {{0, 5000}, {0, Max[Abs[voiceaf]]}}]

ListLinePlot[Abs[voiceaf], 

 PlotRange -> {{0, 1500}, {0, Max[Abs[voiceaf]]}}]

ListLinePlot[FindPeaks[Abs[voiceaf], 5],  

 PlotRange -> {{0, 1500}, {0, Max[Abs[voiceaf]]}}]

point0 = Table[0, {100}];

point02 = Table[0, {22050 - 400}];

peak1 = Take[voiceaf, {101, 400}];

peak12 = Take[voiceaf, {44100 - 400 + 1, 44100 - 100}];

voiceafpart = Join[point0, peak1, point02, point02, peak12, point0]

Length[voiceafpart]

ListLinePlot[Abs[voiceafpart], PlotRange -> All]

wavea = Chop[InverseFourier[voiceafpart]]

ListPlay[Abs[wavea], SampleRate -> 44100]

 上図は、ある人の「あ」の波形である。横軸は時間、縦軸は音圧である。入力例1に従って、離散フーリエ変換してみると、次のように周波数分析ができる。


 横軸(周波数)の範囲を拡大して、0~1500 Hzで見てみると、200 Hz付近(198 Hz)に一番大きなピークがある。


 そこで、100~399 Hzまでを取り出して逆離散フーリエ変換してその音声を取り出してみると、この部分だけでも「あ」と聞こえるのがわかる。

課題1 2つ目のピーク(800 Hz付近)だけ取り出すと「あ」と聞こえるだろうか。

700~999 Hzを取り出す。

point03 = Table[0, {700}];

point04 = Table[0, {22050 - 1000}];

peak2 = Take[voiceaf, {701, 1000}];

peak22 = Take[voiceaf, {44100 - 1000 + 1, 44100 - 700}];


 このことから、音声「あ」を構成するのは、最も大きいピーク(100~399 Hz付近)の周波数スペクトルであることがわかる。






ある人の「あいうえお ぃぇ ぁぉ」

 同じ人の違う言葉を比べてみよう。左から、波形(横軸:時間)、フーリエ変換(横軸:周波数)、フーリエ変換の拡大である。なお、「いうえお ぃぇ ぁぉ」は矩形の窓関数をかけている。

「あ」

    

「い」

      

「う」

    

「え」

    

「お」

    

「ぃぇ」

    

「ぁぉ」

    


 同じ人が違う言葉を言っても、ピークが現れる周波数は同じで、周波数成分の比率が違うことがわかる。このピークが現れる周波数が各個人の声の音色というべきものである。


ノイズ


   

 窓関数をかけていない「あ」の波形(横軸:時間)を見てみると、無音部分にも波が現れている(右側の図は、0~20000データまでの拡大)。

このような、本来は必要でない音(波形)をノイズ(noise, 雑音)という。このノイズがどのような波なのか、ノイズの部分だけ取り出して周波数成分(左図。横軸:周波数)を確認してみよう。

もし、ある特定の周波数のみ含んでいる場合などは、マイクの特性など録音におけるノイズであることが多い。


代表的なノイズにホワイトノイズとピンクノイズがある。

ホワイトノイズ(白色雑音)はフーリエ変換するとすべての周波数成分が同じ強度のものである(白色がすべての色(周波数)を含んでいることから付けられている)。下左図は横軸:時間、下右図は横軸:周波数。

  


ピンクノイズは周波数強度が周波数に反比例する雑音のことである。同じ周波数成分の色はピンクである。



ボイスチェンジャー

 最後に、離散フーリエ変換を使って、男性の声を女性の声に、または女性の声を男性に加工してみよう。男性の声は低く(主成分が1000 Hz程度)、女性の声は高い(主成分が2000 Hz程度)ので、周波数スペクトルを平行移動(+1000 Hzまたは-1000 Hz)すれば良いことがわかる。

課題2 周波数スペクトルを切り取り、平行移動させることでボイスチェンジャーを作れ。


おわりに


 これで15回の講義は終わりです。お疲れさまでした。今回学んだMathematica, LaTex, フーリエ級数展開、フーリエ変換などは、習得していれば今後も様々な場面で使える便利なものです。忘れないように、継続的に使うと良いでしょう。


最終レポート課題