この間の、EXCELで8点FFTを改良して、64点FFT
もできる様に改造。↓
fft_dif_excel_v2.xls
使い方は一緒。s0~s63のデータの実部(実数部)に64個
の数字を入れるだけ。計算も自動、グラフ反映も自動。
デフォルトで入れてある信号は、18.75Hzの方形波。
こんな風に教科書通り。奇数倍音だけ出てくる。スバラシイ。
ノコギリ波を入れれば当然偶数倍音も含めた整数倍音
が並ぶわけ。
後々でアセンブラ用ライブラリを作った時の検証とかにも
使いたいんだけど、その前にエレウケからどんな周波数の
信号を入力したらどんな出力が得られるのかをビジュアルで
眺めたいってことで。
特に周波数分解能の丁度中間付近に落ちた波がどんな風に
ピックアップされるのかを見てみたい…と。
周波数分解能をギリギリまで端折って、かつ正確に
各フレットの音だと同定できるかどうかがエレウケシンセ
の肝なのだ。
で、実際にワークシート上に各フレット毎の周波数を
打ち込んでいってみると…
うん。64点でも大体イイカンジかなぁ…。どれも中心周波数
に最も近いところにピョコッて感じでピークが出てて、
それ以外は落ち込んでいる。よし。
ただ、やっぱり丁度真中辺の周波数の場合、山の頂点が
中心周波数に近い両側2つに跨る感じ。
そうなっちゃう場合に、どのフレットなのかをキチンと
同定できるのか。
128点とか256点にしてしまえば、中心周波数付近の3~4点
くらいをピックアップしてしまえば良いんだけど、
旨い具合にそうなってくれるのかどうかが問題。
あと、アナログ的な音量制御の問題。FFT出力の
実数部と虚数部の平方和の平方根を取った時に、それを
そのまま音量として扱っちゃっていいのか、それとも
何らかの補正を掛けないとフレット毎に音量がばらついて
しまうのか?
もうちょっとこのEXCELシート使って、机上のシミュレーション
やってみたほうがイメージしやすいかな。
遅延時間のことを考えると、やっぱりFFTのサンプル数
は少ないほうが有利だし、分解能を考えれば多いほうが
有利だし。
ADCのサンプリング周波数を例えば1000spsと置くと、
64点分サンプリングが終るまでに0.064秒。これは音速で
考えると約20m先で鳴っている音と同じイメージ。
怪物くんのように手をびろーーーんと伸ばして20m先の
ウクレレを弾いてるのと同じイメージ。
これ以上の遅延は発生したくない。128点なら倍、256点なら
更に倍。そんな怪物くんウクレレはイヤだ。
なんとか64点で済ませてしまう方向で考えたいところ。
ADCのを8chすべて弦のピックアップに充てるとして
こんな感じなんだけど、16chとかそれ以上とか、
もう少しADCチャンネルを増やすことができれば
1chあたりで取り込むフレットの数を減らし、
その分FFTの点数も減らしたりできるんだろうけど、
AVRを大前提に置くと8chだよな…
まずは作ってみてから微調整していくか。
|