离散傅里叶变换 C++ - 下一步做啥?

Posted

技术标签:

【中文标题】离散傅里叶变换 C++ - 下一步做啥?【英文标题】:Discrete Fourier Transform C++ - What to do next?离散傅里叶变换 C++ - 下一步做什么? 【发布时间】:2014-09-12 12:41:34 【问题描述】:

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

如果我在获得结果时做错了什么,请有人能够提供建议。

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

【问题讨论】:

如果你能解释一下这样做的目的会有所帮助,即你想达到什么目的? 抱歉回复晚了,因工作出国了。我将其用作分析软件的一部分,以确定视频在加密/压缩和还原过程后失真的程度。将使用 FFT 绘制图表以进行音频分析 【参考方案1】:

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

幅度可以直接画出来,很有意义。

【讨论】:

以上是关于离散傅里叶变换 C++ - 下一步做啥?的主要内容,如果未能解决你的问题,请参考以下文章

opencv学习笔记第七篇:离散傅里叶变换

opencv之傅里叶变换

傅里叶变换通俗解释及快速傅里叶变换的python实现

离散傅里叶变换及其性质

Python图像处理采样卷积与离散傅里叶变换

理解快速离散傅里叶变换算法(FFT)