デジタルフィルターの使用方法

ここでプロジェクトを行っていますが、これが問題です。 コントローラーとフィルターが組み込まれているADC(デルタシグマ)マイクロ回路からデータを取得しますが、このフィルターの周波数応答はやや劣ります。その結果、60 Hz以上でRFがブロックされます。 次のようになります。

画像



つまり 周波数応答のこのような不均一性は私たちには適していないようです(技術的な要件に従って合格しません)。ただし、周波数応答を均等化するためにサンプリング周波数を250 Hzから500 Hzに増やすことは可能ですが、平均化する必要があるデータの量は増加し、パフォーマンスに影響します(STM32F103VEのプロジェクト)システム全体と総エネルギー消費量(バッテリー電力)。 しかし、別の方法があります。



周波数応答をパラメトリックデジタルフィルター(この場合はRF)に合わせることができます。 つまり、これはイコライザーと同じです。一部の周波数を上げ、他の周波数に触れない(または満たす)ことはありません。 この方法は確かに優れていますが、 入力の別のフィルター(チップ内のフィルター)によって破壊された情報の一部を回復しようとしています。高周波での干渉レベルは必然的に増加します。 信号とともに、それらも強化しますが、どれくらいですか?



したがって、問題を解決するためのアイデアがあり、実装は残ります。 大学のコースのデジタルフィルター(練習していない人向け)について何を覚えていますか? たたみ込み、Z変換、インパルス応答などの言葉を除く 一般に、どちらの端からアプローチするのかは明確ではありません。いくつかの係数を計算する必要があるようですが、何が不明で、なぜDSPの本(800ページに1つあります)に座って時間がない、そして高速。



そのため、ここでインターネット上でこのようなリソースを見つける小さなグーグル これは、デジタルフィルターを計算するためのサイトです(オンラインだけではありません!)が、特定のアンソニーJ.フィッシャー博士によって作成されました。



そのため、必要な要件を自分で確認し、サイトに入力します。 まず、スムーズな応答が必要です。これが、バターワースが間違いなく1次の高周波(ハイパス)である理由です。 第二に、サンプルレート、すなわち 1秒あたりのADC変換数、つまりサンプルレートは250Hzです。 紹介します。 最後に、第三に、カットオフ周波数(-3dB)は50Hzです。 入口フィルターはこのあたりで切れます。 [送信]をクリックして、将来のフィルタのこの特性を取得します。

画像

赤はナイキスト周波数に対する振幅のグラフ、青は位相変化です。 0.5はサンプリングレートの半分に相当します。



計算された係数を持つCコードも取得します。

#define NZEROS 1 #define NPOLES 1 #define GAIN 1.726542528e+00 static float xv[NZEROS+1], yv[NPOLES+1]; static void filterloop() { for (;;) { xv[0] = xv[1]; xv[1] = next input value / GAIN; yv[0] = yv[1]; yv[1] = (xv[1] - xv[0]) + ( 0.1583844403 * yv[0]); next output value = yv[1]; } }
      
      





ただし、これは単なるフィルターです。周波数応答をまっすぐにするために50 Hz以上の周波数を増幅する必要があることを忘れないでください。この形式のこの関数は役に立たないため、簡単な操作で関数をこの形式にします。

 #define NZEROS 1 #define NPOLES 1 #define GAIN 1.726542528e+00F #define OUR_GAIN 2.1F //  .   float xv[NZEROS+1], yv[NPOLES+1]; int void filterloop( int data ) { xv[0] = xv[1]; xv[1] = (float)data / GAIN; yv[0] = yv[1]; yv[1] = ( xv[1] - xv[0] ) + ( 0.1583844403F * yv[0] ); return (int)(( yv0[1] * OUR_GAIN ) + (float)data ); }
      
      







それだけです フィルターを使用するには、データを関数のパラメーターにスローし、フィルター処理されたデータを返します。 ゲインOUR_GAINは経験的に選択され、ADCから読み取り値を取得し、周波数応答を測定します。



したがって、コントローラーにほとんど負荷をかけることなく周波数応答を上げることができ、私のプロジェクトは技術的な要件に従っていました(医療分野ではそれほど脆弱ではありません)。 干渉レベルが大幅に増加するのではないかと心配しましたが、4〜5μVから約6〜8μVに増加しました。 結論として、デジタルフィルターを計算するための別の無料プログラム-WinFilterをお勧めしますこちらからダウンロードできます。 どれほど効率的かはわかりませんが、テストはしていませんが、VHDL(およびCで自然に)でコードを発行できます。これはおそらくFPGAに役立ちます。 Texas Instumentsのプログラムもあります。これは、デジタルフィルターの係数を計算するためのもので、 TIBQと呼ばれます 。 それだけです デジタルフィルターの設計にお役立てください。






All Articles