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
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
Generated on Thu Jul 14 2022 01:06:24 by 1.7.2