离散傅立叶变换C++-下一步要做什么

Discrete Fourier Transform C++ - What to do next?

本文关键字:什么 下一步 C++- 傅立叶 变换      更新时间:2023-10-16

我正在使用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);

如果我在得到结果时做错了什么,请有人能给我建议。

提前感谢任何帮助!!:)

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

震级可以直接绘制出来,这很有意义。