Android 方向传感器 Low Pass Filter 和 High Pass Filter的实现
实现了两个小球,一个小球为白色他使用Low Pass Filter 过滤掉高频,一个小球为蓝色,过滤掉低频,根据加速度方向移动。
在摇晃手机的时候,可以看到两个小球的运动,白色的小球运动比较平滑,蓝色的小球运动比较跳跃,在针对开发的问题,High Pass Filter 可以侦测到用户摇晃手机。Low Pass Filter 可以侦测用户往哪个方向有加速度。
针对Low Pass Filter,有一个参数为 SMOOTHING,该参数的范围从(1.0-0):
// Low Pass Filter key parameter this value should be from 0 to 1,
// when 1 means the least smoothness and 0 means no move at all, my
// value is 0.3f.
private static float SMOOTHING = 0.3f;
private static float THRESHOLD_VAL = 80f;
1. 1.0表示一点也不平滑
2. 这个值取0则将不会移动
另外有一个阀值 THRESHOLD_VAL,该参数我取的是80,如果加速度波动超过这个范围,我则简单的舍弃(实际可根据需要进行判断)他表示用户急剧的改变方向。
针对High Pass Filter,使用采集样本的方式进行,判断,我的样本数为30个,这个是一个经验值,
// Sample count.
private static final int ELEMENT_COUNT = 30;
根据样本的值,取出中间值,作为高频下加速度的一个修正:
private float getMedian(float[] values) {
float[] tmp = values.clone();
Arrays.sort(tmp);
int len = tmp.length;
int first = 0;
for (int i = 0; i < tmp.length; i++) {
first = i;
if (tmp[i] != BLANK) {
break