奇妙な平均の結果を移動する

G

Guest

Guest
こんにちはすべて、
私は再午前は
、 離散したシグマデルタADCは
、 オペアンプを使用してアンプとカウンタ
、 および8051マイクロコントローラを使用して重さのスケールのファームウェアのコーディング。

引っ越しを使用して平均フィルタの安定のために。もし私の平均のサンプル数を増やす今の問題は、最終的な数はかなりの量と
、 その逆に低減します。私は別のウィンドウのサイズと同様の重量の値を取得しないでください!

しかし
、 私はこの..起こらないすべきだと思うどのようなフィルタウィンドウの大きさに関係なく、読み取り指定された重量と同じ値を中心に変動する必要があります。

すべてのソ¥リューションは??

ここに私の更新の重量のISRは平均して行われている
コード:AVG_FILTER_WINDOW_SIZE 8定義#(無効)2割り込みnew_weight_interrupt 0を使用して無効



EX1に= 0; / /無効にするINT1の割り込み

ET1 = 1; / /無効にするTMR0割り込み

よって取り残さ= 0; / /停止タイマ0val_393 = P1の;

val_393&= 0x0F;

CLR_393 = 1;new_weight =((長い)オーバーフロー)""16;

new_weight | =((長い)TH0)""8;

new_weight | =(()TL0)長い;

new_weight""= 4;

new_weight | =(長い)val_393;/ /平均化に行わこちら

avg_weight = new_weight;

avg_weight / = AVG_FILTER_WINDOW_SIZE;オーバーフロー= 0;

TH0 = 0;

TL0 = 0;

よって取り残さ= 1;

CLR_393 = 0;EX1に= 1;

ET1 = 1;



 
やあ、

私は完全にあなたのコードを理解していないけど、私は同意するかは
、 結果があります別々のウィンドウのサイズを閉じるのがあります。

ですから
、 あなたの窓の増加、重量の合計も増加する必要があります。あなたが分割する前に多くのサンプルを提供することがあります。

あなたは
、 変更すること何かだけでなく
、 ウィンドウのサイズを達成することができます。

ときに私は
、 配列を使用してリコール平均ので
、 私は最古の例を引く可能¥性との合計で
、 新たな一などの移動に使用。配列のサンプル(カウント)のサイズは
、 ウィンドウのサイズと、その平均収束された関連していた

 
私は
、 このコードを入力するので、私はあなたのいくつかの質問が初めてです:

私は
、 上のコードの一部がavg_weightには8つの値を追加して説明できますか?

 
のCMOS、

いくつかのデータを別のウィンドウのサイズを取得しているポストてもらえますか?たとえば、次の()、zip形式は
、 各列には
、 特定のウィンドウのサイズや列ですExcelシートやCSVファイルを投稿できる
、 そのウィンドウのサイズと平均の時系列です。

Kender

 
daviddlc書き込み:

私は、このコードを入力するので、私はあなたのいくつかの質問が初めてです:私は、上のコードの一部がavg_weightには8つの値を追加して説明できますか?
 
のCMOS、

誰かが私の前に、私は参照してください場合は
、 サンプルカウントされたかのように。だから私はあなた(ゼロ)の合計を変数ごとにAVG_FILTER_WINDOW_SIZEサンプルセットきれいだった言うことはできません。
and NOT every AVG_FILTER_WINDOW_SIZE samples
then you must add a new sample everytime but remove the oldest, I think

もしあなたが本当に すべてのサンプルでは
ない すべてのAVG_FILTER_WINDOW_SIZEサンプル
をクリックすると新しいサンプルを毎回追加する必要がありますが
、 最も古い削除して計算をする場合は、と思う

時には
、 これらのほとんどの詳細をハード時間があること

 
私は
、 上のコードの一部がavg_weightには8つの値を追加して説明できますか?[/ quote]編集
これは
、 平均しない
/ /平均化に行わこちら
avg_weight = new_weight;
avg_weight / = AVG_FILTER_WINDOW_SIZE;

8操作をした後... ...私は
、 最初の平均結果を得る必要があります。

8の操作後、ただし、8により
、 すべての時間に分裂して、数を8で除算する必要がある唯一の後、8の操作、それ以外のあなたの計算を追加してそれをチェックアウトが正しくありません。そして、Kenderし
、 その後は、8測定値が平均値を計算
、 配列またはテーブルの型を使用する必要があります述べた。追加5分後:daviddlc書き込み:

私は、上のコードの一部がavg_weightには8つの値を追加して説明できますか?
 
はい...私は推測する人がすぐそこです。私のメソ¥ッドを右は
、 最初の8つのサンプルとそれ以上は動作しません。

私は
、 コードを変更するだろうし
、 結果をポスト。

 
もし西の出力よりも
、 時間iにおけるサンプルはM、前のサンプルの平均として計算されます。
イ=(西 西- 1 西- 2 ...西- M)の/メートル
場合は2のいくつかの指数としては、右の命令に回転を使用することができます部門のための代わりにMを使用しこれらの操作は非常に簡単です。
実際に再帰的な実装では
、 フラッシュ超小型飛行体の高速のように見せることができます。ただ注意点は
、 次の瞬間に私は一
イ1 =(西1 西 西- 2 ...西-メートル 1)/ M =が(西1 イ*メートル-西- M)の/メートル
つまり
、 最新のサンプルを読み
、 バッファに入れ、バッファからのIMのサンプルを読んで、前のフィルタの出力に加えてください。最後に
、 メートルで割ります
が大幅に時間が異なる平均フィルタメートルの移動幅inverslyその帯域幅に比例します(のみフィルタリングされる信号の間隔m)である。
の場合も同じ方法でフィルタリングできますン信号の場合よりもシャープにフィルタを必要と...

 

Welcome to EDABoard.com

Sponsor

Back
Top