蓝牙BLE传输性能及延迟分析-程序员宅基地

技术标签: 移动开发  嵌入式  

BLE传输性能主要受以下几个因素影响:操作类型,Connection Interval,每个Connection Event内发送的帧数、每一帧数据的长度。具体参见如下链接:

https://en.wikipedia.org/wiki/Bluetooth_low_energy

https://devzone.nordicsemi.com/question/3440/how-do-i-calculate-throughput-for-a-ble-link/

https://atmosphere.anaren.com/wiki/Data_rates_using_BLE

https://punchthrough.com/blog/posts/maximizing-ble-throughput-on-ios-and-android

目前的一个项目对BLE传输性能有较高要求,将以上几个因素逐一确认,使用协议支持的最优值,其中Connection Interval设置为7.5ms,每一帧数据长度为20字节,每个Connection Event根据业务需要设置为2,依此计算出的理论传输速度约为5600Bps。为了测试实际效果,在Android端写了一个小程序,将数据流和时间戳打印出来,如下:

[21]:TS 238.794720 PN 20780 [1]:
[21]:TS 238.795954 PN 20780 [2]:
[21]:TS 238.802182 PN 20781 [1]:
[21]:TS 238.802373 PN 20781 [2]:
[21]:TS 238.810432 PN 20782 [1]:
[21]:TS 238.832608 PN 20782 [2]:
[21]:TS 238.832650 PN 20783 [1]:
[21]:TS 238.832728 PN 20783 [2]:
[21]:TS 238.832751 PN 20784 [1]:
[21]:TS 238.832820 PN 20784 [2]:
[21]:TS 238.832843 PN 20785 [1]:
[21]:TS 238.833862 PN 20785 [2]:
[21]:TS 238.839201 PN 20786 [1]:
[21]:TS 238.839403 PN 20786 [2]:
[21]:TS 238.848280 PN 20787 [1]:
[21]:TS 238.848894 PN 20787 [2]:
……
[21]:TS 288.128815 PN 27346 [1]:
[21]:TS 288.128977 PN 27346 [2]:
[21]:TS 288.136323 PN 27347 [1]:
[21]:TS 288.136908 PN 27347 [2]:
[21]:TS 288.159292 PN 27348 [1]:
[21]:TS 288.159569 PN 27348 [2]:
[21]:TS 288.159922 PN 27349 [1]:
[21]:TS 288.165079 PN 27349 [2]:
[21]:TS 288.167879 PN 27350 [1]:
[21]:TS 288.168157 PN 27350 [2]:
[21]:TS 288.173809 PN 27351 [1]:
[21]:TS 288.173906 PN 27351 [2]:

其中21为数据长度、TS为时间戳、PN为包号,1和2是一个Connection Event内的包的类型。可以看到,一般情况下,一个Connection Event发送两帧数据,这两帧数据的时间间隔在1ms以内,两个Connection Event之间的时间间隔约为7ms。为了直观呈现测试结果,在PC端写了一个工具以分析抓取的LOG,主要根据包号、包的类型、字节长度和时间戳,统计丢包率和传输速度,如下图所示。

可以看到,一共传输了约16.3万个包,没有数据丢失,两帧之间最大时间间隔约为22.384ms,最大传输速度为5641Bps,平均速度约为5583Bps,与理论值(5600Bps)相差不多。Connection Interval对传输性能的影响对比下图,其Connection Interval为11.25ms。

BLE传输延迟(Latency)主要是指设备端将数据放至蓝牙协议栈到Android主机收到的时间间隔。由于通信双方时间戳不统一,无法按照前面通过打印时间戳的方式来做统计传输延迟,只能通过硬件信号做同步。设备端将数据放至蓝牙协议栈时给出一个信号,Android主机收到该数据时也给出一个信号,使用示波器抓取两个信号即可得到数据通过蓝牙BLE传输的延迟,如下图所示。

Channel3为发送端的信号,Channel2为接收端的信号,可以看到BLE传输延迟约为8ms左右,会上下波动。

数据传输延迟还跟Android端软件读取数据的均匀程度有关,Android端软件需及时将数据从缓存中读取出来,否则也会造成一定的延迟。评估数据读取均匀程度的方法同上,也是通过示波器抓取波形来看,如下图所示。

其中1通道为设备端发送数据,2通道为Android端读取数据,双方节奏基本保持一致,确保了及时读取和分发设备端上报的数据。

本文主要是通过打流和抓波形的方法,验证了蓝牙BLE的传输性能和延时。实际调试过程中还可以使用FTS4BT工具分析btsnoop_hci.log文件,以探究BLE建立链接、Update Parameters和数据传输等细节。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33968104/article/details/85843353

智能推荐

数据结构实践原码--1--(参考书籍清华大学“数据结构”作者严尉敏)_清华数据结构实习1-程序员宅基地

文章浏览阅读2.4k次。操作系统:中文WINDOWS2000开发工具:VC6语言:C实践一:顺序表实现原码下载源码如下:main.c /**//* 程序名称:线性表(顺序表)实现。 说明: 参考书目:> 这个程序只是完成顺序表原理的,一些简单实 现所以并不十分的完善。 设计者:高玉涵 地点: 郑州大学。 设计时间:20_清华数据结构实习1

win10安装c++ build tools_microsoft c++ build tools-程序员宅基地

文章浏览阅读4.7k次。windows安装microsoft visual c++ build tools_microsoft c++ build tools

Linux安装rpm包时报错MySQL-server-5.6.42-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 50_linux perl(data::dumper) is needed by-程序员宅基地

文章浏览阅读4.6k次。Linux下搭建Java web开发环境详解:https://blog.csdn.net/qq_31708763/article/details/86366445报错:warning: MySQL-server-5.6.42-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYerror: Faile..._linux perl(data::dumper) is needed by

鲲鹏BoostKit虚拟化使能套件,让数据加密更安全_鲲鹏boostkit 国密加解密-程序员宅基地

文章浏览阅读1.8k次。摘要:借助华为鲲鹏BoostKit虚拟化使能套件(简称鲲鹏BoostKit虚拟化),可加速迈向云计算之旅。本次KAE加速引擎让数据加密更安全直播将介绍鲲鹏BoostKit加速库全景,基于BoostKit加速库在WEB、大数据和分布式存储等典型应用场景的性能优化实践。_鲲鹏boostkit 国密加解密

ubuntu编写shell并做成定时任务脚本_ubuntu sh文件编写-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏13次。ubuntu编写shell并做成定时任务脚本_ubuntu sh文件编写

Xcode12.5编译RN项目报错(Cannot initialize a parameter of type ‘NSArray<id<RCTBridgeModule>> *‘ with an...)_cannot initialize a parameter of type 'nsarray<id<-程序员宅基地

文章浏览阅读2k次。Xcode升级到12.5后,在编译RN项目的时候,报出了下面的错误,大致猜测应该是类型不对导致的失败。/Users/xxxxx/node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm:330:34: Cannot initialize a parameter of type 'NSArray<id<RCTBridgeModule>> *' with an rvalue of type 'NSArray<Cla_cannot initialize a parameter of type 'nsarray> *' with

随便推点

Vue Router-程序员宅基地

文章浏览阅读931次,点赞23次,收藏25次。Vue Router

Java常用API总结_java常用的api-程序员宅基地

文章浏览阅读942次,点赞23次,收藏22次。包括基本数据类型的包装类、String类、Object类等。:包括List、Set、Map等。常用的有ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。:包括字节流和字符流的API,常用的有InputStream、OutputStream、Reader、Writer等。:包括Socket和ServerSocket等。:包括多线程编程的API,如Thread、Runnable、Executor、Semaphore等。_java常用的api

c++资源大全_essentially c++-程序员宅基地

文章浏览阅读2k次。Standard LibrariesC++ Standard Library - including STL Containers, STL Aglorithm, STL Functional, etc.C++ Standard Library - A collection of classes and functions, which are written in the c_essentially c++

起文件名字的重要性_file "portscan.py", line 50, in <module>-程序员宅基地

文章浏览阅读717次。开始自己写python代码拉。一脸懵逼 0 0遇到了一个问题 我只是想试试键盘输入,控制台输出。。。就各种报错 。。。 难道是print格式有问题???正处于2和3的混乱中。。。print ‘h'不行吗。。那么print('h')呢。。。 后来改成了纯纯的print。。。依旧不行,,, 怀疑人生 。。。 百度报错:fatal Pyth..._file "portscan.py", line 50, in

怎么设置计算机网络打印机共享,如何设置网络打印机,详细教您怎么设置共享打印机...-程序员宅基地

文章浏览阅读1.6k次。当今社会下,打印机已经是正常办公中必不可少的设备,但由于资源的情况,不可能没人都有台打印机。这时只需连接打印机的电脑将打印机共享,在同一个局域网内的同一工作组的计算机用户即可连接这台共享的打印机使用。那么共享打印机要怎么设置?下面,小编给大家带来了设置共享打印机的图文操作。共享打印机是一种很常见的小型办公环境下使用打印机的办法。对于XP系统,很多人都知道如何设置,现成的教材也较多,对于操作系统则不..._打印机联网共享打印设置

语音神经科学—02.Speech synthesis from neural decoding of spoken sentences_opala ak,josh c,edward cf.speech synthesisfrom neu-程序员宅基地

文章浏览阅读997次,点赞14次,收藏26次。研究者设计了一个神经解码器,明确地利用人类大脑皮层活动中编码的运动学和声音表征来合成可听的语音。针对严重瘫痪或者由语言障碍的病人,我们需要研究一个高效的交流方式来帮助他们交流。而目前最快的方法就是直接从大脑皮层的神经活动中解码出语音。本文作者提出了一个两阶段的解码器,先从脑电信号中解码出口腔运动学表征,再从口腔运动学表征中解码出声学特征,最后合成语音信号。作者在本文中对解码器的效果做了大量的实验进行分析,比如频谱图,中值频谱图。作者也设计了听觉任务,对合成的语音进行测试。_opala ak,josh c,edward cf.speech synthesisfrom neuraldecoding of spoken sent

推荐文章

热门文章

相关标签