Programação DSP em C / C ++

8

Eu tenho exposição ao MATLAB e tenho alguma exposição básica ao processamento e plotagem de sinais no MATLAB ... mas estou mais confortável com C / C ++ que com MATLAB porque tenho trabalhado no processamento de imagens com OpenCV ... Fiquei curioso: É existe alguma biblioteca ou plataforma DSP (como o OpenCV é para processamento de imagens) para realizar o processamento de sinais em C / C ++?

rotating_image
fonte
11
Um exemplo que é inclinado para aplicativos de comunicação sem fio é o GNU Radio .
Jason R
11
Existem muitas bibliotecas FFT no C / C ++. O FFTW é particularmente rápido.
Jim Clay
3
Um problema para obter boas respostas para essa pergunta é que "processamento de sinal" é um termo extremamente amplo que abrange muitos subcampos específicos de domínio. Eu chamaria o OpenCV de uma biblioteca de processamento de sinais, mas isso não o torna útil para alguém que usa o DSP para comunicações, por exemplo. Talvez você possa restringir sua consulta.
Jason R
11
Re: Comentário de @JimClay: FFTW é uma ótima biblioteca. Se você precisar usar o código-fonte C em um projeto, consulte o KissFFT. Não é tão otimizado, mas é muito bom, e como o nome sugere, é bastante simples ler o código-fonte. sourceforge.net/projects/kissfft
Dave C

Respostas:

7

O Octave é um conjunto de ferramentas de matemática e matriz de código aberto de várias plataformas. Ele possui um intérprete de linha de comando com o objetivo de ser muito semelhante ao MATLAB, mas também há uma API C ++ disponível para uso. Como você se refere ao processamento de sinal em contraste com o processamento de imagem, suponho que você queira dizer processamento de áudio; portanto, talvez seja necessário examinar os pacotes "sinal" e "áudio" na oitava (que fornecem, por exemplo, wavread). No entanto, lembre-se de que a API foi projetada principalmente para uso interno na CLI de oitava e é considerada não estável (ou seja, as ligações podem mudar). Além disso, como a biblioteca não se destina a ser vinculada principalmente, a documentação é ruim para dizer o mínimo.

Como alternativa, há também a Biblioteca Científica GNU , que não se destina principalmente ao processamento de sinais, mas fornece números complexos, matrizes, fft e assim por diante. No Windows, você teria que compilar isso usando Cygwin.

Carlo Beltrame
fonte
4

Você já viu o gnuradio ? Eles possuem blocos semelhantes aos usados ​​no processamento de sinais. Quando eu costumava, alguns anos atrás, havia um grande número de blocos que já estavam disponíveis e mais em obras, todos escritos em C ++. Os blocos foram colados usando python, mas uma implementação completa do C ++ estava em andamento.

Karthik V
fonte
2

Eu não o usei, mas ouvi coisas boas sobre o tatu ( http://arma.sourceforge.net/ ) para funcionalidades do tipo matlab. Existem alguns outros semelhantes, mas parece que o tatu é otimizado e desenvolvido ativamente.

Parte do apelo de oitava, matlab ou python / numpy / scipy (às vezes chamado de "pylab") é a sintaxe simples, juntamente com um intérprete interativo com conclusão de tabulação. Isso pode acelerar bastante o desenvolvimento.

Com python / numpy, é possível agrupar uma dll com um wrapper python e usá-lo no intérprete interativo. Acredito que isso também pode ser feito com o matlab, mas não tenho certeza se isso pode ser feito na oitava. Esteja avisado, no entanto, de que isso pode ser um pouco complicado em python / numpy, embora eu tenha achado que os benefícios valiam o custo no passado, quando o desempenho é crítico.

Dave C
fonte
2

O Armadillo faz um ótimo trabalho para álgebra linear em C ++ (bastante rápido por meio de modelos de expressão) e pode certamente ser usado também para o processamento de sinais. Além de suportar matrizes com vários tipos de elementos, possui suporte para tensores de terceira ordem (cubos), que são úteis no processamento de imagens.

Também existe uma biblioteca C ++ relacionada, conhecida como IT ++ , que não é tão rápida quanto o Tatu, mas possui mais classes pré-criadas, voltadas para o processamento e a comunicação de sinais.

mtall
fonte
Atualização: a partir da versão 4.0+, o Armadillo agora tem funções para 1D FFT , 2D FFT e convolução
mtall
0

JUCE é uma boa biblioteca de plataformas de áudio C ++. Você pode criar VSTs com muita facilidade se quiser ter rapidamente um buffer de E / S sendo reproduzido na sua placa de som em que possa trabalhar. Além disso, você pode usá-lo como um VST de plataforma cruzada, se desejar.

oMittens
fonte