具体实施方式
本申请说明书和权利要求书及附图说明中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于限定特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
电子设备中的处理器读取传感器数据的方式主要有硬中断、软件轮询等。当电子设备采用软件轮询的方式读取传感器数据时,ODR精度主要依赖于处理器的时钟精度,因此ODR较为准确。而硬中断的方式读取传感器数据时,则主要依赖于传感器时钟系统的精度。
其中,ODR可以理解为是单位时间内上报的传感器数据的帧数。例如,ODR为10HZ时,传感器内的FIFO存储器每一秒会接收到10帧传感器数据。而传感器上报硬中断的频率则可以与ODR不相同。例如,传感器可以是每1秒产生一次硬中断。当ODR为10HZ时,FIFO则是每缓存10帧传感器数据,上报一次硬中断给处理器。
传感器的ODR误差主要是传感器的时钟系统误差导致的。具体的,传感器的时钟精度主要受传感器内的振荡器误差影响。传感器内部的振荡器一般由RC振荡电路构成,虽然成本较低,但精度通常较差。RC振荡电路中的电阻阻值误差通常在5%,电容误差可达20%,进而导致传感器的时钟精度较差,进而影响到了ODR精度,某些传感器的ODR甚至可达10%以上。
当传感器ODR误差较大时,说明传感器上报传感器数据时的实际ODR,与原本传感器标定的ODR相差较大。而某些应用程序内部的算法、模型等,仅适用于按照目标ODR上报的传感器数据。其中,目标ODR为上层应用所需的传感器的ODR。虽然目标ODR与传感器标定的ODR通常是相同的,但传感器ODR误差较大时,传感器上报数据的实际ODR与目标ODR相差较大,即传感器没有按照目标ODR上报传感器数据,进而导致某些应用程序可能会性能变差,甚至出现功能性故障。
举例说明,图1示出的智能手表101中包括有处理器1011和加速度传感器1012。加速度传感器1012通过硬中断的方式向处理器1011上报加速度数据,处理器1011运行的计步应用程序使用上报的加速度数据,通过计步算法从加速度数据中提取出步态特征的方式,实现计步功能。其中,计步应用程序中的计步算法适用于处理按照ODR为75HZ上报的加速度数据,即目标ODR为75HZ。在图1示出的(1)中,加速度传感器1012上报数据的实际ODR接近于目标ODR,实际ODR为74HZ,因此处理器1011能够正常实现计步功能,在经过处理器1011处理之后,智能手表101的显示界面上显示的计步是准确的。而图1示出的(2)的场景中,加速度传感器1012存在较大的ODR误差,实际ODR为69HZ,上报数据时的实际ODR与目标ODR偏差较大,而处理器1011中运行的计步应用程序并不适用于处理ODR为69HZ的加速度数据,因此处理器使用了加速度数据后,智能手表101的显示界面上显示的计步结果并不准确。
其中,除了图1示出的智能手表之外,手机、平板电脑等电子设备中同样也存在因传感器ODR误差较大,而导致出现功能性故障的问题,本申请实施例不再一一列举。
为了使得上层应用程序能够正常实现特定功能,本申请实施例提出的一种传感器数据的处理方法,通过对实际ODR下的传感器数据进行校正,得到目标ODR下的传感器数据,然后将校正得到的目标ODR下的传感器数据,提供给上层应用程序使用。
本申请实施例提出的传感器数据的处理方法,可以应用于手机、平板电脑、桌面型、膝上型、笔记本电脑、超级移动个人计算机(Ultra-mobile Personal Computer,UMPC)、手持计算机、上网本、个人数字助理(Personal Digital Assistant,PDA)、可穿戴电子设备、智能手表、头戴虚拟现实眼镜(Virtual Reality,VR)、医疗设备、内部集成有处理器的传感器等电子设备中。
如图2所示,本申请实施例的电子设备可以包括处理器210,外部存储器接口220,内部存储器221,通用串行总线(universal serial bus,USB)接口230,充电管理模块240,电源管理模块241,电池242,天线1,天线2,移动通信模块250,无线通信模块260,传感器模块270,显示屏280,以及用户标识模块(subscriber identification module,SIM)卡接口290等。其中传感器模块270可以包括压力传感器270A,陀螺仪传感器270B,气压传感器270C,磁传感器270D,加速度传感器270E,距离传感器270F,接近光传感器270G,指纹传感器270H,温度传感器270J,触摸传感器270K,环境光传感器270L,骨传导传感器270M等。
可以理解的是,本实施例示意的结构并不构成对电子设备的具体限定。在另一些实施例中,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器210可以包括一个或多个处理单元,例如:处理器210可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。例如,在本申请中,处理器210可以获取传感器模块270上报的一组原始传感器数据,然后使用一组原始传感器数据执行本申请实施例提出的任一传感器数据的处理方法,传感器数据的处理方法的执行过程和原理可参考下述图4的相关部分。
其中,控制器可以是电子设备的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器210中还可以包括智能传感集线器(Sensor hub)210A,用于连接并处理来自各种传感器模块270中的传感器的数据。例如,在本申请实施例中,智能传感集线器210A连接并接收传感器模块270发送的一组原始传感器数据,根据一组原始传感器数据执行本申请实施例提出的任一传感器数据的处理方法,具体执行过程和原理可参见下述和图4中对传感器数据的处理方法的描述,此处不再赘述。
处理器210中还可以设置存储器,用于存储指令和数据。在一些实施例中,该存储器可以保存处理器210刚用过或循环使用的指令或数据。如果处理器210需要再次使用该指令或数据,可从所述存储器中直接调用。
在一些实施例中,处理器210可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口等。
可以理解的是,本实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备的结构限定。在本申请另一些实施例中,电子设备也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块240用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。
电源管理模块241用于连接电池242,充电管理模块240与处理器210。电源管理模块241接收电池242和/或充电管理模块240的输入,为处理器210,内部存储器221,显示屏280,和无线通信模块260等供电。
电子设备的无线通信功能可以通过天线1,天线2,移动通信模块250,无线通信模块260,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。
移动通信模块250可以提供应用在电子设备上的包括2G/3G/4G/5G等无线通信的解决方案。
无线通信模块260可以提供应用在电子设备上的包括无线局域网(wirelesslocalarea networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。
显示屏280用于显示图像,视频等。
外部存储器接口220可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备的存储能力。外部存储卡通过外部存储器接口220与处理器210通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器221可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器210通过运行存储在内部存储器221的指令,从而执行电子设备的各种功能应用以及数据处理。例如,在本实施例中,处理器210可以通过执行存储在内部存储器221中的指令,实现本申请实施例提出的任一传感器数据的处理方法,具体执行过程和原理可参见下述图4中对传感器数据的处理方法的描述,此处不再赘述。
压力传感器270A用于感受压力信号,可以将压力信号转换成电信号。
陀螺仪传感器270B可以用于确定电子设备的运动姿态。
气压传感器270C用于测量气压。在一些实施例中,电子设备通过气压传感器270C测得的气压值计算海拔高度,辅助定位和导航。
磁传感器270D包括霍尔传感器。电子设备可以利用磁传感器270D检测翻盖皮套的开合。
加速度传感器270E可检测电子设备在各个方向上(一般为三轴)加速度的大小。
距离传感器270F,用于测量距离。
接近光传感器270G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。
环境光传感器270L用于感知环境光亮度。电子设备可以根据感知的环境光亮度自适应调节显示屏280亮度。
指纹传感器270H用于采集指纹。电子设备可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
温度传感器270J用于检测温度。在一些实施例中,电子设备利用温度传感器270J检测的温度,执行温度处理策略。
触摸传感器270K,也称“触控器件”。触摸传感器270K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。
骨传导传感器270M可以获取振动信号。在一些实施例中,骨传导传感器270M可以获取人体声部振动骨块的振动信号。骨传导传感器270M也可以接触人体脉搏,接收血压跳动信号。在一些实施例中,应用处理器可以基于所述骨传导传感器270M获取的血压跳动信号解析心率信息,实现心率检测功能。
在本实施例中,传感器模块270中的任意一个或多个传感器可以上报一组原始传感器数据至处理器210,具体过程可参见图4中的步骤S401的相关内容,此处不再赘述。
SIM卡接口290用于连接SIM卡。SIM卡可以通过插入SIM卡接口290,或从SIM卡接口290拔出,实现和电子设备的接触和分离。电子设备可以支持1个或N个SIM卡接口,N为大于1的正整数。
另外,在上述部件之上,运行有操作系统。例如iOS操作系统,Android开源操作系统,Windows操作系统,鸿蒙系统等。在该操作系统上可以安装运行应用程序。
电子设备的操作系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备的软件结构。
图3是本申请实施例的电子设备的软件结构框图。
分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
应用程序层可以包括一系列应用程序包。如图3所示,应用程序包可以包括相机,图库,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。例如,在本申请实施例中,应用程序包还可以包括计步器,ODR校正模块所得到的一组目标加速度数据可以提供给计步器,由计步器应用程序包使用一组目标加速度数据实现计步功能。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。如图3所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。
电话管理器用于提供电子设备的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。
Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(Media Libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。
2D图形引擎是2D绘图的绘图引擎。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。在本申请实施例中,内核层还可以包括ODR校正模块。ODR校正模块可以执行本申请实施例提出的任一传感器数据的处理方法,以得到一组目标传感器数据,再将目标传感器数据提供给应用程序层中的应用。例如,ODR校正模块可以通过执行本申请实施例提出的任一传感器数据的处理方法,得到一组目标加速度数据,将目标加速度数据提供给计步器应用。
具体可参考图4示出的传感器数据的处理方法的相关内容,此处不再赘述。需要说明的是,ODR校正模块还可以在应用程序框架层或者系统库。本申请实施例对于ODR校正模块在软件框架中所处的位置不做限制。
需要说明的是,本申请实施例虽然以Android系统为例进行说明,但是其基本原理同样适用于基于iOS、Windows、或者鸿蒙等操作系统的电子设备。
参阅图4,本申请的实施例提出了一种传感器数据的处理方法,应用于本申请实施例在前述提及的电子设备,具体包括以下步骤:
S401、获取当前传感器上报的一组原始传感器数据。
为了描述更为简洁,本申请实施例中用数组A[m]来表示当前传感器上报的一组原始传感器数据,其中,m为上报的传感器数据的个数。例如,当传感器为加速度传感器时,上报的一组传感器数据A[m]为10帧x轴的加速度数据,则m为10。本申请实施例中的一组原始传感器数据,指的是数据类型相同的一组原始传感器数据。例如可以是一组x轴的加速度数据,也可以是一组y轴的加速度数据,而本申请实施例中对于一组原始传感器数据的数据类型并不做限制。本申请实施例中的原始传感器数据,指的是传感器上报的、未经过任何调整处理过的传感器数据,也可以理解为是传感器按照实际ODR上报的传感器数据。
其中,传感器上报的数组A[m]中的传感器数据是按照传感器上报时间顺序排列的。具体的,在电子设备中,传感器内部的FIFO按照上报给FIFO存储器的时间顺序缓存了m帧传感器数据之后,再由FIFO存储器上报给处理器。处理器即可得到一组按照时间顺序排列的传感器数据A[m]。
在一些实施例中,执行步骤S401的过程可以是:电子设备中的传感器按照预设的硬中断频率向处理器上报多组原始传感器数据。当传感器向处理器发送硬中断请求时,电子设备中的处理器在当前接收到传感器上报的硬中断请求之后,响应硬中断请求,硬中断请求中读取到传感器上报的一组原始传感器数据A[m],获取到A[m]。
处理器的技术原理方面的相关描述可以参考图2示出的处理器210,此处不再赘述。本申请实施例对于传感器的具体类型、功能等不做限制,例如可以是图2示出的传感器模块270中的任一传感器。在另一些实施例中,处理器可以通过ODR校正模块获取到数组A[m]。其中,ODR校正模块的技术原理方面的相关描述,可以参考图3示出的ODR校正模块的相关部分,此处不再赘述。
在另一些实施例中,步骤S401中除了获取到了数组A[m],还获取到了数组A[m]对应的上报时间戳。数组A[m]对应的上报时间戳指的是传感器上报数组A[m]的时间。
S402、确定出传感器的实际ODR。
其中,实际ODR指的是传感器实际上报传感器数据的频率。当传感器存在ODR误差时,传感器的实际ODR可能会与传感器本身标定的ODR不相等,因此需要确定出传感器的实际ODR。
在一些实施例中,执行步骤S402的一种实施方式为:根据数组A[m]对应的时间长度、以及数组A[m]中的数据总数,计算得到实际ODR。示例性的,可以将当前一组原始传感器数据对应的上报时间戳与上一组原始传感器数据对应的上报时间戳相减,计算得到数组A[m]对应的时间长度。数组A[m]对应的时间长度可以理解为是传感器上报当前一组原始传感器数据对应的时间长度。然后将当前一组原始传感器数据的数据总数除以数组A[m]对应的时间长度,得到实际ODR,即传感器每秒上报原始传感器数据的总数。例如,传感器上报给处理器的上一组原始传感器数据的上报时间戳为16:00,上报的当前一组原始传感器数据的上报时间戳为16:01,那么上报的当前一组原始传感器数据对应的时间长度为1分钟,而当前一组原始传感器数据的个数有120个时,计算出实际ODR等于120除以60,即2HZ。本实施例中,每一次执行完步骤S401之后,均需要重新计算一次传感器当前的实际ODR,以提前计算出的实际ODR的准确度。
在另一些实施例中,传感器的实际ODR也可以是通过历史时间长度、以及历史时间长度下传感器上报的数据总数预先计算得到。示例性的,将历史时间长度下传感器上报的数据总数除以历史时间长度,计算得到实际ODR。示例性的,历史时间长度可以是通过任意的两个历史上报时间戳确定。将任意两个历史上报时间戳作差,即可得到历史时间长度。其中,历史上报时间戳为历史上报一组传感器数据时的时间。而历史时间长度下传感器上报的数据总数可以理解为是前述提及的两个历史上报时间戳之间上报的原始传感器数据的总数。
举例说明,第三组原始传感器数据的上报时间戳为16:00,第五组原始传感器数据的上报时间戳为16:01,因此两个历史上报时间戳之间的差值为60秒,16:00至16:01之间的原始传感器数据的总数,为第四组数据和第五组数据的数据总数。第四组数据和第五组数据总共有100个,因此实际ODR为1.67HZ。由于实际ODR可以是预先计算得到的,因此在执行完步骤S401之后,也可以不用再执行步骤S402,即实际ODR不需要重新确定。其中,连续上报的多组原始传感器数据的具体组数、以及选取出连续上报的多组原始传感器数据的方式可不作限制。
当传感器的时钟系统误差越大,计算出的实际ODR与传感器本身标定的ODR的差值就会越大,当传感器的ODR误差越小时,计算出的实际ODR与传感器本身标定的ODR的差值就会越小。
S403、根据当前的一组原始传感器数据、目标ODR、以及实际ODR,计算得到一组目标传感器数据。
其中,目标传感器数据为预估传感器按照目标ODR上报时对应的传感器数据。目标ODR为电子设备中的上层应用所需的传感器数据的ODR,目标ODR可以与传感器标定的ODR相等,也可以与传感器标定的ODR不相等。目标ODR可以是预先根据应用的需求预设好的值,目标ODR的值可根据应用需求进行调整。
已知数组A[m]为传感器按照实际ODR频率上报的一组传感器数据,而数组A[m]中的传感器数据又是按照上报时间顺序排列的,进而可以将数组A[m]中的数据按照实际ODR频率拟合成一条曲线,该曲线相当于是传感器在缓存A[m]中的原始传感器数据的时段内,传感器数据的变化曲线。而在该变化曲线上,可以求取出当传感器的ODR为目标ODR时,在该时段内数组B[n],即一组目标传感器数据。为了描述更为简洁,以下将一组目标传感器数据称作B[n]。其中,n是传感器在上报当前一组原始传感器数据的时段内,按照目标ODR频率所上报的数据个数。
例如,如图5所示,当数组A[m]为加速度传感器某轴的加速度数据,且实际ODR为10HZ时,可按照A[m]中的加速度数据的排列顺序,以相等的时间间隔排列绘制出图5中的大点。其中,横坐标为时间,纵坐标为加速度数据。图5中通过连接各个大点所拟合出的曲线,可以理解为是传感器内部在上报A[m]中的数据的时段内的加速度数据的变化曲线。而当目标ODR为12HZ时,则可以在上报A[m]中的数据的时段内的曲线上,按照目标ODR选取出多个小点,这一系列小点对应的加速度数据即为数组B[n],即目标传感器数据。
由前述内容可知,计算得到一组目标传感器数据的过程,可以简化为已知数组A[m],以及数组A[m]对应的实际ODR,求取与数组A[m]在同一变化曲线下的在目标ODR下上报的数组B[n]。
示例性的,可以通过数组A[m]、实际ODR以及目标ODR,使用插值算法,计算出数组B[n]中的各个目标传感器数据。如图6所示,图6中的大点是按照实际ODR上报的数据A[m],小点则是预估出的按照目标ODR上报的数组B[n]。对于数组B[n]中的任意一个数据B[y],B[y]会位于数据A[m]中的A[x]和A[x+1]之间,因此,通过插值算法,即可输出B[y]的值。其中,本申请实施例中的m、n、x、y为自然数,且m≥x≥0,n≥y≥0。
示例性的,可以通过一次函数插值算法去计算数组B[n]中的各个目标传感器数据。
具体的通过一次函数插值算法去计算数组B[n]的过程为:
先求取数组A[m]的时间长度δt,δt可以理解为是传感器在上报A[m]中的原始传感器数据的时段的长度。本申请实施例中,数组A[m]的时间长度δt与数组B[n]的时间长度是一致的。因此可以推导出公式一为:
其中,m为一组原始传感器数据的个数,n为一组目标传感器数据的个数,Fc为实际ODR,Fg为目标ODR。
进而对公式一进行变形后,可得出公式二:n=【Fg*δt+0.5】,其中,“【】”为向下取整符,即取比计算出的数值小的最大整数,例如计算出3.2,则取3。
如图6所示,假设A[x]为数组A[m]中的第x个元素,A[x+1]为数组A[m]中的第x+1个元素,且B[y]在A[x]、A[x+1]两个元素连接成的曲线上,A[x]所在的时间点
A[x+1]所在的时间点
B[y]所在的时间点
则t1≤t0≤t2,即
且x为自然数,可知:
其中,“【】”为向下取整符。
进一步分析:
当y=0时,B[0]=A[0]。
当n≥y>0时,B[y]在A[x]与A[x+1]这段曲线之间,用一次函数插值方法简化得到的公式三为:
将
以及
代入到公式三中,可得公式四为:
然后将n=【Fg*δt+0.5】代入至公式五,得到公式六:
当y=0时,B[0]=A[0]。当n≥y>0时则使用公式六可计算出数组B[n]。
需要说明的是,当传感器的实际ODR越大时,使用插值算法估计出的目标传感器数据就会越准确。因为实际ODR越大,单元时间内采集上报的原始传感器数据越多,插值算法的误差就越小。还需要说明的是,公式六仅为一种一次函数插值算法的具体计算方式,还存在有其他计算方式的一次函数插值算法、或者多次函数插值算法,可计算得到数组B[n],本申请实施例不作赘述。
还需要说明的是,由前述可以通过一次函数插值算法去计算数组B[n]中的各个目标传感器数据的过程可以看出,本申请实施例中是先根据一组原始传感器数据A[m]的时间长度δt和目标ODR,计算得到一组目标传感器数据B[n]的数据总数n。其中,一组原始传感器数据的时间长度为一组原始传感器数据的数据总数与实际ODR的比值。然后再将实际ODR、目标ODR、一组原始传感器数据的时间长度δt、一组原始传感器数据的数据总数m、一组目标传感器数据的数据总数n、以及一组原始传感器数据A[m]代入至插值算法中,计算得到一组目标传感器数据。
如图7a、图7b以及图7c所示,图7a的点为步行状态下,加速度传感器在实际ODR下上报的x轴原始加速度数据。图7b的点为通过上述提及的插值算法,所预估出的在目标ODR小于实际ODR的场景下,加速度传感器按照目标ODR上报的x轴目标加速度数据。图7c的点为通过上述提及的插值算法,所预估出的在目标ODR大于实际ODR的场景下,加速度传感器按照目标ODR上报的x轴目标加速度数据。图7a、图7b、以及图7c所拟合出的曲线基本是一致的。
因此,由图7a、图7b以及图7c的试验可看出,采用本申请实施例所提出的插值算法去估计一组目标ODR下的目标传感器数据时,无论目标ODR比实际ODR小还是比实际ODR大,所估计出来的一组目标传感器数据所拟合出的曲线,与原始传感器数据所拟合出来的曲线是一致的,均能够真实还原出传感器采样的原始传感器数据的变化情况。
还需要说明的是,本申请实施例中还可以通过其他的算法,例如直接使用图像算法,从A[m]拟合的曲线图像上确定出数组B[n]。本申请实施例中,对于步骤S403具体使用的算法不做限制。
本申请实施例中,通过当前的一组原始传感器数据、当前一组原始传感器数据的数据总数、目标ODR、以及实际ODR,所计算得到的一组目标传感器数据,相当于是传感器按照目标ODR上报的一组数据,校正了由于实际ODR的误差,而导致的原始传感器数据的误差。
S404、将一组目标传感器数据提供给应用。
其中,应用的算法模型所适用的ODR为目标ODR。由于步骤S403所得到的目标传感器数据为预估传感器按照目标ODR上报时对应的传感器数据,因此目标传感器数据的ODR是满足应用的需求的,应用在接收到目标传感器数据后,可使用目标传感器数据实现特定功能。
举例说明,如图8所示,手机中的加速度传感器上报了三组原始传感器数据,三组原始传感器数据是传感器按照实际ODR上报的,分别为一组x轴的原始加速度数据、一组y轴的原始加速度数据以及z轴的原始加速度数据。然后手机中的处理器802使用前述步骤S403的方式计算后,分别得到一组x轴的目标加速度数据、一组y轴的目标加速度数据、以及z轴的目标加速度数据,处理器中的计步器应用使用了目标加速度数据之后,手机的显示屏803上显示的计步器在准确的计步。
在一些实施例中,可以通过电子设备的处理器执行图4示出的方法。示例性的,可以通过处理器在系统库的ODR校正模块执行图4示出的方法。其中,处理器的相关技术描述可参见图2中的处理器210,ODR校正模块的描述可参见图3示出的ODR校正模块,此处不再赘述。
在一些实施例中,在执行步骤S404之前,还可以对目标传感器数据进行滤波等处理操作,再将一组处理后的目标传感器数据提供给应用,以供应用使用一组处理后的目标传感器数据实现特定功能。
本申请实施例中,根据当前的一组原始传感器数据、目标ODR、以及实际ODR,计算得到一组目标传感器数据,该目标传感器数据为预估传感器按照目标ODR上报时对应的传感器数据,能够适用于应用对ODR的需求,应用使用目标传感器数据实现特定功能时,不会出现功能失效或者功能故障的情况。
本实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中包括指令,当上述指令在电子设备上运行时,使得该电子设备执行图4中的相关方法步骤,以实现上述实施例中的方法。
本实施例还提供了一种可读存储介质,其上存储有计算机程序,其中,该计算机程序被处理器执行时实现如前述任一所述的传感器数据的处理方法。
本实施例还提供了一种包含指令的计算机程序产品,当该计算机程序产品在电子设备上运行时,使得该电子设备执行如图4中的相关方法步骤,以实现上述实施例中的方法。
本实施例还提供了一种控制设备,所述控制设备包括处理器和存储器,所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,当所述处理器执行所述计算机指令时,所述控制设备执行如图4中的相关方法步骤实现上述实施例中的方法。该控制设备可以是一个集成电路IC,也可以是一个片上系统SOC。其中集成电路可以是通用集成电路,也可以是一个现场可编程门阵列FPGA,也可以是一个专用集成电路ASIC。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本实施例所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。