C# C语言中的短时傅里叶变换#

C# C语言中的短时傅里叶变换#,c#,signal-processing,fft,C#,Signal Processing,Fft,我正在编写以下代码,通过Exocortex库()实现stft(),其中“window”是512汉明窗口,“left”是从传入双数组的音频流中得到的左通道,“frames”是我将音频文件分割成的帧数(比如600左右),“offset”变量执行重叠。 我还在Exocortex FFT类中添加了零填充功能: if( data.Length < length ) { for (int k = data.Length; k < length; k++)

我正在编写以下代码,通过Exocortex库()实现stft(),其中“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;
            }
if(数据长度
问题是,对于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;
        }
Exocortex.DSP.ComplexF[]x_frame=new Exocortex.DSP.ComplexF[2048];
整数偏移=0;
对于(int m=0;m
看起来您正在为2048样本FFT填充599个值?我在x_帧的内环中填充前512个值,从0到511。然后,因为512可以在注释完FFT后运行它,并查看只执行窗口和格式化数据需要多长时间?600 2048点FFT应该比7秒快得多。它耗时3毫秒(如果你愿意,大约6800个滴答声)…我看不出我在这里遗漏了什么:/