|
步行仪 一个关键算法是窗函数算法,进ACC进行动态阀值 。- void TimeWindow()
- {
- if(ReReg==2) //如果是新开始的第一步,直接在记步缓存中加1
- {
- TempSteps++;
- Interval=0; //时间窗
- ReReg=1;
- InvalidSteps=0;
- }
- else //如果不是新开始的第一步
- {
- if((Interval>=TIMEWINDOW_MIN)&&(Interval<=TIMEWINDOW_MAX)) //如果时间间隔在有效的时间窗内
- {
- InvalidSteps=0;
- if(ReReg==1) //如果还没有找到规律
- {
- TempSteps++; //记步缓存加1
- if(TempSteps>=REGULATION) //如果记步缓存达到所要求的规律数
- {
- ReReg=0; //已经找到规律
- STEPS=STEPS+TempSteps; //更新显示
- TempSteps=0;
- }
- Interval=0;
- }
- else if(ReReg==0) //如果已经找到规律,直接更新显示
- {
- STEPS++;
- TempSteps=0;
- Interval=0;
- }
- }
- else if(Interval<TIMEWINDOW_MIN) //如果时间间隔小于时间窗下限
- {
- if(ReReg==0) //如果已经找到规律
- {
- if(InvalidSteps<255) InvalidSteps++; //无效步缓存加1
- if(InvalidSteps>=INVALID) //如果无效步达到所要求的数值,则重新寻找规律
- {
- InvalidSteps=0;
- ReReg=1;
- TempSteps=1;
- Interval=0;
- }
- else //否则,只丢弃这一次的记步,但是继续记步,不需要重新寻找规律
- {
- Interval=0;
- }
- }
- else if(ReReg==1) //如果还没有找到规律,则之前的寻找规律过程无效,重新寻找规律
- {
- InvalidSteps=0;
- ReReg=1;
- TempSteps=1;
- Interval=0;
- }
- }
- else if(Interval>TIMEWINDOW_MAX) //如果时间间隔大于时间窗上限,记步已经间断,重新寻找规律
- {
- InvalidSteps=0;
- ReReg=1;
- TempSteps=1;
- Interval=0;
- }
- }
- }
复制代码
二、计步算法
|
|