2023-07-20
#js 
DFFT、Data Free Flow with Trustを見て、高専生的に思い起こすのはDFT(Discrete Fourier Transform、離散フーリエ変換)や、FFT(Fast Fourier Transform、高速フーリエ変換)ですね。FFTはサンプル数を2の乗数に限定し高速に計算する方法ですが、基本に忠実な低速変換をJavaScriptで実装してみました。


「DFT 離散フーリエ変換 / 逆離散フーリエ変換 in JavaScript」
src on GitHub
シンプルなサイン波を離散フーリエ変換すると周波数と位相を表す複素数列になります。逆変換すると元の波形に戻せます。これを応用したのが音声圧縮。こんなシンプルなプログラムでできてしまうのが、おもしろい!(参考、離散フーリエ変換(DFT)の仕組みを完全に理解する - Qiitaexport const dft = (data) => { const len = data.length; const re = new Array(len); const im = new Array(len); for (let i = 0; i < len; i++) { let re1 = 0; let im1 = 0; for (let j = 0; j < len; j++) { const th = 2 * Math.PI * i * j / len; const d = data[j]; re1 += d * Math.cos(th); im1 += -d * Math.sin(th); } re[i] = re1; im[i] = im1; } return [re, im]; };


波は2つ重ね合わせられるようにしてあります。スライダー、周波数、位相、振幅の順に2セット並んでいます。いろいろといじってDFTを楽しんでみましょう!

links
- 踏切の音はファ? 絶対音感ツール - FFTで音階を可視化する
- 音とプログラミングで遊ぼう、ブラウザ上でリアルタイム高速フーリエ変換、FFT!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS