关于传感器取30平均值来过滤
来源:互联网 发布:软件开发ppt 编辑:程序博客网 时间:2024/05/19 16:04
在这里,我们对Low-Pass Filter和High-pass filter实例进行说明。在实际的运用中在什么样的场合下如何使用这两个过滤器,通过例程我们进行很好的理解。程序列表1-6,列表1-7是摇晃手机表示图片的应用程序的代码(运行结果如图1-6)。在这个例程中作成ShakeActivity类和管理抽样数据的ValueHolder类。ShakeActivity类和ValueHolder类的关系如图1-7所示。
图1-6 摇动手机并表示图片的例程
列表1-6 摇动手机并表示图片的例程1
package com.mamezou.android.shake;
import java.util.Arrays;
public class ValueHolder { //..................①
private static final float BLANK = -999;
private int size;
private float[] values;
private int position = 0;
public ValueHolder(int size) {
this.size = size;
values = new float[size];
clear();
}
private void clear() {
Arrays.fill(values, BLANK);
}
public boolean add(float value) {
values[position] = value;
if(size -1 == position) {
position = 0;
return true;
}
position ++;
return false;
}
// 取得中间值的方法
public float getMedian() { //..................②
float[] tmp = values.clone();
Arrays.sort(tmp);
int len = tmp.length;
int first = 0;
for (int i = 0; i < len; i++) {
first = i;
if(tmp[i] != BLANK) break;
}
return tmp[(len - first) / 2 + first];
}
}
要点如下所示
①ValueHolder类管理用size指定的抽样数据
②返回保存的抽样数据的中间值。
列表1-6 摇动手机并表示图片的例程2
package com.mamezou.android.shake;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
public class ShakeActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private ValueHolder x;
private ValueHolder y;
private ValueHolder z;
private View layout;
// Android君的画像
private BitmapDrawable andy;
private static final int ELEMENT_COUNT = 30;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
layout = (View) findViewById(R.id.layout);
andy = (BitmapDrawable) getResources().getDrawable(R.drawable.andy);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
x = new ValueHolder(ELEMENT_COUNT);
y = new ValueHolder(ELEMENT_COUNT);
z = new ValueHolder(ELEMENT_COUNT);
}
@Override
protected void onStop() {
sensorManager.unregisterListener(this);
super.onStop();
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent e) {
float sensorValueX = e.values[SensorManager.DATA_X];
float sensorValueY = e.values[SensorManager.DATA_Y];
float sensorValueZ = e.values[SensorManager.DATA_Z];
x.add(sensorValueX);
y.add(sensorValueY);
z.add(sensorValueZ);
float valueX = sensorValueX - x.getMedian();
float valueY = sensorValueX - x.getMedian();
float valueZ = sensorValueX - x.getMedian();
andy.setAlpha(15 * (int)(Math.abs(valueX) + Math.abs(valueY) + Math.abs(valueZ))); //..................①
layout.setBackgroundDrawable(andy);
}
}
要点如下所示
①对3个轴的High-pass filter的值,画像的阿尔法值进行操作。按照这样做,手机强烈摇动的时候Android画像被表示。High-pass filter处理对只是对手机倾斜,画面不被表示。只对手机进行摇动的时候画像才表示。
全部源码下载
例程下载 例程名称 Android 加速度传感器运用实例 代码下载 大小 35.2 KB 下载Shake.zip
- 关于传感器取30平均值来过滤
- android传感器过滤,取中间直, 方位角介绍
- 关于传感器
- 关于asp取网页信息并过滤html代码
- 关于脏字典过滤问题-用正则表达式来过滤脏数据
- 关于脏字典过滤问题-用正则表达式来过滤脏数据
- 关于求平均值的问题
- 关于使用定义函数来实现对于数组c中的元素进行筛选最大值最小值,计算平均值等操作
- 关于温湿度SHT20传感器,用普通GPIO口来模拟IIC实现驱动
- 关于经常利用取余数来获得分组的总结
- Android加速度传感器数值的过滤
- 关于无线传感器网络
- 关于动作感应传感器
- 关于传感器的技术参数
- 关于Android中的传感器
- 平均值
- 平均值
- 关于TreeView的问题(数据过滤后取不到数据)
- matlab 中字符串作为函数参数传递的方法总结
- usb_modeswitch移植
- RMAN备份,热备份相关概念
- 循环单链表
- 第六章 注解式控制器详解——SpringMVC强大的数据绑定(1)
- 关于传感器取30平均值来过滤
- NOIP 完挂
- jQuery.extend 函数详解
- Spring注解入门
- mysql修改根用户密码
- 哈哈哈 利用SmtpClient发送邮件
- 文件/文件夹操作函数封装(使用SHFileOperation和SHCreateDirectory函数实现)
- Eclipse安装SVN插件
- String的考点