离散傅里叶变换C ++ - 接下来该怎么做?

时间:2014-09-12 12:41:34

标签: c++ audio fft fftw

我正在使用fftw库对我从视频录制中收到的音频信号执行DFT。

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

但是,现在我不确定如何处理复数数组以及如何将其绘制成图形。

请有人可以告知接下来该做什么,这里有一个前/后数据的例子......

(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 个答案:

答案 0 :(得分:1)

对于几乎所有目的,接下来要做的就是获取每个复数值的大小。傅里叶域中的相位信息是时域中(小)时移的结果,并且通常无关紧要。如果您更改相位信息并将其转换回时域,它仍然听起来是一样的。

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