前提・実現したいこと
dsPICのプログラムを用いて連続4000回分の計測データの最大値と何回目で最大値であったかを求めようとしています。
最小二乗法を用いてこの問題を解決できるのではないかと考えています。
他の解決策があればその限りではありません。
発生している問題・エラーメッセージ
現在、前後の計測点の比較のみを行い、前の点よりも次の点の値が大きければその点を最大値として次の比較点と比べるということを4000回行うプログラムを作成しております。
しかし、ノイズが混入すると最大値を誤検知してしまい、誤った値が最大値として出力されてしまいます。
該当のソースコード
void __attribute__((__interrupt__, __shadow__))_T2Interrupt(void)//割り込み処理関数 { IFS0bits.T2IF=0;//割込みフラグクリア dds_CTRL=1; delay_ns(50); dds_CTRL=0; SigIn[0] = ReadADC12(0);// Input to A/D converter () Data_new = SigIn[0]+0x8000;//0~FFFFで与える n=n+1; // 最大値検出(トーナメント) // if(Data_new > TopDataV)//前後の計測値の比較 { TopDataV = Data_new; TopDataf = n; } /*** 掃引終了判定* **/ if(n>=4000) { count=count+1; Vmin[count]=TopDataV;//最大値格納 fmin[count]=TopDataf;//最大値が何点目であったか格納 dds_Int=1; delay_ns(50); n=0; dds_Int=0; } }
ーーーーーーーーーーーーA/D変換後の計測結果ーーーーーーーーー
試したこと
解決策を模索しておりますが見つかっておりません。
補足情報(FW/ツールのバージョンなど)
マイコン:dspic33f
開発ソフト:MPLAB
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。