Detected Iteration Above Threshold in Unit Time. Check if Frequency (iteration count in Unit time) above Threshold. CATION. max interval is 0xfff0: 65,520ms. max iter threshold is 0xffff. (threfore, using 131KB with span[0xffff].)

Dependencies:   myTimer

Committer:
AkinoriHashimoto
Date:
Thu Oct 08 05:35:04 2015 +0000
Revision:
0:7672973d6bed
Child:
1:6ab4e8504d60
1st pubkish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AkinoriHashimoto 0:7672973d6bed 1 #include "DetectFreqAboveTH.h"
AkinoriHashimoto 0:7672973d6bed 2
AkinoriHashimoto 0:7672973d6bed 3
AkinoriHashimoto 0:7672973d6bed 4
AkinoriHashimoto 0:7672973d6bed 5 DetectFreqAboveTH::DetectFreqAboveTH(int time_ms, int iter)
AkinoriHashimoto 0:7672973d6bed 6 {
AkinoriHashimoto 0:7672973d6bed 7 unitTime= time_ms;
AkinoriHashimoto 0:7672973d6bed 8 iterThreshold= iter;
AkinoriHashimoto 0:7672973d6bed 9 span= new unsigned short[iter];
AkinoriHashimoto 0:7672973d6bed 10 //init
AkinoriHashimoto 0:7672973d6bed 11 for(id= 0; id < iterThreshold; id++)
AkinoriHashimoto 0:7672973d6bed 12 span[id]= 0xffff;
AkinoriHashimoto 0:7672973d6bed 13 this->timer.start(true);
AkinoriHashimoto 0:7672973d6bed 14 id= 0;
AkinoriHashimoto 0:7672973d6bed 15 }
AkinoriHashimoto 0:7672973d6bed 16
AkinoriHashimoto 0:7672973d6bed 17 DetectFreqAboveTH::~DetectFreqAboveTH()
AkinoriHashimoto 0:7672973d6bed 18 {
AkinoriHashimoto 0:7672973d6bed 19 delete [] span;
AkinoriHashimoto 0:7672973d6bed 20 }
AkinoriHashimoto 0:7672973d6bed 21
AkinoriHashimoto 0:7672973d6bed 22
AkinoriHashimoto 0:7672973d6bed 23 bool DetectFreqAboveTH::chkAbove()
AkinoriHashimoto 0:7672973d6bed 24 {
AkinoriHashimoto 0:7672973d6bed 25 int tmpSpan= this->timer.read_ms(); //reset
AkinoriHashimoto 0:7672973d6bed 26
AkinoriHashimoto 0:7672973d6bed 27 if(tmpSpan > 0xfff0) // 65,520ms.
AkinoriHashimoto 0:7672973d6bed 28 tmpSpan= 0xffff;
AkinoriHashimoto 0:7672973d6bed 29
AkinoriHashimoto 0:7672973d6bed 30 span[id]= tmpSpan;
AkinoriHashimoto 0:7672973d6bed 31 id++;
AkinoriHashimoto 0:7672973d6bed 32 id %= iterThreshold;
AkinoriHashimoto 0:7672973d6bed 33 if(tmpSpan == 0xffff)
AkinoriHashimoto 0:7672973d6bed 34 return false;
AkinoriHashimoto 0:7672973d6bed 35
AkinoriHashimoto 0:7672973d6bed 36 unsigned int sum= 0, tmp;
AkinoriHashimoto 0:7672973d6bed 37 for(int i= 0; i < iterThreshold; i++) {
AkinoriHashimoto 0:7672973d6bed 38 tmp= span[i];
AkinoriHashimoto 0:7672973d6bed 39 if(tmp == 0xffff) // under threshold iter count.
AkinoriHashimoto 0:7672973d6bed 40 return false;
AkinoriHashimoto 0:7672973d6bed 41 sum += tmp;
AkinoriHashimoto 0:7672973d6bed 42 if(sum >= unitTime)
AkinoriHashimoto 0:7672973d6bed 43 return false;
AkinoriHashimoto 0:7672973d6bed 44 }
AkinoriHashimoto 0:7672973d6bed 45 // sumが単位時間未満なので、発生回数(/単位時間)は閾値以上。
AkinoriHashimoto 0:7672973d6bed 46 return true;
AkinoriHashimoto 0:7672973d6bed 47 }
AkinoriHashimoto 0:7672973d6bed 48
AkinoriHashimoto 0:7672973d6bed 49 // EOF