前提・実現したいこと
dsPICのプログラムを用いてA/D変換された4000点の計測データの最大値と何点目で最大値であったかを求めようとしています。
発生している問題・エラーメッセージ
リアルタイムで前後のデータを比較し、値の高いデータを”山登り法”を用いて求めていますが、ノイズが混入しているため、時々異なる値が最大値として出力されてしまいます。
該当のソースコード
c言語
1void __attribute__((__interrupt__, __shadow__))_T2Interrupt(void)//割り込み処理関数 2{ 3 4 IFS0bits.T2IF=0;//割込みフラグクリア 5 dds_CTRL=1; 6 delay_ns(50); 7 dds_CTRL=0; 8 SigIn[0] = ReadADC12(0);// Input to A/D converter () 9 Data_new = SigIn[0]+0x8000;//0~FFFFで与える 10 n=n+1; 11 12 // 最大値検出(トーナメント) // 13 if(Data_new > TopDataV)//山登り法を用いた前後の計測値の比較 14 { 15 TopDataV = Data_new; 16 TopDataf = n; 17 } 18 19/*** 掃引終了判定* **/ 20 if(n>=4000)//4000点比較したら最大値を格納 21 { 22 count=count+1; 23 Vmin[count]=TopDataV;//最大値格納 24 fmin[count]=TopDataf;//最大値が何点目であったか格納 25 26 dds_Int=1; 27 delay_ns(50); 28 n=0; 29 dds_Int=0; 30 31 } 32}
試したこと
4000点をいったん配列に格納しようと試みましたが、メモリが足りませんでした。
補足情報(FW/ツールのバージョンなど)
dsPIC
C言語
MPLAB
回答3件
あなたの回答
tips
プレビュー