ピッチ検出に必要なバッファサイズ [Math]
ピアノの最低音の周波数は27.5Hzとのこと。
( http://d.hatena.ne.jp/session_oyaji/20070520/1179666560 )
これの周期を図れるくらいバッファに貯めると
どんな感じになるのかを scilab で見てみました。
44.1KHz で 4096 個サンプリングすると、
275Hz, 55Hz, 110Hz,... はこんな感じになります。
低い周波数を対象にすると結構長い事サンプリングが必要だなーと。
サンプリング周波数を下げれば良いですが、同時に高い周波数も
対象にしたいですし。悩ましい。
かといってまだ何も実装していないので、4096 このサンプリングが
どれほどの負荷なのか知りませんけど。時間にして 0.1 秒くらいは
サンプリングしないとダメなんですね。
使った scilab のコードは以下。
( http://d.hatena.ne.jp/session_oyaji/20070520/1179666560 )
これの周期を図れるくらいバッファに貯めると
どんな感じになるのかを scilab で見てみました。
44.1KHz で 4096 個サンプリングすると、
275Hz, 55Hz, 110Hz,... はこんな感じになります。
低い周波数を対象にすると結構長い事サンプリングが必要だなーと。
サンプリング周波数を下げれば良いですが、同時に高い周波数も
対象にしたいですし。悩ましい。
かといってまだ何も実装していないので、4096 このサンプリングが
どれほどの負荷なのか知りませんけど。時間にして 0.1 秒くらいは
サンプリングしないとダメなんですね。
使った scilab のコードは以下。
funcprot(0); clear all; ////////////////////////////////////////////////////////////////////// // parameters ////////////////////////////////////////////////////////////////////// sampleNum = 4096; // sample number sampleFreq = 44100; // sampling frequency baseWaveFreq = 27.5;// base wave frequency ////////////////////////////////////////////////////////////////////// // main ////////////////////////////////////////////////////////////////////// // create time-axis ts = [0:sampleNum-1] * 1/sampleFreq; // create sin wave of frequency // 27.5, 55, 110, 220, 440, 880, 1760, 3520 Hz powNum = 4; pows=[0:powNum-1]'; fs=baseWaveFreq*(2^pows); waves = sin(2 * %pi * fs * ts); // plot for i=1:powNum, subplot(int(powNum/2)*100+20+i) plot2d(ts,waves(i,:)); legendtext = sprintf("%f Hz",fs(i)); legends(legendtext,1,"ur"); end
2015-03-15 18:14
nice!(0)
コメント(0)
トラックバック(0)
コメント 0