C#中的短时傅里叶变换

时间:2013-10-08 13:46:30

标签: c# signal-processing fft

我正在编写以下代码,通过Exocortex库(http://en.wikipedia.org/wiki/Short-time_Fourier_transform)实现stft(http://www.exocortex.org/dsp/),其中“window”是512 Hamming窗口,“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;
            }

问题是,对于帧= 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;
        }

0 个答案:

没有答案