« 「こんにゃくえんま」と「塩地蔵」(源覚寺 東京都文京区小石川) | トップページ | 「死神の浮力」伊坂幸太郎 »

2014.03.27

javascriptでフーリエ変換できました

漠然とした知識はあるが、実際のところどうなってんの?というモノの代表格として名高いのが「フーリエ変換」(自分的に)。

フーリエ変換って、知ったかぶりして狭い視点で説明してみますと、「(複雑な)入力波形を、複数の単純な波形に分解する」ってことかと。いろんな周波数(と振幅)の合成波を、複数のキレイなサイン波に分解するということ。高校生の頃、「そんな魔法みたいなことが出来るのかー」と感動したのを思い出しますが、そのまま大人になってしまったのが心残りの45歳。

しかし、インターネッツに聞いてみても、とてつもなくムツカシイ説明に頭がクラクラするばかり。フーリエ変換-Wikipedia。しかも、これで「説明が不十分」とか書かれているので勘弁して欲しい。

というところで、たまたま、見つけたのが、「プログラムの国のフーリエ変換 - nursの日記」。プログラムが示されているからか、うまく理解できました。今まで「高速フーリエ展開(FFT)」の説明を先に読んで、「ワケがわからん」と思っていましたが、基本は「離散フーリエ展開(DFT)」なんですね。

示されているC++のソースをjavascriptに書き直して、手元のブラウザで試してみましたら、それなりに速くてオドロイタ。最近のブラウザ(javascript)は速いですね。

function dft(
	a	// [入力] 実数数値列としての信号
	)
{
	var Re = [];// [出力] 実数部
	var Im = [];// [出力] 虚数部
	// dft
	var N = a.length;
	for( var j=0; j<N; ++j )
	{
		var Re_sum = 0.0;
		var Im_sum = 0.0;
		for( var i=0; i<N; ++i )
		{
			var tht = 2*Math.PI/N * j * i;
			Re_sum += a[i] *Math.cos( tht );
			Im_sum += a[i] *Math.sin( tht );
		}// i
		Re.push( Re_sum );
		Im.push( Im_sum );
	}// j
	return {'Re':Re, 'Im':Im};
}

なにより長年の謎が解けてうれしいです。次はFFTしてみます。楽しいなー。

« 「こんにゃくえんま」と「塩地蔵」(源覚寺 東京都文京区小石川) | トップページ | 「死神の浮力」伊坂幸太郎 »

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: javascriptでフーリエ変換できました:

« 「こんにゃくえんま」と「塩地蔵」(源覚寺 東京都文京区小石川) | トップページ | 「死神の浮力」伊坂幸太郎 »

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント