2011-09-13 17 views
1

何らかの入力があり、方形波、三角波、または何らかの波形として識別できるコードを作成したいと考えています。私はまた、波を生成するいくつかの方法が必要です。波形の識別/生成?

私は、しかし、私はこのすべてをシミュレートするアプローチだろうかわからないんだけど、C/C++での経験を持っています。最終的には、アナログ入力を読み取って波形を決定するためのマイクロコントローラプログラムに変換したいと考えています。

編集:申し訳ありません。私はそれが既知の頻度であり、振幅は未知であるべきであると言及すべきであった。 MATLABまたはフリーGNU Octaveの仕事と同様で

+3

波形にノイズがありますか?頻度を知っていますか?あなたは振幅を知っていますか?一般に、これは難しい問題です。 –

+1

この無料の書籍をチェックしてください[ デジタル信号処理の科学者と技術者のガイド](http://www.dspguide.com/pdfbook.htm) –

+0

申し訳ありません。私はそれが既知の頻度であり、振幅は未知であるべきであると言及すべきであった。 – Paul

答えて

3

波を生成することは、波を識別することよりもはるかに簡単です。私はいくつかの波の生成を行う小さなプロジェクトを持っています。ここでmy projectからの例です:

float amplitude; 
    switch (sound->wavetype) 
    { 
     case LA_SQUARE: 
      amplitude = sound->theta > .5 ? 1.0 : -1.0; 
      break; 
     case LA_SINE: 
      amplitude = sin(2 * PI * sound->theta); 
      break; 
     case LA_TRIANGLE: 
      amplitude = sound->theta > .5 ? 4 * sound->theta - 3 : -4 * sound->theta + 1; 
      break; 
     case LA_SAWTOOTH: 
      amplitude = 2 * sound->theta - 1.0; 
      break; 
     case LA_NOISE: 
      amplitude = ((float)rand()/RAND_MAX); 
      break; 
     default: 
      ; 
    } 

thetaここでは波形に沿って、フレームごとに更新され、あなたが作成している電波の周波数に依存しています。波を識別するためとして

あなたは、単純な、混合されていない四角形、三角形や正弦波を得ることになるだろう知っていれば、あなたはおそらく、いくつかの簡単なテストを行うことができます。波に沿った任意の2点での振幅の変化を見てください。彼らが同じなら、方形波。線形に変化している場合(つまり、振幅の変化が一定である場合)、三角波(またはその区別をしている場合はのこぎり波)が得られます。それ以外の場合は、正弦波です。このチェックは波の種類だけが予想されていて、混在していない場合にのみ機能します。そこには私が考えることができるいくつかの他のエッジケースがありますが、私はあなたにそれを心配させます。

あなたは手の込んだ何をやっている場合は、おそらくコメント欄で提案1のように、この種のものに特化した書籍を検索する必要があるとしています。

0

スタート。目的の波形でアレイを生成し、デコード/識別に適した関数を書くことができます。詳細が分かったら、あなたのc/C++コードのfft/ifftルーチンを処理するためのFFTW(西部で最速のフーリエ変換)ライブラリを入手してください。 MATLABの信号処理ワークベンチモジュールには、目的を達成するための多くの便利なツールがあります。

+0

これは、波形の分類である実際の問題には対処しません。 –

+3

周波数領域では、言及された2つの異なる波形は非常に特徴的でなければなりません。 – Novelocrat

0

波形を特定するには:周波数を知っている場合、アレックスが答えているように、離散的なグラデーションを使用すると非常に多くのことができます。

別の方法は、補間技術を使用して係数を見ていることであろう。さらに別の方法は、高速フーリエ変換である。これらの最後の2つは、特により複雑な波形を識別する際に、計算上の強度が高くなりますが、さらに正確です。 uCが十分に速いのか、運が良ければハードウェア-FTがあるのか​​を確認する必要があります。

関連する問題