178 lines
5.7 KiB
C
178 lines
5.7 KiB
C
|
#pragma once
|
|||
|
/******************** (C) COPYRIGHT 2017 Geek************************************
|
|||
|
* File Name : Steps_Algorithm.h
|
|||
|
* Department : Sensor Team
|
|||
|
* Current Version : V1.0
|
|||
|
* Author : Xiaoyong Li
|
|||
|
* Date of Issued : 2017.05.8
|
|||
|
* Comments: step counter algorithm added
|
|||
|
********************************************************************************
|
|||
|
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|||
|
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR REFERENCE OR
|
|||
|
* EDUCATION. AS A RESULT, Geek SOFTWARE SHALL NOT BE HELD LIABLE FOR ANY
|
|||
|
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
|||
|
* FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
|||
|
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|||
|
********************************************************************************
|
|||
|
* Release Log
|
|||
|
*
|
|||
|
* Comments: step counter algorithm released
|
|||
|
* Version Number : V1.0
|
|||
|
* Author : Xiaoyong Li
|
|||
|
* Date of Issued : 2017.05.8
|
|||
|
*******************************************************************************/
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C" {
|
|||
|
#endif
|
|||
|
#ifndef _STEPS_ALGORITHM_H_
|
|||
|
#define _STEPS_ALGORITHM_H_
|
|||
|
|
|||
|
#include "pdr_sensor.h"
|
|||
|
#define ACC_SAMPLE_RATE_100HZ
|
|||
|
//#define ACC_SAMPLE_RATE_25HZ
|
|||
|
|
|||
|
#ifdef ACC_SAMPLE_RATE_25HZ
|
|||
|
#define DownResampleTimes 1
|
|||
|
#define ACC_SAMPLE_TIME 40
|
|||
|
#define SAMPLE_TIME_MIN 36
|
|||
|
#else
|
|||
|
#define DOWN_SAMPLE_TIMES 4
|
|||
|
#define ACC_SAMPLE_TIME 10 //origin acc sampleFrequency is 100 hz
|
|||
|
#define GYRO_SAMPLE_TIME 10
|
|||
|
#define SAMPLE_TIME_MIN 9
|
|||
|
#endif
|
|||
|
|
|||
|
#define SampleFrequency 25
|
|||
|
#define SampleFrequencyFour 100
|
|||
|
#define SampleFrequencydouble 50
|
|||
|
#define SampleFrequencyOPF (37.5l)
|
|||
|
#define SampleFrequencySix 150
|
|||
|
#define AvergeFilterOrder 5
|
|||
|
#define AxisNumber 4
|
|||
|
#define FiltDifNumber 4
|
|||
|
#define AxisNumberFiltOut 16 //(AxisNumber * FiltDifNumber)
|
|||
|
#define AxisNumberStepSaveState 20 //(AxisNumberFiltOut + FiltDifNumber)
|
|||
|
#define AccelerationNumber 39
|
|||
|
#define ORI_ACC_SAMPLE_RATE 100 //origin acc sampleFrequency is 100 hz
|
|||
|
#define WIN_LENGTH_AVE_DEVI 50 //
|
|||
|
#define PI2A (180/3.1415926)
|
|||
|
//#define NSTOS 1000000000
|
|||
|
#define MS2S 1000
|
|||
|
|
|||
|
|
|||
|
#define ACC_INSPECT_TIMEWIDTH 200 //origin acc sampleFrequency is 100 hz
|
|||
|
|
|||
|
#define WINDOW_LENGTH_MIN2MAX (ACC_INSPECT_TIMEWIDTH/2 - 1) //25hz , 1 second
|
|||
|
//#define WINDOW_LENGTH_IN_VEHICLE
|
|||
|
#define STARTSTEPS 8
|
|||
|
|
|||
|
/*#define PLATFORM_ANDROID_QCOM_AP*/
|
|||
|
/*#define PLATFORM_ANDROID_QCOM_ADSP*/
|
|||
|
#define PLATFORM_PC_WINDOWS
|
|||
|
//#define PLATFORM_PC_LINUX
|
|||
|
|
|||
|
|
|||
|
#if defined PLATFORM_ANDROID_QCOM_ADSP
|
|||
|
#define STEPLIB_MEMSET SNS_OS_MEMSET
|
|||
|
|
|||
|
#if 1
|
|||
|
#define SAM_STEP_LIB_NAME "steplib"
|
|||
|
#define SAM_STEP_LIB_MSG_0(msg) UMSG(MSG_SSID_SNS,DBG_ERROR_PRIO, SAM_STEP_LIB_NAME" - "msg)
|
|||
|
#define SAM_STEP_LIB_MSG_1(msg,p1) UMSG_1(MSG_SSID_SNS,DBG_ERROR_PRIO, SAM_STEP_LIB_NAME" - "msg,p1)
|
|||
|
#define SAM_STEP_LIB_MSG_2(msg,p1,p2) UMSG_2(MSG_SSID_SNS,DBG_ERROR_PRIO, SAM_STEP_LIB_NAME" - "msg,p1,p2)
|
|||
|
#define SAM_STEP_LIB_MSG_3(msg,p1,p2,p3) UMSG_3(MSG_SSID_SNS,DBG_ERROR_PRIO, SAM_STEP_LIB_NAME" - "msg,p1,p2,p3)
|
|||
|
#define SAM_STEP_LIB_MSG_4(msg,p1,p2,p3,p4) UMSG_4(MSG_SSID_SNS,DBG_ERROR_PRIO, SAM_STEP_LIB_NAME" - "msg,p1,p2,p3,p4)
|
|||
|
#else
|
|||
|
#define SAM_STEP_LIB_MSG_0(msg)
|
|||
|
#define SAM_STEP_LIB_MSG_1(msg,p1)
|
|||
|
#define SAM_STEP_LIB_MSG_2(msg,p1,p2)
|
|||
|
#define SAM_STEP_LIB_MSG_3(msg,p1,p2,p3)
|
|||
|
#define SAM_STEP_LIB_MSG_4(msg,p1,p2,p3,p4)
|
|||
|
#endif
|
|||
|
#elif defined PLATFORM_ANDROID_QCOM_AP || defined PLATFORM_PC_WINDOWS || defined PLATFORM_PC_LINUX || defined PLATFORM_ANDROID_MTK || defined PLATFORM_ANDROID_QCOM_SLPI845
|
|||
|
#define STEPLIB_MEMSET memset
|
|||
|
#endif
|
|||
|
#if defined PLATFORM_ANDROID_MTK
|
|||
|
#define ABS_INT abs_value
|
|||
|
#else
|
|||
|
#define ABS_INT abs
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
typedef struct {
|
|||
|
unsigned long walkSteps;
|
|||
|
}stepsRe;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
double walk;
|
|||
|
double walkRealTime;
|
|||
|
double nD;
|
|||
|
}stepsDfine;
|
|||
|
|
|||
|
typedef enum {
|
|||
|
nonSteps = 0,
|
|||
|
walk,
|
|||
|
}enumState;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
unsigned char sign;
|
|||
|
enumState state;
|
|||
|
unsigned long long stateStartTime;
|
|||
|
unsigned long long stepsStartTime;
|
|||
|
}stateNowDfine;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
enumState state;
|
|||
|
unsigned long long startTimeStamp;
|
|||
|
}stateDfine;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
int flag;
|
|||
|
double ax;
|
|||
|
double ay;
|
|||
|
double az;
|
|||
|
}downSample;
|
|||
|
|
|||
|
/**---------------------------------------------------------------------
|
|||
|
* Function : getPedometerLibVersion
|
|||
|
* Description : <EFBFBD><EFBFBD>ȡ<EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾
|
|||
|
* Date : 2020/2/20
|
|||
|
*---------------------------------------------------------------------**/
|
|||
|
const char* getPedometerLibVersion(void);
|
|||
|
|
|||
|
/**---------------------------------------------------------------------
|
|||
|
* Function : initPedometer
|
|||
|
* Description : PDR <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Date : 2020/2/20 logzhan
|
|||
|
*---------------------------------------------------------------------**/
|
|||
|
void Pedometer_Init(void);
|
|||
|
|
|||
|
/**---------------------------------------------------------------------
|
|||
|
* Function : reinitPedometer
|
|||
|
* Description : PDR <EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Date : 2020/2/20 logzhan
|
|||
|
*---------------------------------------------------------------------**/
|
|||
|
void reinitPedometer(void);
|
|||
|
|
|||
|
/**---------------------------------------------------------------------
|
|||
|
* Function : updatePedometer
|
|||
|
* Description : PDR <EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ָ<EFBFBD>뷵<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Date : 2020/2/1 logzhan
|
|||
|
*---------------------------------------------------------------------**/
|
|||
|
void PedometerUpdate(IMU_t* ss_data, unsigned long* step);
|
|||
|
|
|||
|
void Steps_State_Detect(enumState* state);
|
|||
|
|
|||
|
|
|||
|
/**---------------------------------------------------------------------
|
|||
|
* Function : detVehicleMode
|
|||
|
* Description : PDR <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Date : 2020/2/1 logzhan
|
|||
|
*---------------------------------------------------------------------**/
|
|||
|
void detVehicleMode(double ax, double ay, double az);
|
|||
|
#endif
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|