2010-01-25 21 views
22

Şu anki C++/Qt projem için bir sinyalden (temel olarak bir çiftler dizisi) bir spektrogram hesaplayabilen bir kütüphaneye (LGPL tercih edilir) ihtiyacım var. GUI bölümü için zaten Qwt kullanıyorum.Spectrogram C++ kütüphanesi

Herhangi bir öneriniz var mı? Teşekkürler.

+0

LGPL FFTW kütüphanelerinin GPL versiyonundan alternatif lisans altında kullanılabileceğini biliyorum. – petantik

+0

sourceforge sitesinde "dijital sinyal işleme" hakkında bir şeyler bulmaya çalışın. Bu sitede AFAIK bazı kütüphanelerdi .. – cybevnm

+0

@gregseth, Bu projeyi bitirdiniz mi? Aynı projeyi yapmalı ve bir çiftler dizisinden bir spektrogram hesaplamalıyım. Nasıl başlayacağımı bilmiyorum. Bana biraz ipucu verebilir misin? Merci – Jack

cevap

16

Birlikte Kendi spektrogramını koymak oldukça kolay olacaktır.

  1. pencere fonksiyonu (oldukça önemsiz, örn Hanning)
  2. FFT (FFTW iyi bir seçim olurdu ama lisans ise bir sorunu daha sonra Öpücük FFT veya benzeri için gidin)
  3. : adımlardır
  4. hesaplamak günlük büyüklüğü frekans bileşenlerinin (önemsiz: log (sqrt (yeniden * yeniden + im * im))
+1

Günlük (sqrt (x)) = (1/2) log (x) olduğundan, sqrt() – DarenW

+0

@DarenW olmadan gerçekten daha hızlı çalışmasını sağlayabilirsiniz - aslında - dB ile çalışmak yerine 20 yapmak yerine * log10 (sqrt (x)) sadece 10 * log10 (x) yapabiliriz. –

1

sen FFTW (fftw.org) spektrogramını hesaplamak için kullanabilirsiniz, hala verileri çizmek gerekir, ama bu sorunu olmamalı

10

"How do I create a frequency vs time plot?", her biri bir sinyalden bir spektrogram hesaplayabilen çeşitli kütüphaneleri listeler.

kopyalanan ve kendi cevap yapıştırılan:

Bazı kaynak kodu ses verilerden spectrograms/waterfall plots oluşturmak için:

Image to Spectrogram yukarıdaki programlar ters yöndedir.

1

FFT kodunu here'dan kullanabilirsiniz. Verimlilik için C++ şablon metaprogramlama kullanır. Tam kaynak yazar here tarafından sağlanmaktadır.

Bu kodu templated (type friendly) kodunu kullanmak için Eigen'e eklemek suggested idi. Kaynak kodunu serbest bırakmak istemediğiniz için LGPL