Javascript 提高Tizen设备上心跳传感器返回值的精度
我想实现的是,尝试提高Tizen智能手表心跳传感器返回值的精确度。 这些值是64个数字,因为语言是Javascript。 我尝试使用如下函数:Javascript 提高Tizen设备上心跳传感器返回值的精度,javascript,floating-point,precision,ros,tizen,Javascript,Floating Point,Precision,Ros,Tizen,我想实现的是,尝试提高Tizen智能手表心跳传感器返回值的精确度。 这些值是64个数字,因为语言是Javascript。 我尝试使用如下函数: function strip(interval) { return (parseFloat(interval).toPrecision(4)); } 但是没有成功。也许我做错了什么,比如说犯了一些编程错误,我真的不知道。显然,IDE编译和构建包安装没有问题,但是我看不出有什么不同,包括或不包括这个函数。 我将在下面发布我的全部代码。请检查何时创建函数条
function strip(interval) {
return (parseFloat(interval).toPrecision(4));
}
但是没有成功。也许我做错了什么,比如说犯了一些编程错误,我真的不知道。显然,IDE编译和构建包安装没有问题,但是我看不出有什么不同,包括或不包括这个函数。
我将在下面发布我的全部代码。请检查何时创建函数条带
。我使用了escamotageif(interval!==0){
间隔屏幕=间隔;
}
因为我不想打印零。请注意,我希望流向ROS主题HeartRateInterval的变量保持浮动;这就是为什么我还使用了parseFloat函数。
非常感谢。
代码:
我是否遗漏了一些东西,但我找不到你在哪里调用这个新函数? 为什么要在onchangedCB函数中内联创建它 看起来好像您希望调用该函数,因为您在那里声明了该函数,并调用了与interval变量相同的参数。这将不起作用(据我所知,在任何编程语言中) 然后我将尝试调用函数parseFloat(interval).toPrecision 直接而不是把它放在另一个函数中 但我更感兴趣的是: 这里是hrmInfo.rRInterval/1000 原始值偏离了一千 去掉这个除法(比如这个var interval=hrmInfo.rRInterval;),看看小数点所在的位置是否有更多的数字
我无法从你的例子中弥补,但如果值通常是120/分钟左右。如果您想知道后面是否有更精确的值,那么该值现在应该看起来像1200054如果它一直都是像120000这样的零,那么创建该事件的系统不会给出更精确的度量。感谢您的回复!是的,事实上它不叫。当然,这是一个错误。我会试着直接打电话给它。我需要这个除法,因为它不是每分钟心跳(bpm),而是两次连续心跳之间的时间。而且,由于传感器以毫秒为单位给出值,但我需要以秒为单位,所以我必须将它们除以。您好,您认为传感器的精度可能无法提高吗?我还有一个来自传感器的数据的奇怪行为;似乎只有偶数的值被打印出来,我不知道为什么。如果没有记录和挖掘数据,很难说。如果我将您提供的有关此设备的信息与代码结合起来。说明:on onchangedCB被触发以提供心率的更新,并且hrmInfo.heartRate已经是标准化为BPM的心率,那么可能hrmInfo.rRInterval对您没有帮助,除非您知道在这些间隔之间实际测量了什么。如果您想“改善”读数,则需要两个可能导致BPM的变量。(间隔+节拍此间隔)乘以bij一分钟内适合的间隔数。另一种方法是,取2个或更多间隔之间的BPM和BPM差。将数据标准化,以在较短的时间内(例如,BPS或每间隔拍数)计算出该值的含义。并将其转换回您想要的值(例如,节拍之间带小数或毫秒的BPM)。但是,如果事件不是每分钟调用一次,则这将不起作用。所以我会去尝试找出哪些变量是可用的。获取一些测试数据,把它放在Excel或纸上,然后做一些手工数学来计算你能达到的目标。恐怕我不理解你的第一条新评论。我的意思是,我已经有两种类型的数据,可以通过这个设备实现。hrmInfo.heartRate和hrmInfo.rRInterval分别是BPM和下两次心跳之间的时间。我可以在开发者网站的TizenWiki上这样说。这就是您必须调用这些数据的方式,因为它们取决于硬件和IDE语法。也许我误解了你的评论。非常感谢。我尝试使用
interval.toPrecision(4)代码>直接在var interval=hrmInfo.rRInterval/1000之后代码>但没有任何更改。我还尝试了parseFloat(interval).toPrecision(4)代码>具有相同的结果@RC NL
document.addEventListener('tizenhwkey', function(e) {
if(e.keyName === "back")
window.webapis.motion.stop("HRM");
tizen.application.getCurrentApplication().exit();
});
function Connect(){
var ip;
var connection=false;
var interval_screen = 0;
if (document.getElementById("ip").value==="")
{
ip="10.42.0.1";
}
else
{
ip=document.getElementById("ip").value;
}
var ros = new ROSLIB.Ros({
url : 'ws://' + ip +':9090'
});
ros.on('connection', function() {
connection=true;
document.getElementById("Connection_status").setAttribute("color","green");
document.getElementById("Connection_status").innerHTML = 'Connected';
tizen.power.request("SCREEN", "SCREEN_DIM");
});
ros.on('error', function(error) {
document.getElementById("Connection_status").setAttribute("color","orange");
document.getElementById("Connection_status").innerHTML = 'Error';
});
ros.on('close', function() {
document.getElementById("Connection_status").setAttribute("color","red");
document.getElementById("Connection_status").innerHTML = 'Unconnected';
connection=false;
tizen.power.release("SCREEN");
});
var RatePub = new ROSLIB.Topic({
ros : ros,
name : '/HeartRateData',
messageType : 'std_msgs/Float64'
});
var IntervalPub = new ROSLIB.Topic({
ros : ros,
name : '/HeartRateInterval',
messageType : 'std_msgs/Float64'
});
window.webapis.motion.start("HRM", onchangedCB);
function onchangedCB(hrmInfo)
{
var rate = hrmInfo.heartRate;
document.getElementById("mytext").innerHTML = 'Heart Rate= ' + rate + ' bpm';
var interval = hrmInfo.rRInterval/1000;
function strip(interval) {
return (parseFloat(interval).toPrecision(4));
}
if (interval !== 0) {
interval_screen = interval;
}
document.getElementById("mytext1").innerHTML = 'RR Interval= ' + interval_screen + ' s';
var Float64 = new ROSLIB.Message({
data:rate
});
if(connection===true)
{
RatePub.publish(Float64);
}
else
{
document.getElementById("mytext").innerHTML = 'Heart Rate = 0 bpm';
}
var Float64 = new ROSLIB.Message({
data:interval
});
if(connection===true)
{ if (interval !== 0) {
IntervalPub.publish(Float64);
}
else {
}
}
else
{
document.getElementById("mytext1").innerHTML = 'RR Interval = 0 s';
}
}}