Bluetooth Channel Sounding中关于CS Step及Phase Based Ranging相应Mode介绍
目录
BLE CS中Step定义
BLE CS中交互的数据包/波形格式
BLE CS中Step的不同Mode
BLE CS中Step的执行过程
Mode0介绍
Mode0 步骤的作用
Mode0步骤的执行过程
Mode0步骤的执行时间
Mode0步骤的时间精度要求
Mode2介绍
Mode2步骤的作用和执行过程
Mode2步骤的执行时间
BLE CS中Step定义
BLE CS中的Step定义为BLE CS双方(initiator和reflector)一次双向交互的过程。多个相关的BLE CS Steps组成了BLE CS中的Subevent。
在BLE CS中的Step中,主要根据应用层选择的CS方法(PBR: phase based ranging 或/和 RTT: round-trip time),在BLE CS双方设备间完成射频信号的交互。
BLE CS中交互的数据包/波形格式
BLE CS中交互的数据包格式是CS过程独有的,与BLE其他过程,如广播、连接态等模式下的数据包格式都不同。
BLE CS过程中交互的数据包波形,从命名上有两种,分别是:CS_SYNC和CS Tone。在不同的CS Mode中,使用两种数据包的不同组合。CS_SYNC数据包主要是用于RTT交互使用,具有指定的格式,具体可以参考:Vol 6, Part H 2 PACKET FORMATS FOR CHANNEL SOUNDIN,如下图所示:

CS Tone波形,严格意义上来说是没有包格式说法的,因为本质上该段波形,是对芯片载波的一种ASK调制,也就是在发送阶段,直接发送的是芯片的载波正弦信号。在BLE CS的PBR功能下,大部分的Step双方只交互CS Tone波形,已完成跳频测相并计算距离。
BLE CS中Step的不同Mode
Bluetooth规范中,定义了CS过程中可以使用的4中模式(Mode),分别是Mode0~Mode3,分别作用为:
- Mode0:为RTT或者PBR,测量CS双方的频偏情况;
- Mode1:测量CS双方的RTT
- Mode2:测量CS双方由于距离导致的跳频相位变换情况,也就是这个模式才是基于相位的高精度测距模式;
- Mode3:同时测量RTT和跳频相位情况。
BLE CS Step过程中,CS双方通过空口进行通信的数据包格式由Vol 6, Part H 2 PACKET FORMATS FOR CHANNEL SOUNDING中定义。根据当前Step中收发的Mode不同,主要是CS_SYNC和Tone两种包的组合形式。
BLE CS中Step的执行过程
在每个CS的Subevent中,CS的每个Step时间宽度可能由于模式不同而不同,另外不同模式情况下,每个Subevent中包含的CS Step数量也不一定相同。因此,我们没有在常规的LL_CS_IND数据包中,看到关于BLE CS Step的Length、Interval等参数。这些参数在CS Step层面,大部分是由BLE控制器自动根据规范完成双方的约束。详细的Subevent和Step中关于Mode的时序,参考Vol 6, Part H 4.4 Channel Sounding subevent and mode sequencing。
Bluetooth中规范:在一个CS Subevent设定的T_SUBEVENT_LEN内,如果一个CS Step执行完毕后,剩余的时间超过需要执行的Step时间长度,那么LL层可以再安排一个Step,否则的话这个Subevent内的后续时间将保持空闲。下图展示了一个BLE Subevent内插入最多Step数量的情况。

BLE CS 子事件最大CS Step占用宽度
每个Subevent中最少step由N_MIN_STEPS_PER_SUBEVENT表示,规范中该值为2。而每个Subevent中最多step由N_MAX_STEPS_PER_SUBEVENT表示,规范中该值为160。而单个PROCEDURE中,不管有多少个Subevent,最大的Steps数量由N_STEPS_MAX表示,该参数规范中设定为256。
而BLE CS Step的分隔的确定方式,如下图所示。Bluetooth中规范了两个BLE CS Step直接使用物理层的频率跳频进行分割。

BLE CS Step间隔确定方法:由跳频时间固定分割
规范中留个跳频的时间定义为T_FCS,BLE硬件在这段时间内需要完成跳频、设置并稳定输出信号功率、必要的校准等动作。规范中定义了多个T_FCS值可以选择,最小值为15us,最大为150us。需要注意的是,规范中仅150us是需要所有BLE设备都强制支持的,其他都是可选支持,因此该值取决于芯片设计公司。
在一个BLE CS Procedure中T_FCS需要保持一致。另外,在T_FCS和具体的CS Step内,reflector RF端口处的信号功率要至少相差40dB以上。


由于BLE的CS本质上是提供了RTT和PBR两种测距过程。由于RTT的精度较差,此处仅关系PBR相关的Mode。
Mode0介绍
Mode0 步骤的作用
支持BLE CS的设备,必须要支持此模式,主要用于测量获得BLE CS双方的存在频率偏差。具体来说,是BLS CS中的initiator设备用此模式获得reflector设备与自身的频率偏差。获得该频率偏差后,initiator通过LE CS Subevent Result event中的Step_Data-Measured_Freq_Offset上报至Host,以便用于后续测距算法时的误差补偿。
Mode0步骤的执行过程
具体此模式下,收发双方在CS Step中的详细操作如下图所示。

首先是Initiator设备发送CS_SYNC_0_I数据包,该数据包中仅包含CS_SYNC部分,且此部分的CS_SYNC不带可选的sounding或者random sequence部分。在确定的延时之后(T_RD+T_IP1),reflector设备发送一个CS_SYNC+CS Tone数据包。Initiator设备收到reflector发送的CS_SYNC,在固定的时间窗口通过测量CS Tone,获得reflector与自身的载波偏差。
在规范中,Initiator设备测量的载波偏差称为Fractional Frequency Offset(FFO)。该FFO的测量,与当前采样的CS Tone信号以及reflector设备提供的Mode-0 FAE表格有关,具体可以参考:Vol 6, Part A 3.5.1 Fractional frequency offset,而关于Initiator和reflector的本地FAE误差校准,可以参考Vol 6, Part A 6.3 Frequency actuation error correction。
Mode0步骤的执行时间
一次Mode0双方设备的交互时间,可以通过以下方式测算。首先,Initiator发送CS_SYNC数据包。此时CS_SYNC数据包占用的时间T_SY,对于1Mpbs码率PHY,传输bit数量为8+32+4=44,对应需要44us;对于2Mbps码率PHY,传输bit数量为16+32+4=48,对应需要24us。
Initiator发送完CS_SYNC后,定义了一个5us的T_RD时间。此时间主要用于Initiator关闭RF发射机,使得空口无射频能量。规范要求CS_SYNC发送阶段和T_RD后的射频功率要至少相差40dB以上。
接下来是Initiator发送完至reflector发送前之间的空闲时间T_IP1。这段时间一般可以用于硬件的校准,或者reflector准备RF输出。规范中T_IP1也是多种值可配置。但强制要求芯片支持的仅有145us,也就是说规范中强制要求支持的T_IP1+T_RD=150us。

T_IP1空闲时间后,reflector发送CS_SYNC_0_R数据包,该数据包是CS_SYNC后外加一个CS Tone,如下图所示,具体参考:Vol 6, Part H,2.6 Channel Sounding extended packet formats。

其中CS_SYNC占用时间与Initiator发送的一致,取决于PHY码率的设置;CS_SYNC和CS Tone之间的Guard时间T_GD固定为10us;用于Initiator频率测量的CS Tone时间T_FM在Mode0中固定为80us。同样reflector发送完CS_SYNC_0_R数据包后,仍然预留了5us的T_RD时间。
需要注意的是,在BLE CS中规范了收发的Anchor Point和Offset后,在固定的CS Step中如果reflector没有收到Initiator发送的CS_SYNC数据包,那么reflector仍然需要在固定的时间上发送CS_SYNC_0_R数据包,尽管此时reflector没有收到,或者收到Initiator发送的CS_SYNC数据包有较多的误比特。
最终,我们可以计算Mode0 CS中一个Step所占用的时间为:
2*T_SY+2*TRD+TGD+TFM+TIP1
T_SY为44us或者24us,TRD固定为5us,TGD固定为10us,TFM 固定为80us,TIP1可以配置。因此Mode0步骤的执行时间最长是TIP1为强制要求的145us,此时总的Mode0执行时间约为:289us或者269us。当芯片能够支持的TIP1达到最小的10us时,总的Mode0执行时间约为:154us或者134us。
Mode0步骤的时间精度要求
如果定义
为Initiator设备在第m个step上Mode0数据包的发出时间。对应第一个Step,根据定义我们可以设定
。而整个Step执行时间分为Step时间和跳频时间T_FCS,如果PHY确定的情况下,整个Step执行时间是固定的。例如当T_FCS也满足强制执行时间150us时,整个Step执行的预测时间应该为:
![]()
该时间为439us或者419us,本质上是在Mode0步骤执行时间上增加了150us的
时间。
BLE规范中要求第m个数据包Initiator的实际发出时间
与预测时间
,在所有的Mode0 的M个Steps上要误差要小于0.25us,即:
![]()
Mode2介绍
Mode2步骤的作用和执行过程
Mode2步骤主要是实现BLE CS中PBR测距功能。
Mode2的执行过程也相对较为简单,如下图所示。先由initiator设备在规定的时间节点发送一个CS Tone,然后等规定的时间间隔后,reflector在相同的频点发送一个CS Tone。可以发现,在Mode2的执行过程中,initiator和reflector设备间是没有带调制的信息传递的。

Mode2步骤的执行时间
由上图可知,initiator设备在发送CS Tone时,所需要花费的时间为:![]()
其中:
是开关切换时间,如果单天线执行BLE CS,那就是不需要开关切换,此时
可以设置为0;但如果用到多天线进行BLE CS,那么
的时间取决于RF Switch的切换时间,规范中可以选择的
分别为1,2,4和10us,如下图所示。

是相位测量时间。规范中运行的相位测量时间分别为10us,20us和40us,其中40us是需要强制支持的时间,而前面两个是可选支持的时间。

是路径支持个数。这个参数是由于支持BLE CS的规范,是允许外置多天线进行不同路径的CS过程。这也是前面预留
进行开关切换选择传输天线的时间。目前规范中最多支持的
路径由4个,由Antenna Configuration Index进行唯一选择,如下图所示。

为了确保BLE CS中Mode2的安全攻击等级,Mode2的每个路径传输中,都插入了一个CS Tone 扩展槽位(Extension Slot),其中占用的时间与当前
时间一致,也就等效又额外增加了一个路径的传输使时间。关于Extension Slot介绍Vol 6, Part H 4.4.1 Tone extension slots,可以参考。因此,最终initiator发送CS Tone过程,需要占用的时间为:
。此时reflector在对应的时间,分别接收来自不同天线路径的initiator载波信号。
Initiator发送完所有的CS Tone后,预留了固定5us的T_RD时间来关闭Initiator的发射机。接下来,是一个收发机角色切换时间T_IP2,即initiator由发射切换到接收,而reflector由接收切换到发射。T_IP2和T_IP1一样,规范中也是有10us开始至145us有多参数可以选择,其中145us是规范中需要所有蓝牙设备必须支持的间隔,其他都是可选支持。在规范中T_IP1和T_IP2是两个独立的参数,是可以配置成不一样的数值的。


T_IP2延时时间后,那么由reflector在相同的信道上发送CS Tone,其中发送时间和initiator一致,也需要考虑天线路径个数和插入的extension slot,因此占用的时间也同样为:
![]()
最终,同样预留了5us的T_RD时间,来让reflector关闭发射机,并结束当前Mode2过程。
下面举例说明多天线路径是的Mode2过程。如果配置是选择的ACI=2,那么此时总共存在3条设备A到设备B的路径,此时
,分别对应三天线的A设备和一天线的B设备,此时对应的传输路径如下图所示。

此时Mode2的执行过程如下图所示。首先是initiator依次通过开关切换,依次在三个天线上实现了CS Tone的发送。最终预留了一个extension slot,此时天线尽管不需要切换,但是切换时间仍然需要预留。然后由CS DRBG模块决定当前slot是否要发送CS Tone。接下来就是T_RD+ T_IP2的等待时间。然后就是reflector依次向各个initiator的天线发送CS Tone,直至当前Mode结束。

最终,根据规范,Mode2执行过程需要的总时间为:
![]()
当BLE CS双方只有一条天线路径,即
时。此时
,而
选择强制支持的40us,T_IP2选择强制支持的145us,那么Mode2执行一次的时间为:315us。
另外,我们可以计算理想情况下,initiator天线发射端从开始CS Tone发射,到reflector天线端开始CS Tone发射的时间间隔应该为:
![]()
用于计算Mode2双方应该经过的理想延时,此参数将在频率误差校准中使用,具体参考:Vol 6, Part A 6.3 Frequency actuation error correction。
相关文章:
Bluetooth Channel Sounding中关于CS Step及Phase Based Ranging相应Mode介绍
目录 BLE CS中Step定义 BLE CS中交互的数据包/波形格式 BLE CS中Step的不同Mode BLE CS中Step的执行过程 Mode0介绍 Mode0 步骤的作用 Mode0步骤的执行过程 Mode0步骤的执行时间 Mode0步骤的时间精度要求 Mode2介绍 Mode2步骤的作用和执行过程 Mode2步骤的执行时间 B…...
简易STL实现 | Queue 的实现
封装: std::queue 在底层容器的基础上 提供了封装。默认情况下,std::queue 使用 std::deque 作为其底层容器,但也可以配置为使用 std::list 或 其他符合要求的容器 时间复杂度: 入队和出队操作 通常是 常数时间复杂度(…...
【hot100-java】LRU 缓存
链表篇 灵神题解 class LRUCache {private static class Node{int key,value;Node prev,next;Node (int k,int v){keyk;valuev;}}private final int capacity;//哨兵节点private final Node dummynew Node(0,0);private final Map<Integer,Node> keyToNode new HashMap&l…...
Centos7安装ZLMediaKit
一 获取代码 git clone https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init git submodule update --init 命令用于初始化和更新 Git 仓库中的子模块(submodules)。这个命令在 Git 仓库中包含对其他 Git 仓库作为依赖时…...
面试问我LLM中的RAG,咱就是说秒过!!!
前言 本篇文章涉及了 RAG 流程中的数据拆分、向量化、查询重写、查询路由等等,在做 RAG 的小伙伴一定知道这些技巧的重要性。推荐仔细阅读,建议收藏,多读几遍,好好实践。 本文是对检索增强生成(Retrieval Augmented …...
python程序操作pdf
python代码进行多个图片合并为pdf: #python代码进行多个图片合并为pdf: from PIL import Image from fpdf import FPDF import osdef images_to_pdf(image_paths, output_pdf, quality85):"""将多个图片合并为一个PDF文件,并…...
【Python报错】ImportError: DLL load failed while importing _network: 找不到指定的模块。
【Python报错】ImportError: DLL load failed while importing _network: 找不到指定的模块。 问题描述报错原因解决方案参考 问题描述 此段Python代码(在Conda环境下运行)昨天还能运行,但在我手痒更新conda(我有罪)之…...
外包干了5天,技术明显退步
我是一名本科生,自2019年起,我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定,但日复一日的重复性工作让我逐渐陷入了舒适区,失去了前进的动力。两年的时光匆匆流逝,我却在原地踏步,技术没有丝毫…...
正则表达式 | Python、Julia 和 Shell 语法详解
正则表达式在网页爬虫、脚本编写等众多任务中都有重要的应用。为了系统梳理其语法,以及 Python、Julia 和 Shell 中与正则表达式相关的工具,本篇将进行详细介绍。 相关学习资源:编程胶囊。 基础语法 通用语法 在大多数支持正则表达式的语…...
JavaScript全面指南(一)
🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南(一) 1、介绍一下JS的内置类型有哪些? 基本数据类型…...
docker-compose与docker
“docker-compose” 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个名为 docker-compose.yml 的配置文件来描述应用程序的服务、网络和卷,然后通过简单的命令就可以管理整个应用。 以下是一些常用的 docker-compose 命令及其用法: 启动…...
DDPM浅析
在机器学习和人工智能领域,生成模型一直是一个备受关注的研究方向。近年来,一种新型的生成模型——扩散概率模型(Diffusion Probabilistic Models,简称DDPM)引起了广泛的关注。本文将探讨DDPM的原理、优势以及应用。 …...
力扣刷题-算法基础
hello各位小伙伴们,为了进行算法的学习,小编特意新开一个专题来讲解一些算法题 1.移除元素. - 力扣(LeetCode) 本题大概意思是给定一个数组和一个数val删除与val相同的元素,不要改变剩余元素的顺序,最后返回剩余元素的个数。 我们在这里使用双指针,这里的双指针并不是…...
理解 Python 中的 Hooks 和装饰器
Python 中的 hooks 和装饰器,虽然它们看起来都有些魔法加成,但实际上各有妙用。下面看看他们到底是做什么的吧。 什么是 Hooks? Hooks 是指在某些操作或事件发生时,可以将自定义的代码插入和执行的一种机制。它们常用于扩展和修…...
Android 原生程序使用gdb, addr2line, readelf调试
Platform: RK3368 OS: Android 6.0 Kernel: 3.10.0 文章目录 一 gdb1. 原生程序添加调试符号2. 主机上adb push 编译好的原生程序到设备3. 设备上使用gdbserver运行原生程序4. 主机上设置adb端口转发5. 主机上运行gdb调试 二 addr2line三 readelf 一 gdb GDB(GNU…...
PHP 函数 func_num_args() 的作用
func_num_args() 是 PHP 中的一个内置函数,用于获取传递给当前用户定义函数的参数个数。这个函数特别有用于处理可变数量的参数(也称为可变参数列表)。 语法 int func_num_args ( void ) 返回值 func_num_args() 返回一个整数,…...
深入解析单片机原理及其物联网应用:附C#示例代码
深入解析单片机原理及其物联网应用:附C#示例代码 随着物联网技术的快速发展,单片机作为嵌入式系统的核心,已经广泛应用于各类智能设备中。本文将从单片机的原理出发,结合C#编程的物联网示例,带你深入了解如何利用单片…...
HTTP 和 WebSocket
目录 HTTP是什么HTTP局限性(HTTP1.1)请求和响应HTTP的主要特点:HTTP版本: HTTP与TCP关系数据封装传输过程1. **协议层次模型**:2. **封装过程**:1. **应用层(HTTP)**:2. …...
科技云报到:大模型时代下,向量数据库的野望
科技云报到原创。 自ChatGPT爆火,国内头部平台型公司一拥而上,先后发布AGI或垂类LLM,但鲜有大模型基础设施在数据层面的进化,比如向量数据库。 在此之前,向量数据库经历了几年的沉寂期,现在似乎终于乘着Ch…...
贪吃蛇游戏(代码篇)
我们并不是为了满足别人的期待而活着。 前言 这是我自己做的第五个小项目---贪吃蛇游戏(代码篇)。后期我会继续制作其他小项目并开源至博客上。 上一小项目是贪吃蛇游戏(必备知识篇),没看过的同学可以去看看…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
