Bluetooth Core 6.0中以Central设备发起Channel Sounding详细流程介绍

news/2024/9/29 5:58:40/

BLE设备间完成连接后,由发起态进入连接态的设备被称为Central device,而由广播态进入连接态的设备被称为peripheral device。当双方设备按照Vol 6, Part D:6.34 Channel Sounding setup phase完成BLE CS的设置后,双方就可以发起CS测距过程。

由Central device发起的BLE CS过程,可以参考Vol 6, Part D:6.35 Channel Sounding started by Central in initiator role。Central device通过LE CS Create Config command和LE CS Set Default Settings命令将自己设置为initiator后,Central device设备空口发送LL CS REQ,peripheral device空口回复LL CS RSP后,Central device空口发送LL CS IND,双方正式进入CS过程,如下图所示。

由peripheral device发起的BLE CS过程,可以参考Vol 6, Part D:6.36 Channel Sounding started by Peripheral in reflector role。peripheral device通过LE CS Create Config command和LE CS Set Default Settings命令将自己设置为reflector后,peripheral device空口发送LL CS REQ后,Central device空口直接发送LL CS IND,双方正式进入CS过程。

对比两种模式,主要区别在于如果是peripheral device发起的,那么会少发送一次LL CS RSP,最后都由Central device发送LL CS IND后,开始CS过程。

下面我们以Central device发起过程为例,详细介绍BLE CS过程。

BLE%20CS%E8%BF%87%E7%A8%8B%E4%B8%AD%E7%9A%84%E5%8F%82%E6%95%B0" style="margin-left:0;text-align:justify;">第一步:设置BLE CS过程中的参数

Central device通过HCI发送LE CS Set Procedure Parameters命令,参考Vol 4, Part E :7.8.140 LE CS Set Procedure Parameters command。

注意,一个Host设备可以通过执行多个上述指令,对不同的Connection_Handle和Config_ID配置不同的参数,实现BLE CS过程。

Connection_Handle

两个CS设备进入连接态后,由LE Connection Complete event事件返回的句柄。

Config_ID:

两个设备CS初始化时,通过HCI_LE_CS_Create_Config分配的CS ID。一个Central device可以和多个peripheral device实现连接,同时也可以同时创建CS过程。不过标准中将该过程限制最高为4个。后续的所有参数配置,仅对Connection_Handle下的具体Config_ID生效。

Max_Procedure_Len

设置了每次CS过程的最大持续时间,实际时间由host决定。

Min_Procedure_Interval & Max_Procedure_Interval

在连续的两个CS过程中,设置了最小和最大的连接时间数,也就是该最大最小间隔是通过连接事件的间隔乘上连接事件的个数进行衡量,实际间隔由host决定。

Max_Procedure_Count

设置了一次连续的CS测量中最大的CS过程次数。如果该参数设置为1,那么Min_Procedure_Interval & Max_Procedure_Interval这两个参数设置可以忽略,实际次数由host决定。

Min_Subevent_Len & Max_Subevent_Len

一次CS过程中,建议每次CS子时间的持续时间,范围为1250us到4秒

Tone_Antenna_Config_Selection

BLE CS过程中,双方设备都可以配置最多4天线的天线阵列进行测距,8中序号对应的双方可能的天线数量及路径情况,如下图所示。

Tx_Power_Delta & PHY

设置BLE CS过程中CS tones和RTT数据包的输出功率与PHY设置的数据发射功率的差值。

Preferred_Peer_Antenna

设置另外一个CS设备首先使用的天线单元,此处选择的首选天线单元,需要小于Tone_Antenna_Config中配置的远端CS设备可用的天线数量。

SNR_Control_Initiator & SNR_Control_Reflector

SNR_Control_Initiator控制由initiator设备发送CS_SYNC数据包时的SNR质量,SNR_Control_Reflector控制由reflector设备发送CS_SYNC数据包时的SNR质量,分别共有5档可选。

 

BLE%20CS%E5%8F%82%E6%95%B0" style="margin-left:0;text-align:justify;">第二步:使能设置的BLE CS参数

设置完不同Connection_Handle下不同Config_ID的CS参数后,对没个配置的参数需要此命令单独使能。此命令中,明确需要使能的Connection_Handle和Config_ID即可,具体参考: Vol 4, Part E :7.8.141 LE CS Procedure Enable command。

BLE设备CS参数使能后,设备会通过空口发送LL_CS_REQ数据包,将LE CS Set Procedure Parameters中配置的参数发送给远端设备。LL_CS_REQ格式如下图所示,其中参数的定义与LE CS Set Procedure Parameters中的一致,不再展开解释,具体参考:Vol 6, Part B:2.4.2.47 LL_CS_REQ

远端设备收到LL_CS_REQ数据包后,将根据自身设备的性能,回复一个参数可能更新的LL_CS_RSP数据包,涉及到的参数是LL_CS_REQ的一个子集,如下图所示,具体参考:Vol 6, Part B:2.4.2.48 LL_CS_RSP

经过BLE CS双方关于上述参数的范围协商后,最终由Central device发送LL_CS_IND数据包。该数据包中明确了LL_CS_REQ和LL_CS_RSP中带范围参数的具体数值,以便BLE CS过程的执行,如下图所示,具体可以参考Vol 6, Part B:2.4.2.49 LL_CS_IND。

对比由reflector发起的CS过程,仅存在peripheral device将可期望的参数通过LL_CS_REQ发送给Central device,Central device根据自身的性能和属性直接决策CS过程具体使的参数,然后直接发送LL_CS_IND后,就可以开始BLE CS过程。

 

第三步:CS过程及返回数据

在规定的数量内,开始多次CS Procedure,根据CS过程,每个CS Procedure内又可以实施多次的CS Subevent。根据CS过程的跨度及复杂性,BLE CS双方都通过LE CS Subevent Result Event和LE CS Subevent Result Continue event事件将此次CS Procedure中的数据发送给各自Host,以便算法计算距离。

LE CS Subevent Result event返回的数据定义,如下图所示,详细介绍可参考:Vol 4, Part E:7.7.65.44 LE CS Subevent Result event

Subevent_Code & Connection_Handle & Config_ID

此次Event报告对应BLE CS的Connection_Handle和Config_ID,以及当前event中subevent的code

 

Start_ACL_Conn_Event_Counter

ACL 连接事件的起始计数

Procedure_Counter:

当前Event对应CS中的Procedure序号

Frequency_Compensation

显示当前CS过程在CS非模式0过程中initiator设备用的fractional frequency offset补偿值。

Reference_Power_Level

当前CS Subevnent数据射频参考功率

Procedure_Done_Status

显示当前CS Procedure执行过程,用于表明是否后面仍然有event数据。0x01时,表示后续仍然有Procedure;如果是0x00,表示当前CS Procedure已经执行完成;0x0F表示当前CS Procedure退出。

Subevent_Done_Status

显示当前CS Procedure中Subevent的执行过程,用于表明是否后面仍然有event数据。

Abort_Reason

如果当前CS Procedure是退出(Abort)的,那么可以查阅此处退出理由。

Num_Antenna_Paths

显示当前CS ProcedureSubevent用到的天线对。

Num_Steps_Reported & Step_Mode & Step_Channel

根据Num_Steps_Reported确定后续Step_ModeStep_Channel数组的长度,然后可以在Step_Mode中获取每个Step用的具体CS Mode和每个Step用的具体信道号。

Step_Data_Length & Step_Data

根据Num_Steps_Reported确定Step_Data_Length数组的长度,每个Step_Data_Length数组元素的值中表明了Step_Data数组中对应Mode_Role_Specific_Info的数据长度。每个StepStep_Data数组的长度取决于当前用到的CS Mode还有当前设备的Role。每组Step_Data数组被称为Mode_Role_Specific_Info对象。

  • CS Mode0, 参考Vol 6, Part H: 4.3.1 Channel Sounding step mode-0
    • Initiator每个Step获得的Mode_Role_Specific_Info有如下4组信息:
      • Packet_Quality
      • Packet_RSSI
      • Packet_Antenna
      • Measured_Freq_Offset
    • reflector每个Step获得的Mode_Role_Specific_Info有如下3组信息:
      • Packet_Quality
      • Packet_RSSI
      • Packet_Antenna
  • CS Mode1, 参考Vol 6, Part H: 4.3.2 Channel Sounding step mode-1
    • 不带RTT时,Initiator每个Step获得Mode_Role_Specific_Info有如下5组信息:
      • Packet_Quality
      • Packet_NADM
      • Packet_RSSI
      • ToA_ToD_Initiator
      • Packet_Antenna
      • RTT时,Initiator每个Step获得Mode_Role_Specific_Info有如下7组信息:
      • Packet_PCT2
      • Packet_PCT1
      • Packet_Antenna
      • ToA_ToD_Initiator
      • Packet_RSSI
      • Packet_NADM
      • Packet_Quality
      • 不带RTT时,reflector获得Mode_Role_Specific_Info有如下5组信息
      • Packet_Antenna
      • ToD_ToA_reflector
      • Packet_RSSI
      • Packet_NADM
      • Packet_Quality
      • RTT时,reflector获得Mode_Role_Specific_Info有如下5组信息
        • Packet_PCT2
        • Packet_PCT1
        • Packet_Antenna
        • ToD_ToA _reflector
        • Packet_RSSI
        • Packet_NADM
        • Packet_Quality
  • CS Mode2, 参考Vol 6, Part H: 4.3.3 Channel Sounding step mode-2
  • 不管是Initiator还是reflector,获得Mode_Role_Specific_Info有如下3组信息
  •                 Antenna_Permutation_Index
  •                 Tone_PCT[k]
  •                 Tone_Quality_Indicator[k]
  • CS Mode3, 参考Vol 6, Part H: 4.3.4 Channel Sounding step mode-3
    • Initiator每个Step获得Mode_Role_Specific_Info有如下8组信息:
      • Packet_Quality
      • Packet_NADM
      • Packet_RSSI
      • ToA_ToD_Initiator
      • Packet_Antenna
      • Antenna_Permutation_Index
      • Tone_PCT[k]
      • Tone_Quality_Indicator[k]
      • 支持相位测距和RTT情况下,Initiator每个Step获得Mode_Role_Specific_Info有如下10组信息:
        • Tone_Quality_Indicator[k]
        • Tone_PCT[k]
        • Antenna_Permutation_Index
        • Packet_PCT2
        • Packet_PCT1
        • Packet_Antenna
        • ToA_ToD_Initiator
        • Packet_RSSI
        • Packet_NADM
        • Packet_Quality
    • ​​​​​​​reflector每个Step获得Mode_Role_Specific_Info有如下8组信息:
      • Packet_Quality
      • Packet_NADM
      • Packet_RSSI
      • ToD_ToA_reflector
      • Packet_Antenna
      • Antenna_Permutation_Index
      • Tone_PCT[k]
      • Tone_Quality_Indicator[k]
    • 支持相位测距和RTT情况下,reflector每个Step获得Mode_Role_Specific_Info有如下10组信息:
      • Tone_Quality_Indicator[k]
      • Tone_PCT[k]
      • Antenna_Permutation_Index
      • Packet_PCT2
      • Packet_PCT1
      • Packet_Antenna
      • ToD_ToA_Initiator
      • Packet_RSSI
      • Packet_NADM
      • Packet_Quality

Mode_Role_Specific_Info中每个数据信息表达的含义,详细解释如下:

Packet_Quality:

       占一个Octet, bit0~3用来表示BLE CS过程中Access Address的接收情况,bit4~7用来表示RTT过程中采用随机或者特定序列下,出现误比特的数量。

Packet_NADM:

占一个Octet,用来表示BLE CS数据包受到攻击的可能性。

Packet_RSSI:

占一个Octet,用来表示BLE CS数据包估计的RSSI值大小,单位为dBm。

Packet_Antenna

占1一个Octet,表明BLE RTT过程中使用的天线序号。

Packet_PCT1 & Packet_PCT2

每组数据占4个Octets,其中bit0~11组成一个12bit有符号数,表示校准后相位复数I路数值,bit12~23组成另外一个12bit有符号数,表示校准后相位复数Q路数值,实际相位校准复数为PCT1/PCT2=I+jQ

Measured_Freq_Offset:

占2个Octets,其中低15bit组成15bit有符号数,表示测量获得的信号频偏情况,单位为0.01ppm。

ToA_ToD_Initiator & ToD_ToA_Reflector

占2个Octets,分别表示数据包到达和发出、数据包发出和到达的时间差。

Antenna_Permutation_Index

占一个Octet,表明当前BLE CS步骤采用的天线路径序号,数值应该对应0x00~0x07。该序号值与使用的Num_Antenna_Paths对应,并以此计算后续Tone_PCT和Tone_Quality_Indicator两个数组的长度。

Tone_PCT[k]:

给出每条路径的校准后的相位测量复数值,后续可以用此值开展基于相位的测距算法。

Tone_Quality_Indicator[k]:

给出每条路径CS用信号质量。


http://www.ppmy.cn/news/1531790.html

相关文章

Android平台使用VIA创建语音交互应用

Android平台使用VIA创建语音交互应用 概述 在 Android 平台上开发一款语音助手应用需要整合多种技术,包括语音识别(ASR)、文字转语音(TTS)、以及热词检测(Hotword Detection)。这些技术共同构成了语音助手应用的核心交互方式,使用户能够通过语音命令与设备进行无缝交…

Electron 使用 Nodemon 配置自动重启

在Electron项目中,每次修改了代码都需要手动关闭应用,再执行npm start重启应用。 Nodemon 是一个非常实用的工具,主要用于在开发 Node.js 应用时自动监测文件的变化并重新启动服务器。 安装nodemon 开发环境安装nodemon: npm …

WPS中让两列数据合并的方法

有这样一个需求,就是把A列数据和B列数据进行合并(空单元格略过)具体实现效果如图下: 该如何操作呢? 首先在新的一列第一个单元格中输入公式"A1&B1" 然后回车,就出现了两列单元格数据合并的效…

探索基因奥秘:汇智生物如何利用组蛋白甲基化修饰测序技术革新农业植物基因组研究?

引言: 随着生物医学技术的不断进步,我们对生命奥秘的探索越来越深入。在众多的生物技术中,表观组学分析技术逐渐成为研究的热点。本文将带您走进汇智生物,了解他们如何利用DNA亲和纯化测序技术(DAP-seq)推…

python 实现gradient boosting regressor梯度增强回归器算法

gradient boosting regressor梯度增强回归器算法介绍 梯度增强回归器(Gradient Boosting Regressor,简称GBR)是一种集成学习算法,专门用于解决回归问题。它通过组合多个弱学习器(通常是决策树)来构建一个强…

​美​团​一​面​-​2​

1. 请尽可能详细地说明,React中diff的过程。你的回答中不要写出示例代码。 React中的diff过程是React高效更新DOM的关键部分,它通过比较前后两个虚拟DOM树的差异,最小化实际DOM的更新。以下是React diff过程的详细说明: 1. 组件…

问题记录:end value has mixed support, consider using flex-end instead

一、问题记录 二、解决问题 根据提示改为flex-end 三、理解问题 ‌这个警告信息表明,在Flex布局中使用“end”属性时存在兼容性问题,建议使用“flex-end”代替。 当在Flex布局中使用“justify-content: end;”时,浏览器可能对“end”值的支…

认识 Linux操作系统

前言 电脑由硬件和软件相构成,在软件中操作系统只是其中的一个分支,今天我们学习的Linux有是操作系统中的一种,不同的操作系统有自己的特点和生存生态。市面上大多数电脑自带的操作系统都是我们熟知的Windows。Linux将会为大家带来开源的新天…