Javascript 提高Tizen设备上心跳传感器返回值的精度

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编译和构建包安装没有问题,但是我看不出有什么不同,包括或不包括这个函数。 我将在下面发布我的全部代码。请检查何时创建函数条

我想实现的是,尝试提高Tizen智能手表心跳传感器返回值的精确度。 这些值是64个数字,因为语言是Javascript。 我尝试使用如下函数:

function strip(interval) {
return (parseFloat(interval).toPrecision(4));
}
但是没有成功。也许我做错了什么,比如说犯了一些编程错误,我真的不知道。显然,IDE编译和构建包安装没有问题,但是我看不出有什么不同,包括或不包括这个函数。 我将在下面发布我的全部代码。请检查何时创建函数
条带
。我使用了escamotage
if(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';
        }

        }}