Pemrograman DSP dalam C / C ++

8

Saya memiliki eksposur ke MATLAB dan memiliki beberapa eksposur dasar untuk pemrosesan sinyal dan merencanakan di MATLAB ... tapi saya lebih nyaman dengan C / C ++ daripada MATLAB karena saya telah bekerja dalam pemrosesan gambar dengan OpenCV ... Saya hanya ingin tahu: Apakah ada perpustakaan atau platform DSP (seperti OpenCV untuk pemrosesan gambar) untuk melakukan pemrosesan sinyal di C / C ++?

rotating_image
sumber
1
Salah satu contoh yang condong ke arah aplikasi komunikasi nirkabel adalah GNU Radio .
Jason R
1
Ada banyak pustaka FFT di C / C ++. FFTW sangat cepat.
Jim Clay
3
Satu masalah dengan mendapatkan jawaban yang baik untuk pertanyaan ini adalah bahwa "pemrosesan sinyal" adalah istilah yang sangat luas yang mencakup banyak sub-bidang khusus domain. Saya akan menyebut OpenCV pustaka pemrosesan sinyal, tetapi itu tidak membuatnya berguna bagi seseorang yang menggunakan DSP untuk komunikasi, misalnya. Mungkin Anda bisa mempersempit kueri Anda.
Jason R
1
Re: @JimClay komentar: FFTW adalah perpustakaan yang hebat. Jika Anda perlu menggunakan kode sumber-C dalam suatu proyek, Anda mungkin ingin memeriksa KissFFT. Ini tidak dioptimalkan dengan baik, tetapi cukup bagus, dan seperti namanya mungkin agak mudah untuk membaca kode sumber. sourceforge.net/projects/kissfft
Dave C

Jawaban:

7

Octave adalah matematika open source multi-platform dan toolkit matriks. Ini memiliki interpreter baris perintah yang bertujuan sangat mirip dengan MATLAB, tetapi ada juga API C ++ yang tersedia untuk digunakan. Karena Anda merujuk pada pemrosesan sinyal yang berbeda dengan pemrosesan gambar, saya anggap Anda maksud pemrosesan audio, jadi Anda mungkin perlu melihat paket "sinyal" dan "audio" dalam oktaf (yang menyediakan mis. Wavread). Namun perlu diingat, bahwa API terutama dirancang untuk penggunaan internal dalam CLI oktaf, dan itu dianggap tidak stabil (yaitu binding mungkin berubah). Juga, karena perpustakaan tidak dimaksudkan untuk dihubungkan, dokumentasinya buruk untuk sedikitnya.

Atau, ada juga Perpustakaan Ilmiah GNU , yang tidak terutama ditujukan untuk pemrosesan sinyal, tetapi menyediakan bilangan kompleks, matriks, fft dan sebagainya. Di Windows, Anda harus mengompilasinya sendiri menggunakan Cygwin.

Carlo Beltrame
sumber
4

Sudahkah Anda memeriksa gnuradio ? Mereka memiliki blok yang mirip dengan apa yang digunakan dalam pemrosesan sinyal. Ketika saya menggunakan beberapa tahun yang lalu, ada sejumlah besar blok yang sudah tersedia dan lebih banyak dalam karya, semua ditulis dalam C ++. Blok-blok itu dilem bersama-sama menggunakan python, tetapi implementasi C ++ lengkap sedang dalam pengerjaan.

Karthik V
sumber
2

Saya belum menggunakannya, tetapi telah mendengar hal-hal baik tentang armadillo ( http://arma.sourceforge.net/ ) untuk fungsi seperti matlab. Ada beberapa yang lain menyukainya, tetapi tampaknya armadillo dioptimalkan dan dikembangkan secara aktif.

Bagian dari daya tarik oktaf, matlab, atau python / numpy / scipy (kadang-kadang disebut "pylab") adalah sintaks sederhana bersama dengan interpreter interaktif dengan penyelesaian tab. Ini bisa mempercepat pengembangan sedikit.

Dengan python / numpy, dimungkinkan untuk membungkus dll dengan pembungkus python, dan menggunakannya dari dalam interpreter interaktif. Saya percaya ini juga bisa dilakukan dengan matlab, tapi saya tidak yakin apakah ini bisa dilakukan dalam oktaf. Berhati-hatilah, bagaimanapun, bahwa ini bisa sedikit rumit di python / numpy meskipun saya telah menemukan manfaat yang sepadan dengan biaya di masa lalu ketika kinerja sangat penting.

Dave C
sumber
2

Armadillo melakukan pekerjaan yang bagus untuk aljabar linier dalam C ++ (cukup cepat melalui templat ekspresi), dan tentunya dapat digunakan untuk pemrosesan sinyal juga. Selain mendukung matriks dengan berbagai jenis elemen, ia memiliki dukungan untuk tensor orde 3 (kubus), yang berguna dalam pemrosesan gambar.

Ada juga pustaka C ++ terkait yang dikenal sebagai IT ++ , yang tidak secepat Armadillo, tetapi memiliki lebih banyak kelas pra-bangun yang diarahkan pada pemrosesan sinyal dan komunikasi.

mtall
sumber
Pembaruan: pada versi 4.0+, Armadillo sekarang memiliki fungsi untuk 1D FFT , 2D FFT , dan konvolusi
mtall
0

JUCE adalah pustaka platform audio C ++ yang bagus. Anda dapat membuat VST dengan mudah di dalamnya jika Anda ingin dengan cepat memiliki buffer I / O yang diputar ke kartu suara yang dapat Anda kerjakan. Plus setelahnya Anda dapat menggunakannya sebagai cross platform VST jika Anda mau.

oMittens
sumber