2014-09-12 141 views
0

我正在使用fftw库对从视频录制中收到的音频信号执行DFT。离散傅里叶变换C++ - 下一步做什么?

这是我第一次使用这种数学和分析信号,但我相信我已经从计算后的数据中得到了正确的值。

但是,现在我不确定如何处理复数数组以及如何将它绘制到图中。

请会有人建议对下一步该怎么做,这里是之前的一个例子/数据后...

(in, out(real;im)) 
(-12190,   (real:-3103; im:0)) 
(-16316,   (real:-3108.465666587691;  im:49.512823501357843)) 
(-10005,   (real:-3096.7767811251124; im:99.645004992013128)) 
(first 3 from a sample of 512) 

而且,这里是我使用来获得这些结果的代码...

int n = 512; 

    double in[512]; 
    fftw_complex out[512]; 
    fftw_plan p; 

    ifstream rFile ("audioswap.csv"); 
    string line; 

    if (rFile.is_open()) 
    { 
     for (int i = 0; i < n; i++) 
     { 
      if (getline (rFile, line)) 
      { 
       in[i] = ::atof(line.c_str()); 
      } 
      else 
      { 
       break; 
      } 
     } 
    } 

    p = fftw_plan_dft_r2c_1d(n, in, out, FFTW_ESTIMATE); 

    fftw_execute(p); 

    fftw_destroy_plan(p); 

如果我在获取结果时做了任何错误,请有人能够提供建议。

在此先感谢任何帮助! :)

+1

如果你解释了这个目的,这将有所帮助,即你想达到什么目的? – 2014-09-12 12:43:40

+0

对不起,迟到了,已经出国工作了。我将其用作分析软件的一部分,以确定加密/压缩和恢复过程后视频失真的程度。将使用FFT绘制音频分析图 – bd99 2014-09-23 12:26:35

回答

1

几乎所有的目的,你要做的下一件事是取每个复杂值的大小。傅立叶域中的相位信息是时域中(小)时移的结果,通常这并不重要。如果您更改相位信息并将其转换回时域,它仍然听起来相同。

幅度可以直接绘制出来,这是有意义的。