Skip to content

Commit cbf8109

Browse files
committed
调整精度
1 parent 8ae88ea commit cbf8109

File tree

2 files changed

+160
-60
lines changed

2 files changed

+160
-60
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/base/basepedo/service/StepDcretor.java

Lines changed: 159 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,24 @@
1212
import java.util.TimerTask;
1313

1414
public class StepDcretor implements SensorEventListener {
15+
float avg_v = 0;
16+
float min_v = 0;
17+
float max_v = 0;
18+
19+
int acc_count = 0;
20+
int up_c = 0;
21+
int down_c = 0;
22+
long pre_time = 0;
23+
24+
1525
private final String TAG = "StepDcretor";
1626
// alpha 由 t / (t + dT)计算得来,其中 t 是低通滤波器的时间常数,dT 是事件报送频率
1727
private final float alpha = 0.8f;
1828
private long perCalTime = 0;
1929

2030
//最新修改的精度值
21-
private final float minValue = 9.7f;
22-
private final float maxValue = 9.8f;
31+
private final float minValue = 9.8f;
32+
private final float maxValue = 9.9f;
2333
//9.5f
2434
// private final float verminValue = 8.5f;
2535
//10.0f
@@ -54,69 +64,16 @@ public void onSensorChanged(SensorEvent event) {
5464
Sensor sensor = event.sensor;
5565
synchronized (this) {
5666
if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
67+
calc_step(event);
5768

58-
// 用低通滤波器分离出重力加速度
59-
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
60-
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
61-
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
62-
63-
average = (float) Math.sqrt(Math.pow(gravity[0], 2)
64-
+ Math.pow(gravity[1], 2) + Math.pow(gravity[2], 2));
65-
66-
// if (average <= verminValue) {
67-
if (average <= minValue) {
68-
Log.v("xfblog","低");
69-
perCalTime = System.currentTimeMillis();
70-
}
71-
// } else if (average >= vermaxValue) {
72-
else if (average >= maxValue) {
73-
Log.v("xfblog","高");
74-
float betweentime = System.currentTimeMillis()
75-
- perCalTime;
76-
if (betweentime >= minTime && betweentime < maxTime) {
77-
perCalTime = 0;
78-
if (CountTimeState == 0) {
79-
// 开启计时器
80-
time = new TimeCount(duration, 800);
81-
time.start();
82-
CountTimeState = 1;
83-
Log.v(TAG, "开启计时器");
84-
} else if (CountTimeState == 1) {
85-
TEMP_STEP++;
86-
Log.v(TAG, "计步中 TEMP_STEP:" + TEMP_STEP);
87-
}
88-
// else if (CountTimeState == 2) {
89-
// timer = new Timer(true);
90-
// TimerTask task = new TimerTask() {
91-
// public void run() {
92-
// if (lastStep == CURRENT_SETP) {
93-
// timer.cancel();
94-
// CountTimeState = 0;
95-
// lastStep = -1;
96-
// TEMP_STEP = 0;
97-
// Log.v(TAG, "停止计步:" + CURRENT_SETP);
98-
// } else {
99-
// lastStep = CURRENT_SETP;
100-
// }
101-
// }
102-
// };
103-
// timer.schedule(task, 0, 2000);
104-
// CountTimeState = 3;
105-
// }
106-
else if (CountTimeState == 3) {
107-
CURRENT_SETP++;
108-
if (onSensorChangeListener != null) {
109-
onSensorChangeListener.onChange();
110-
}
111-
}
112-
}
113-
}
114-
// }
11569
}
11670
}
11771
}
11872

11973

74+
75+
76+
12077
public void onAccuracyChanged(Sensor arg0, int arg1) {
12178

12279
}
@@ -180,4 +137,147 @@ public void onTick(long millisUntilFinished) {
180137
}
181138

182139
}
140+
141+
142+
void avg_check_v(float v) {
143+
acc_count++;
144+
//求移动平均线
145+
//50ms 1 second 20 , 3 sec60;
146+
if (acc_count < 64) {
147+
//avg_v=((acc_count-1)*avg_v+v)/acc_count;
148+
avg_v = avg_v + (v - avg_v) / acc_count;
149+
} else {
150+
//avg_v=(avg_v*99+v)/100;
151+
avg_v = avg_v * 63 / 64 + v / 64;
152+
}
153+
154+
if (v > avg_v) {
155+
up_c++;
156+
if (up_c == 1) {
157+
//Log.e("wokao","diff:"+(max_v-min_v));
158+
max_v = avg_v;
159+
} else {
160+
max_v = Math.max(v, max_v);
161+
}
162+
if (up_c >= 2) {
163+
down_c = 0;
164+
}
165+
} else {
166+
down_c++;
167+
if (down_c == 1) {
168+
min_v = v;
169+
} else {
170+
min_v = Math.min(v, min_v);
171+
}
172+
if (down_c >= 2) {
173+
up_c = 0;
174+
}
175+
}
176+
//Log.e("wokao","avg_v:"+avg_v+",v:"+v+",uc"+up_c+",dc:"+down_c);
177+
178+
if (up_c == 2 && (max_v - min_v) > 2) {
179+
//
180+
long cur_time = System.currentTimeMillis();
181+
if (cur_time - pre_time > 250) {
182+
pre_time = cur_time;
183+
preStep();
184+
// StepDcretor.CURRENT_SETP++;
185+
// //记步,通知ui
186+
// if (onSensorChangeListener != null) {
187+
// onSensorChangeListener.onChange();
188+
// }
189+
Log.e("xfblog","CURRENT_SETP:"+CURRENT_SETP);
190+
} else {
191+
up_c = 1;
192+
}
193+
}
194+
}
195+
196+
synchronized private void calc_step(SensorEvent arg0) {
197+
float v = (float) Math.sqrt(arg0.values[0] * arg0.values[0] + arg0.values[1] * arg0.values[1] + arg0.values[2] * arg0.values[2]);
198+
avg_check_v(v);
199+
}
200+
201+
private void preStep(){
202+
if (CountTimeState == 0) {
203+
// 开启计时器
204+
time = new TimeCount(duration, 700);
205+
time.start();
206+
CountTimeState = 1;
207+
Log.v(TAG, "开启计时器");
208+
} else if (CountTimeState == 1) {
209+
TEMP_STEP++;
210+
Log.v(TAG, "计步中 TEMP_STEP:" + TEMP_STEP);
211+
} else if (CountTimeState == 3) {
212+
CURRENT_SETP++;
213+
if (onSensorChangeListener != null) {
214+
onSensorChangeListener.onChange();
215+
}
216+
}
217+
}
218+
219+
220+
221+
private void oldCalStep(SensorEvent event){
222+
// 用低通滤波器分离出重力加速度
223+
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
224+
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
225+
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
226+
227+
average = (float) Math.sqrt(Math.pow(gravity[0], 2)
228+
+ Math.pow(gravity[1], 2) + Math.pow(gravity[2], 2));
229+
230+
// if (average <= verminValue) {
231+
if (average <= minValue) {
232+
Log.v("xfblog","低");
233+
perCalTime = System.currentTimeMillis();
234+
}
235+
// } else if (average >= vermaxValue) {
236+
else if (average >= maxValue) {
237+
Log.v("xfblog","高");
238+
float betweentime = System.currentTimeMillis()
239+
- perCalTime;
240+
if (betweentime >= minTime && betweentime < maxTime) {
241+
perCalTime = 0;
242+
if (CountTimeState == 0) {
243+
// 开启计时器
244+
time = new TimeCount(duration, 800);
245+
time.start();
246+
CountTimeState = 1;
247+
Log.v(TAG, "开启计时器");
248+
} else if (CountTimeState == 1) {
249+
TEMP_STEP++;
250+
Log.v(TAG, "计步中 TEMP_STEP:" + TEMP_STEP);
251+
}
252+
// else if (CountTimeState == 2) {
253+
// timer = new Timer(true);
254+
// TimerTask task = new TimerTask() {
255+
// public void run() {
256+
// if (lastStep == CURRENT_SETP) {
257+
// timer.cancel();
258+
// CountTimeState = 0;
259+
// lastStep = -1;
260+
// TEMP_STEP = 0;
261+
// Log.v(TAG, "停止计步:" + CURRENT_SETP);
262+
// } else {
263+
// lastStep = CURRENT_SETP;
264+
// }
265+
// }
266+
// };
267+
// timer.schedule(task, 0, 2000);
268+
// CountTimeState = 3;
269+
// }
270+
else if (CountTimeState == 3) {
271+
CURRENT_SETP++;
272+
if (onSensorChangeListener != null) {
273+
onSensorChangeListener.onChange();
274+
}
275+
}
276+
277+
278+
279+
}
280+
}
281+
// }
282+
}
183283
}

0 commit comments

Comments
 (0)