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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DetectFreqAboveTH.cpp Source File

DetectFreqAboveTH.cpp

00001 #include "DetectFreqAboveTH.h"
00002 
00003 //extern DigitalOut led[];
00004 
00005 DetectFreqAboveTH::DetectFreqAboveTH(int time_ms, int iter)
00006 {
00007 //    led[0]= 1;
00008     unitTime= time_ms;
00009     iterThreshold= iter;
00010     span= new unsigned short[iter];
00011 //init
00012     for(id= 0; id < iterThreshold; id++)
00013         span[id]= 0xffff;
00014     this->timer.start(true);
00015     id= 0;
00016 //    led[1]= 1;
00017 }
00018 
00019 DetectFreqAboveTH::~DetectFreqAboveTH()
00020 {
00021     delete [] span;
00022 }
00023 
00024 
00025 bool DetectFreqAboveTH::chkAbove()
00026 {
00027     int tmpSpan= this->timer.read_ms(); //reset
00028 
00029     if(tmpSpan > 0xfff0)    // 65,520ms.
00030         tmpSpan= 0xffff;
00031 
00032     span[id]= tmpSpan;
00033     id++;
00034     id %= iterThreshold;
00035     if(tmpSpan == 0xffff)
00036         return false;
00037 
00038     unsigned int sum= 0, tmp;
00039     for(int i= 0; i < iterThreshold; i++) {
00040         tmp= span[i];
00041         if(tmp == 0xffff)   // under threshold iter count.
00042             return false;
00043         sum += tmp;
00044         if(sum >= unitTime)
00045             return false;
00046     }
00047     // sumが単位時間未満なので、発生回数(/単位時間)は閾値以上。
00048     return true;
00049 }
00050 
00051 // EOF