2010-01-25 79 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中,用於使用模板化(類型友好)代碼。