2010-01-25 193 views
22

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

有什么建议吗? 谢谢。

+0

LGPL因为你不想发布源代码? 我知道FFTW库可以在GPL版本以外的其他许可证下使用。 – petantik 2010-01-25 16:56:13

+0

尝试在sourceforge网站上搜索关于“数字信号处理”的内容。该网站上的AFAIK是一些图书馆.. – cybevnm 2010-01-26 10:05:24

+0

@gregseth,你完成了这个项目吗?我必须做同样的项目,并从双打数组中计算谱图。我不知道如何开始。你能给我一些提示吗? Merci – Jack 2015-08-14 13:17:10

回答

16

这将是相当容易的整理了一下自己谱图。步骤如下:

  1. 窗函数(相当琐碎, 如汉宁)
  2. FFT(FFTW会 一个不错的选择,但如果授权是一个 问题,然后去亲吻FFT或 类似)
  3. 计算数幅值的频域分量的 (琐碎:日志(SQRT(重新*重新+ IM * IM))
+1

因为log(sqrt(x))=(1/2)log(x),所以你可以让它运行得更快,不需要sqrt() – DarenW 2010-02-11 04:26:53

+0

@DarenW - 的确 - 因为我们通常使用dB来代替20 * log10(sqrt(x))我们可以做10 * log10(x)。 – 2010-02-11 10:21:12

1

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

10

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

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

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

Image to Spectrogram进去从上述用途方向相反。

1

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

这是suggested将此代码包含在Eigen中,用于使用模板化(类型友好)代码。