DSP用に最適化されたAnsi Cライブラリ


8

DSPは初めてですか?オープンソースDSPアルゴリズムの優れたリソースはどこにありますか?

MATLABはプロトを作成するのに優れていますが、Cコーディングに移行すると、時間がかかり、多くの間違いを犯します。フィルターなどのさまざまな実装のためのCコードの適切なリポジトリーが必要だと思います。どのポインターも良いでしょう。


1
あなたは間違いなくあなたの質問に少し焦点を当てるだけでなく、詳細をもたらす必要があります。あなたは本当に実行または作成の速度と独立したソフトウェアについて心配していますか?スコープ(アプリケーション)とターゲットは何ですか?Matlab対C対xyzを比較しようとしていますか?または、Cで本当に決心し、そこにリソースが必要ですか?Any pointers are good-一般に、あなたの側で事前の研究が欠如していることを示しています。
Dipan Mehta

回答:


4

パート1:比較について:

Matlabに代わるより高速なものに対する一般的な回答はありません。それはすべて、使用するプラットフォームによって異なります。

@Hilmarは、SIMDのような機能を示す機能を示します。これはCで可能です。ただし、Cとともにアセンブリ言語のサポートが必要になります。

以下は、より広い比較です。

  1. 汎用コンピューティング(x86やPPCなど)で作業している場合、Cよりも優れた(そして高速な)ものはないと思います。

  2. 専用のDSPハードウェア(またはARMなどの組み込みプラットフォーム)で作業している場合、ネイティブアセンブリよりもはるかに先回り、Cはそれに対応しない可能性があります。(ただし、Cは柔軟なソフトウェアの作成と実行速度のバランスが取れている場合があります。

  3. CをC ++と比較する場合、一般的な認識とは異なり、C ++は、いくつかの優れたプログラミング機能を使用して、ほとんどのコンテキストで最適化できます。

  4. その他の便利なツールについては、TCLやLuaなどのスクリプトツールをご覧ください。これらは低レベルよりも間違いなく優れていますが、速度が低下する可能性があります。

パート#2:リファレンス

フィルターなどのさまざまな実装のためのCコードの適切なリポジトリが必要だと思います。

  1. OpenCV-おそらくコンピュータービジョンアプリケーションに最適です。

  2. ImLab 2.3 -Windows、Linux、および他の多くのUNIXシステムで動作する科学的画像処理用の無料のオープンソースグラフィカルアプリケーションです。複数のウィンドウ、32ビット整数、32ビット実数、複素数などのデータ型をサポートしています。新しい関数を追加する非常に簡単な方法を提供するために、C ++およびCにも実装されています。多くの画像操作があり、いくつかのファイル形式をサポートしています。

  3. ImageLib:画像処理と関連機能を提供するC ++クラスライブラリです。クラスのメインセットは、スカラーおよびベクトル量子化、ウェーブレット変換、DCT変換、および単純なヒストグラム操作をサポートする追加のモジュールとともに、さまざまな画像およびベクトルタイプを提供します。

  4. CImage -C ++テンプレート画像処理ライブラリ

  5. Camellia Libraryは、オープンソースの画像処理およびコンピュータービジョンライブラリです。プレーンCで記述されており、クロスプラットフォーム(Unix / Linux、Windows)で堅牢です。それはすでに画像処理のための多くの機能(フィルタリング、形態学的数学、ラベル付け、ワーピング、描画、プロジェクト/バックプロジェクト、色変換、画像のロード/保存など)を含み、それらのほとんどは非常に高速に最適化されています。また、doxygenで文書化されており、使用例が提供されています。

  6. VXL:コンピュータビジョンの研究と実装のためのC ++ライブラリ

  7. GNU Scientific Library(GSL)は、CおよびC ++プログラマー向けの数値ライブラリーです。

  8. インテル®マス・カーネル・ライブラリー(インテル®MKL)は、最大限のパフォーマンスを必要とするアプリケーション向けに高度に最適化され、スレッド化された数学ルーチンのコンピューティング数学ライブラリーです。コア数学関数には、BLAS、LAPACK、ScaLAPACK1、スパースソルバー、高速フーリエ変換、ベクトル数学などがあります。

  9. あなたは本を参照することができます:Numerical Recepies in C-とサンプルコード。

ここからさらに多くを見つけてくださいhttp : //www.cs.cmu.edu/~cil/v-source.html


4

問題は、ANSI CがリアルタイムDSPに適した言語ではないことです。実際のDSPチップが持つ多くの機能は、ANSI Cではアドレス指定できません。これらには、アドレスジェネレーター、ビットリバースアドレス指定、循環アドレス指定、SIMD、メモリセグメント、複数のバス、分数データタイプ、分数乗算、特定の固定小数点演算、ゼロオーバーヘッドループなど。したがって、DSPのほとんどのコンパイラには、広範な言語拡張セット(#pragma、インラインアセンブラ、新しいキーワードなど)があります。ただし、これらは明らかに非ANSIであり、移植性はありません。

ANSI Cで単純な固定小数点FIRフィルターを作成すると、適切な拡張機能やアセンブリコードを使用するよりも、10倍効率が悪くなる可能性があります。


0

あなたはMATLABコーダー製品を置くことを確認することができます。これにより、人的エラーの発生を心配する必要なく、MATLABコードから直接Cコードを生成できます。

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

ただし、言語のサブセットのみをサポートし、個別のライセンスが必要ですが、ニーズに適している場合があります。

次のリンクは、サポートされている関数のサブセットを見つけるのに役立ちます

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


0

CeempleはラピッドJIT C ++テクニカルコンピューティング環境であり、テクニカルコンピューティング用に最適化されたC / C ++ライブラリをいくつかバンドルしているため、Ceemple内でラピッドプロトタイピングとデプロイメントの両方を実行できます。http://www.ceemple.comから入手可能(無料)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.