Bibliotecas Ansi C otimizadas para DSP


8

Eu sou novo no DSP? Onde está um bom recurso para algoritmos DSP de código aberto?

O MATLAB é ótimo em criar protos, mas quando passamos para a codificação C, leva tempo e acabamos cometendo muitos erros. Eu acho que deve haver bons repositórios de códigos C para várias implementações de filtros etc. Qualquer ponteiro seria bom.


11
Você definitivamente precisa trazer um pouco de foco e elaboração na sua pergunta. Você está realmente preocupado com a velocidade de execução ou criação de software independente? qual é o escopo (aplicativo) e o destino? Você está tentando comparar Matlab x C x xyz? ou você realmente se decidiu em C e precisa de recursos lá? Any pointers are good- geralmente é um sinal de falta de pesquisas anteriores da sua parte.
Dipan Mehta

Respostas:


4

Parte 1: Em relação à comparação:

Não há uma resposta geral ótima para o que é uma alternativa mais rápida ao Matlab. Tudo depende da plataforma que você usa.

@ Hilmar asnwer indicando recursos como SIMD - que são possíveis em C. Mas exigiria suporte à linguagem de montagem junto com C.

Aqui está uma comparação mais ampla:

  1. Se você estiver trabalhando em uma computação de uso geral (como x86 ou PPC), acho que não há nada melhor (e mais rápido) que C.

  2. Se você estiver trabalhando em hardware DSP especializado (ou plataforma incorporada como ARM), o assembly nativo estará muito à frente e C poderá não ser páreo para ele. (Embora C possa ser o equilíbrio certo entre criar software flexível e velocidade de execução.

  3. Se você estiver comparando C com C ++, diferentemente da percepção geral - o C ++ pode ser otimizado na maioria dos contextos, com alguns dos melhores recursos de programação.

  4. Para outras ferramentas úteis - você pode consultar outras ferramentas de script como TCL ou Lua. Definitivamente, são melhores que o nível mais baixo, mas podem comprometer a velocidade.

Parte 2: As referências

Eu acho que deve haver bons repositórios de códigos C para várias implementações de filtros etc.

  1. OpenCV - provavelmente o melhor para aplicativos de visão computacional.

  2. ImLab 2.3 - é um aplicativo gráfico de código aberto gratuito para processamento de imagens científicas executado em Windows, Linux e muitos outros sistemas UNIX. Ele suporta múltiplas janelas, tipos de dados, incluindo números inteiros de 32 bits, números reais de 32 bits e números complexos. É implementado em C ++ e também em C para fornecer uma maneira muito simples de adicionar novas funções. Possui muitas operações de imagem e suporta vários formatos de arquivo.

  3. ImageLib : é uma biblioteca de classes C ++ que fornece processamento de imagem e recursos relacionados. O conjunto principal de classes fornece uma variedade de tipos de imagens e vetores, com módulos adicionais que suportam quantização escalar e vetorial, transformações de wavelets, transformações de DCT e operações simples de histograma.

  4. CImage - Biblioteca de processamento de imagem de modelo C ++

  5. Camellia Library é uma biblioteca de processamento de imagem e visão computacional de código aberto. Escrito em C simples, é multiplataforma (Unix / Linux, Windows) e robusto. Ele já inclui muitas funções para processamento de imagem (filtragem, matemática morfológica, rotulagem, deformação, desenho, projeto / projeto posterior, conversão de cores, carregamento / salvamento de imagens etc.), a maioria delas com otimização de velocidade alta. Também é documentado por doxygen e são fornecidos exemplos de uso.

  6. VXL : Bibliotecas C ++ para pesquisa e implementação de visão computacional

  7. GNU Scientific Library (GSL) é uma biblioteca numérica para programadores em C e C ++

  8. Biblioteca Intel® Math Kernel (Intel® MKL) é uma biblioteca matemática computacional de rotinas matemáticas altamente otimizadas e extensivamente encadeadas para aplicativos que exigem desempenho máximo. As principais funções matemáticas incluem BLAS, LAPACK, ScaLAPACK1, solucionadores esparsos, transformações rápidas de Fourier, matemática vetorial e muito mais.

  9. Você pode consultar o livro: Recepções Numéricas em C - e o código de exemplo.

encontre muito mais aqui: http://www.cs.cmu.edu/~cil/v-source.html


4

O problema é que o ANSI C não é uma linguagem muito boa para o DSP em tempo real. Muitos recursos que um chip DSP real não pode ser endereçado no ANSI C. Isso inclui geradores de endereços, endereçamento reverso de bits, endereçamento circular, SIMD, segmentos de memória, vários barramentos, tipos de dados fracionários, multiplicação fracionária, matemática de ponto fixo, zero overhead looping etc. Portanto, a maioria dos compiladores para DSPs possui um extenso conjunto de extensões de idioma (#pragma, assembler embutido, novas palavras-chave etc.). No entanto, estes são decididamente não-ANSI e não portáveis.

Escrever um filtro FIR de ponto fixo simples em ANSI C pode ser facilmente 10 vezes menos eficiente do que usar extensões ou código de montagem apropriados.


0

Você pode verificar colocar o produto matlab coder. Isso permite que você gere o código C diretamente do seu código matlab sem ter que se preocupar com a introdução de erros humanos.

http://www.mathworks.co.uk/products/matlab-coder/?s_cid=HP_MI_matlabcoder

No entanto, ele suporta apenas um subconjunto do idioma e requer uma licença separada, mas pode ser adequado às suas necessidades.

O link a seguir é útil para encontrar o subconjunto suportado de Funções

http://www.mathworks.co.uk/help/toolbox/eml/ug/bq1h2z7-11.html


0

O Ceemple é um ambiente de computação técnica JIT C ++ rápido, que agrupa várias bibliotecas C / C ++ otimizadas para computação técnica, para que você possa realizar prototipagem e implantação rápidas no Ceemple. Disponível (gratuito) em http://www.ceemple.com .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.