RSS Twitter Facebook

2012/01/15 (2012年01月 のアーカイブ)

Curve Fitting

下の表はClavia NordのADSRのMIDI CC値(0~127)に対する時間(sec)の対応表という事で、所々妙に綺麗な整数値があったりオリジナルもテーブルか何かを引いてる感じではあるんですが、これをどうやって数式表現するか、なんていう話題がKVRフォーラムにあって楽しそうなのでちょっと参加してみたり。

00.000510.000620.000730.000940.001150.001360.001570.0018
80.002190.0025100.003110.0035120.004130.0047140.0055150.0063
160.0073170.0084180.0097190.0111200.0127210.0145220.0165230.0187
240.0212250.024260.027270.0306280.0344290.0387300.0434310.0486
320.0543330.0606340.0676350.0752360.0836370.0928380.103390.114
400.126410.139420.153430.169440.186450.204460.224470.246
480.269490.295500.322510.352520.384530.419540.456550.496
560.54570.586580.636590.69600.748610.81620.876630.947
641.02651.1661.19671.28681.38691.49701.6711.72
721.85731.99742.13752.28762.45772.62782.81793
803.21813.43823.66833.91844.17854.45864.74875.05
885.37895.72906.08916.47926.87937.3947.75958.22
968.72979.25989.89910.41001110111.610212.310313
10413.810514.610615.410716.210817.110918.111019.111120.1
11221.211322.411423.511524.811626.111727.511828.911930.4
1203212133.612235.312337.112438.912540.912642.912745

n次多項式でフィッティングしようとすると平均誤差はともかく、変にリップルが出ちゃうのがまずいよね。 やっぱり指数ベースかなと思うけど、指数カープそのままだとはまらないんで、

Y=0.0000858532076498 *exp(1.17006541390366 * sqrt(X))+0.00041414

こんな感じでどうかなていうのがとりあえずの回答。それほど厳密には追い込んでないですけど。

なんて事をやってるとhttp://zunzun.comというサイトを紹介してくれた人がいました。このサイトは「Online Curve Fitting and Surface Fitting Web Site」という名前で、曲線や曲面のポイントデータを突っ込むと回帰分析して係数を出してくれるというサイトです。

でその出力されるレポートがやたらと詳細で各種言語のソースコードまで付いているPDFというご丁寧さ。ちょっとびっくりした。ちなみに上のデータを突っ込んで5次多項式でフィッティングした時のレポートがこれ。

20120115curvefitting.pdf

n次多項式だけじゃなくてカーブの自由度も高く、エクスポネンシャルだろうがシグモイドだろうがなんでもこいな感じ。さらに誤差のウエイト付けも可能。これはすごい。覚えておいて損はないサイト。

まあたまにしか使わないから必要になった時にこのサイトの事を思い出せるかどうかが問題なんだけどね。

Posted by g200kg : 2012/01/15 00:04:42