【问题标题】:Spectrogram C++ library [closed]频谱图 C++ 库 [关闭]
【发布时间】:2011-01-09 04:07:08
【问题描述】:

对于我当前的 C++/Qt 项目,我需要一个库(首选 LGPL),它可以从信号(基本上是双精度数组)计算频谱图。我已经将 Qwt 用于 GUI 部分。

有什么建议吗? 谢谢。

【问题讨论】:

  • LGPL 因为你不想发布源代码?我知道 FFTW 库可以在 GPL 版本之外的替代许可下使用。
  • 尝试在 sourceforge 网站上搜索有关“数字信号处理”的内容。该网站上的 AFAIK 是一些图书馆..
  • @gregseth,你完成这个项目了吗?我必须做同样的项目并从一个双精度数组中计算一个频谱图。我不知道如何开始。你能给我一些提示吗?谢谢
  • OpenCv 是非常好的库。

标签: c++ fft scientific-computing spectrum spectrogram


【解决方案1】:

您可以使用来自here 的 FFT 代码。它使用 C++ 模板元编程来提高效率。完整源码由作者here提供。

suggested 将此代码包含到 Eigen 中,因为它使用了模板化(类型友好)代码。

【讨论】:

    【解决方案2】:

    "How do I create a frequency vs time plot?" 列出了几个库,每个库都可以根据信号计算频谱图。

    从我自己的答案复制并粘贴:

    一些从音频数据生成spectrograms/waterfall plots的源代码:

    Image to Spectrogram 与上述实用程序相反。

    【讨论】:

      【解决方案3】:

      您可以使用 fftw (fftw.org) 来计算频谱图,您仍然需要绘制数据,但这应该不是问题

      【讨论】:

        【解决方案4】:

        把你自己的频谱图放在一起是相当容易的。步骤是:

        1. 窗口函数(相当简单, 例如汉宁)
        2. FFT(FFTW 将是 一个不错的选择,但如果许可是 问题然后去Kiss FFT或 类似)
        3. 计算对数幅度 频域分量 (琐碎:log(sqrt(re * re + im * 我))

        【讨论】:

        • 由于log(sqrt(x)) = (1/2)log(x),不用sqrt()也可以让它跑得更快
        • @DarenW -- 实际上 -- 因为我们通常使用 dB,所以我们可以只做 10*log10(x) 而不是做 20*log10(sqrt(x))。
        • @PaulR,您能否再解释一下,然后我应该如何绘制这些数据?我的意思是我已经按照你的步骤,但现在我被卡住了?我如何绘制这些数据?我知道频谱图在 Y 轴上有频率,在 X 轴上有时间,幅度由颜色的强度显示,但是在第 3 步之后如何绘制它。
        • @KhubaibAhmad:答案取决于您使用的任何操作系统、编程语言和图形 API。但基本上你只需要一个合适的调色板,然后将你的大小映射到调色板中的索引。
        猜你喜欢
        • 2012-09-18
        • 1970-01-01
        • 2014-03-19
        • 2010-10-02
        • 2021-03-25
        • 2017-09-08
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        相关资源
        最近更新 更多