之前做脈搏採集時需要對數據進行濾波等處理,但是用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();
}
}
}
結果:
如有錯誤或不清楚的地方,還請各位指正!