Programmazione DSP in C / C ++


8

Ho un'esposizione a MATLAB e un'esposizione di base all'elaborazione e alla stampa del segnale in MATLAB ... ma mi sento più a mio agio con C / C ++ rispetto a MATLAB perché ho lavorato nell'elaborazione di immagini con OpenCV ... Ero solo curioso: è esiste qualche libreria o piattaforma DSP (come OpenCV è per l'elaborazione delle immagini) per eseguire l'elaborazione del segnale in C / C ++?


1
Un esempio che è inclinato verso le applicazioni di comunicazione wireless è la GNU Radio .
Jason R,

1
Ci sono molte librerie FFT in C / C ++. FFTW è particolarmente veloce.
Jim Clay,

3
Un problema con ottenere buone risposte a questa domanda è che "elaborazione del segnale" è un termine estremamente ampio che comprende molti sottocampi specifici del dominio. Definirei OpenCV una libreria di elaborazione del segnale, ma ciò non lo rende utile a qualcuno che utilizza DSP per le comunicazioni, ad esempio. Forse potresti restringere la tua domanda.
Jason R,

1
Ri: Commento di @JimClay: FFTW è un'ottima libreria. Se devi usare il codice C-source in un progetto, potresti voler dare un'occhiata a KissFFT. Non è altrettanto ottimizzato, ma è abbastanza buono e, come potrebbe suggerire il nome, è piuttosto semplice leggere il codice sorgente. sourceforge.net/projects/kissfft
Dave C

Risposte:


7

Octave è un toolkit di matematica e matrice open source multipiattaforma. Ha un interprete da riga di comando che mira ad essere molto simile a MATLAB, ma è disponibile anche un'API C ++ . Dato che ti riferisci all'elaborazione del segnale in contrasto con l'elaborazione dell'immagine, presumo che tu intenda l'elaborazione audio, quindi potresti aver bisogno di esaminare i pacchetti "segnale" e "audio" in ottava (che forniscono ad esempio wavread). Tieni presente, tuttavia, che l'API è progettata principalmente per l'uso interno nella CLI di ottava e che è considerata non stabile (vale a dire che i collegamenti potrebbero cambiare). Inoltre, poiché la biblioteca non è principalmente pensata per essere collegata, la documentazione è a dir poco scarsa.

In alternativa, c'è anche GNU Scientific Library , che non è principalmente finalizzata all'elaborazione del segnale, ma fornisce numeri complessi, matrici, fft e così via. Su Windows, dovresti compilarlo tu stesso usando Cygwin.


4

Hai controllato gnuradio ? Hanno blocchi simili a quelli utilizzati nell'elaborazione del segnale. Quando lo usavo qualche anno fa, c'erano già molti blocchi già disponibili e altri nei lavori, tutti scritti in C ++. I blocchi sono stati incollati insieme usando Python, ma un'implementazione C ++ completa era in lavorazione.



2

Non l'ho usato, ma ho sentito cose positive su armadillo ( http://arma.sourceforge.net/ ) per funzionalità simili a matlab. Ce ne sono alcuni altri simili, ma sembra che l'armadillo sia ottimizzato e sviluppato attivamente.

Parte del fascino di ottava, matlab o python / numpy / scipy (a volte chiamato "pylab") è la semplice sintassi insieme a un interprete interattivo con completamenti di tabulazioni. Questo può accelerare un po 'lo sviluppo.

Con python / numpy, è possibile racchiudere una dll con un wrapper python e usarla dall'interprete interattivo. Credo che ciò possa essere fatto anche con Matlab, ma non sono sicuro che ciò possa avvenire in ottava. Tieni presente, tuttavia, che questo può essere leggermente complicato in python / numpy, anche se ho scoperto che i vantaggi valgono il costo in passato quando le prestazioni sono fondamentali.


2

Armadillo fa un ottimo lavoro per l'algebra lineare in C ++ (abbastanza veloce tramite modelli di espressioni), e può certamente essere usato anche per l'elaborazione del segnale. Oltre a supportare matrici con vari tipi di elementi, ha il supporto per tensori (cubi) del 3 ° ordine, che sono utili nell'elaborazione delle immagini.

Esiste anche una libreria C ++ correlata nota come IT ++ , che non è veloce come Armadillo, ma ha più classi predefinite orientate all'elaborazione e alla comunicazione del segnale.


Aggiornamento: dalla versione 4.0+, Armadillo ora ha funzioni per 1D FFT , 2D FFT e convoluzione
mtall

0

JUCE è una bella libreria di piattaforme audio C ++. Puoi rendere VST abbastanza facilmente al suo interno se vuoi avere rapidamente un buffer I / O in riproduzione sulla tua scheda audio su cui puoi lavorare. Inoltre, puoi utilizzarlo come VST multipiattaforma, se lo desideri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.