我正在编写以下代码,通过 Exocortex 库 ( http://www.exocortex.org/dsp/ ) 实现 stft ( http://en.wikipedia.org/wiki/Short-time_Fourier_transform ) ,其中“window " 是一个 512 汉明窗口,"left" 是来自传递到双数组的音频流的左声道,"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;
}