之前做脉搏采集时需要对数据进行滤波等处理,但是用Java处理显然没有直接用matlab的函数来得简单,下面是具体过程:
1、在matlab中写好一个根据数据文件计算心率的函数:
function HeartRate = purehr(fileName,total_time)
fileData = load(fileName); %读取脉搏数据数据txt文件
values = fileData(:,1); %读取第一列数据
sizeOfFile = length(values); %获取数据长度
values = medfilt1(values,4); %平滑
values = smooth(values ,70);
count = 60; %脉搏波动出现次数,根据values求得,网上有很多思路,这里随便设定个60
HeartRate = 60 * count / total_time; %一定时间内的平均心率
2、函数手动验证能达到预期效果后进行打包:
在命令窗口键入deploytool,选择Library Compiler:
选择Java Package,点击右边的蓝色加号选择你刚刚写好的m文件:
选择后如图:
拉到下面,更改下Class Name,点击右上角的绿勾勾Package:
提示保存,这是在保存工程文件,随意选择你的目录:
然后,就开始编译打包了,等待即可,过程可能比较久:
编译完成,打开for_redistribution_files_only文件夹,里面的jar文件就是我们需要的程序包了:
3、使用jar包,我用的是IntelliJ IDEA :
除了刚才Matlab编译出来的purehr.jar,还需要到Matlab目录下,我的目录是:
D:\Program Files\MATLAB\R2016b\toolbox\javabuilder\jar下找到javabuilder.jar,把它也复制出来,放到一个你能找到的地方。
在IntelliJ IDEA左侧的工程目录打开Library Settings:
在Module中,点击右侧绿色加号把purehr.jar和javabuilder添加进来,最后点击OK即可。
最后是在JAVA使用:
package com.company;
import com.mathworks.toolbox.javabuilder.MWException;
import purehr.PureHearRate;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
public class Main {
public static void main(String[] args) {
// write your code here
try {
PureHearRate pureHearRate = new PureHearRate();
Object[] results; //用的是集合
//pureHeartRate.purehr(),第一个参数是有几个输出结果,在这里我们只有一个:HearRate,第二个参数是文件路径,第三个是总时间
results = pureHearRate.purehr(1,"C:\\Users\\Administrator\\Desktop\\TXT\\a.txt",50);
System.out.println("心率是: " + results[0].toString());//多个输出则:results[1].toString(),results[2].toString()...
} catch (MWException e) {
e.printStackTrace();
}
}
}
结果:
如有错误或不清楚的地方,还请各位指正!