今日は音声認識をやっちゃうゾと
そんなわけで、ある音を認識するプログラムを書かなければならなくなった。まあ、たいしたものではないのでこんなもんはFFTでもかけておけばヨロシイのである。
フーリエ変換の場合は領域境界の影響で高調波が出るので、求めたい領域の近傍に大きな重みをかけたフーリエ変換を行なう方法がある。これをウィンドゥフーリエ変換と呼ぶ。式で書くとこんなのか。
+∞
∫ f(x) w(x-ξ) exp(-j2πux) dx
-∞
でもって、w(x-ξ)がウィンドゥ関数で、これを正規分布としたとき、この変換をガボア変換(Gabor transform)と呼ぶ。*1
と、まあ、これを頼りにしてるバイト君に「1時間ほどで書いてよ」と頼んだところ、「ガボア変換って何ですか?」とか聞かれてガクーンとなった。
まあ、そもそもプログラミングってプログラミング言語そのものは早い人なら2,3日、遅い人でも1週間ぐらい触っていればわかるのであって、何か現実的にモノを作っていこうとすると、プログラム言語以外の知識が必要になる。「プログラミング言語の本をたくさん読んだけどいまだプログラムが書けるようにならない」と言う人が居るけど、そういう人は、こういった知識が不足しているからではないだろうかと思う。
そんなわけで、次の「番外編:アルゴリズム」のところを読まれたし。このページはメーリングリストのバックナンバーらしいが、うまくまとまっている。
http://mukun_mmg.at.infoseek.co.jp/mmg/cpp.html
いっぱしのプログラマならばこれくらいは全部知っていて当然というような数値計算の基礎が書いてある。(情報系の大学ならば大学1年か2年で行なう数値解析の実習で行なう程度の内容だ。)