So-net無料ブログ作成
検索選択

ピッチ検出に必要なバッファサイズ [Math]

ピアノの最低音の周波数は27.5Hzとのこと。
( http://d.hatena.ne.jp/session_oyaji/20070520/1179666560 )
これの周期を図れるくらいバッファに貯めると
どんな感じになるのかを scilab で見てみました。

44.1KHz で 4096 個サンプリングすると、
275Hz, 55Hz, 110Hz,... はこんな感じになります。

低い周波数を対象にすると結構長い事サンプリングが必要だなーと。
サンプリング周波数を下げれば良いですが、同時に高い周波数も
対象にしたいですし。悩ましい。
かといってまだ何も実装していないので、4096 このサンプリングが
どれほどの負荷なのか知りませんけど。時間にして 0.1 秒くらいは
サンプリングしないとダメなんですね。

harmonics.png

使った 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


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。