三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理』を勝手に手習ひさせていただいておりますが、今回ついに「応用編」に突入。最初の課題は母音の音声合成器ぞなもし。多少は背景知識も取得すべく、今回はマイコン上での実習は無し。代わりにScilab使って波形を観察してみます。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
今回の実習の背景となりそうな三上先生の論文をひとつ見つけました。1979年の論文であります。多分探せばもっと見つかるかもしれません。ご本にはさらっと書かれているけれども、長年の御研究の成果なのね。
発声時声道伝達特性の簡易推定法 三上他 北海道大学工学部研究報告 第96号
勝手に手習ひさせていただいております教科書の方は「さらっと」10ページちょいとで、原理からSTM32F446上での実装までたどりつきます。それでも私メにしたら、一気に「手習ひ」するにはチト分量が多いです。3,4回くらいに自主的に分割させていただくかと考えとります。随分ゆっくり。今年は始まったばかりですが、そんなペースでは今年中に手習ひ終わらないんじゃないか?
さて、今回の「母音合成器」の概略構成は以下のようです。
声帯で発生する音声を模擬する近似声帯波を、異なる共振周波数と帯域幅をもった共振器(フォルマント周波数を模擬)段に通し、最後、口からの放射に対応する高域強調器を通じて放出する、と。一直線の構造ではありますが、知らない事もおおあり。だいたい Rosenberg波とは何もの!!
Scilab使ってRosenberg波を観察
さて、「Rosenberg波」と言われると、なんだか分からずへなへなと気持ちが折れてしまいます。実際の波形を眺めるにしかず。それに使用してみたのは、Scilabであります。今後のデジタル信号処理系ネタではScilab使っていこうと決めました。どう使って良いのか、使い方はほとんど忘却の彼方なんでありますが、なんといっても無料。使用させていただくバージョンは以下です。
Rosenberg波については三上先生の教科書に式が書かれているので、それをScilabで書くことは大したことではありません。しかしね、以下のスクリプト、for文使っていて汚いです。この手の言語であれば、ベクトルの各要素に任意の関数を適用するような関数で一発、というのがあるべき姿かと思いました。
「あるべき姿」をちょっと調べてみたのですが、見つからなかったので、直ぐに諦めてforで回してしまいました。根性無。また、グラフの線を太く強調したかったのですが、方法が良く分かりませぬ。しかたが無いので、グラフィックハンドルを階層毎に調べていって、対応しそうなプロパティを見つけて書き換えました。お陰で、これまた汚いです。ローゼンベルク波を描くScilabコード(汚い)がこちら。
上記のプログラムで、テキトーなt1, t2の値に対して描いた、A=1のRosenberg波1周期のグラフがこちら。
ぶっちゃけね、ちょっと鈍った感じの「三角波?」みたいです。Rosenberg波とかいって脅かしてくれるじゃないか。
三上先生の教科書に載っているパラメータ t1=04, t2=0.16で描いた波形は冒頭のアイキャッチ画像に。
お次は共振器か。