ブックマーク / mametter.hatenablog.com (2)

  • メジャーな数学関数を自力計算する - まめめも

    三角関数や対数などの近似計算の方法を短い Ruby コードでご紹介。だいたいマクローリン展開です。 子供のころ何気なく sin とか log とか使っていて、ふと「コンピュータはどうやってこの値を計算してるんだろう」と思ったものです。そんな昔の自分に見せてあげたいエントリ。と言っても、今時のコンピュータは FPU 持ってるんでこんな計算してませんが。 なお、ちゃんとテストしてません。 三角関数 0 に近い方が精度高いです。99 とか 98 とかは適当に大きな数字。 def sin(x) r, f = 0, 1 1.step(99, 2) do |i| r += x ** i / f f *= -(i+1)*(i+2) end r end def cos(x) r, f = 0, 1 0.step(98, 2) do |i| r += x ** i / f f *= -(i+1)*(i+2)

    メジャーな数学関数を自力計算する - まめめも
    nulltask
    nulltask 2013/06/24
  • 音声の波形からピッチを検出するアルゴリズム - まめめも

    去年のクリスマスに公開したカラオケ機能つき Quine の仕組みについて。 ref: 声の高さで操作するゲームを作ってみた で解説されている内容と同一です。おわり。 で終わるのもつまらないので、簡単に解説します。でも思いだしながら書いているので嘘書いてたらごめんなさい。動画には図とかあるので、やはりそっち見た方がいいと思うけど。 「ピッチ検出なんて FFT するだけでしょ」と思ってる人は素人で、音叉みたいにきれいな正弦波を測りたいならともかく、声や楽器の音など倍音を含んだ音では誤判定が起きまくるようです。偉そうなこと言ってる私も素人です。そこで、Wikipedia の Pitch detection algorithm で挙げられている、MPM アルゴリズムを調べて実装してみました。以下の論文。 ref: P. McLeod and G. Wyvill. A smarter way to

    音声の波形からピッチを検出するアルゴリズム - まめめも
    nulltask
    nulltask 2012/01/23
  • 1