日期:2014年11月8日—2014年11月14日
1.本周已完成任务:心跳数据采集及简单处理
2.本周未完成任务:使用摄像头读出具体的心跳数
3.下周计划:使用FFT读出具体心跳
4.关键技术点说明:
由上一个博客里面的代码改编得来,基本上就是对读出来的波形进行了FIR滤波,滤除高频以及低频成分,以及一些简单的数据处理,获得幅度比较大的心跳信号。
FIR的参数使用MATLAB计算,采样率5Hz 带通0.6-1.5Hz,而函数是DSP直接抄过来的。
以下 是代码以及注释
package com.example.heart;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView heart_display;
SurfaceView showDataSurfaceView=null;
SurfaceHolder mSurfaceHolder=null;
SurfaceView data_view=null;
SurfaceHolder mdataviewHolder = null;
int centerY;//中心线
int oldX=0;
int oldY=200;//上一个XY 点
int newX=0;
int newY=200;
int currentX;//当前绘制到的X 轴上的点
int ScreenWidth;
int length=0;
DisplayMetrics dm;
private static String msg = "";
int sigIn[] = null;//FIR输入数据
int sigout[] = null;//FIR输出数据
int FIR16_LPF_TEST[] = null;//FIR滤波系数,通过matlab计算获取
int count = 0;
private static Camera camera = null;
private static SurfaceView preview = null;
private static SurfaceHolder previewHolder = null;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
heart_display = (TextView)findViewById(R.id.textView2);
preview = (SurfaceView)findV