Exocortex ライブラリ ( http://www.exocortex.org/dsp/ )を介して stft ( http://en.wikipedia.org/wiki/Short-time_Fourier_transform ) を実装する次のコードを書いています。 " は 512 ハミング ウィンドウ、"left" は double 配列に渡されたオーディオ ストリームの左チャネル、"frames" はオーディオ ファイルを分割したフレーム数 (約 600) で、"offset" 変数が実行しますオーバーラップ。また、Exocortex FFT クラスにゼロ パディングの機能を追加しました。
if( data.Length < length ) {
for (int k = data.Length; k < length; k++)
{
data[k].Re = 0;
data[k].Im = 0;
}
問題は、frames=600 の場合、このコードが約 7000 ミリ秒実行されることです! ここで何か不足していますか?
Exocortex.DSP.ComplexF[] x_frame = new Exocortex.DSP.ComplexF[2048];
int offset = 0;
for (int m = 0; m < frames-1; m++)
{
for (int i = 0; i < 512; i++)
{
x_frame[i].Re = (float)(left[i + offset] * window[i]);
x_frame[i].Im = 0;
}
Exocortex.DSP.Fourier.FFT(x_frame, 2048, FourierDirection.Forward);
offset += 256;
}