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].)
DetectFreqAboveTH.cpp@0:7672973d6bed, 2015-10-08 (annotated)
- 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?
User | Revision | Line number | New 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 |