超宽带(UWB)技术的校准是一个重要的过程,确保设备的测距和定位功能准确无误。UWB设备通过发送和接收短暂的脉冲信号来测量距离,校准过程涉及多个步骤和因素,包括天线延迟、环境因素、硬件异质性等。下面是UWB校准的一般步骤和注意事项:
UWB校准是一个复杂但至关重要的过程,确保了系统的精确性和可靠性。无论是在初次部署还是日常维护中,适当的校准都是保证系统性能的关键。
超宽带(UWB)技术中,矫正天线延时是确保精确距离测量的关键步骤。天线延时是指信号从天线发射器端到接收器端传播的时间延迟。如果不进行矫正,这些延时会导致距离测量的误差。以下是UWB技术中矫正天线延时的步骤和方法:
通过上述步骤和方法,UWB系统可以有效地矫正天线延时,确保距离测量的准确性和系统的可靠性。这对于定位、导航、跟踪等应用至关重要。在实际应用中,选择适合特定场景和要求的矫正方法和策略是非常重要的。
dwt_setrxantennadelay(RX_ANT_DLY)
和dwt_settxantennadelay(TX_ANT_DLY)
这两个函数调用主要在以下时刻起作用:
简而言之,dwt_setrxantennadelay
和dwt_settxantennadelay
主要在设备的初始化或配置阶段设置一次,之后它们就在设备的每次操作中持续发挥作用,确保每次测量和通信的时间准确性和可靠性。
dwt_setrxantennadelay(RX_ANT_DLY)
和dwt_settxantennadelay(TX_ANT_DLY)
这两个函数调用主要在以下时刻起作用:
简而言之,dwt_setrxantennadelay
和dwt_settxantennadelay
主要在设备的初始化或配置阶段设置一次,之后它们就在设备的每次操作中持续发挥作用,确保每次测量和通信的时间准确性和可靠性。
这段代码是一个用于UWB(超宽带)通信的接收器程序,特别是处理和响应不同类型的消息,计算飞行时间(ToF),并据此计算距离。在这个过程中,天线延时的矫正在测量飞行时间和计算距离时起到了重要作用。下面是详细解释这些天线延时在哪里起作用:
飞行时间(ToF)计算:
poll_rx_ts
, resp_tx_ts
, final_rx_ts
, poll_tx_ts
, resp_rx_ts
, 和 final_tx_ts
。这些时间戳代表了不同阶段的发送和接收时间点。距离计算:
SPEED_OF_LIGHT
)来计算出实际的距离,但这个距离是原始的,没有考虑天线延时造成的误差。distance_temp = tof * SPEED_OF_LIGHT
这行代码计算了基于ToF的原始距离。天线延时矫正应用:
dwt_getrangebias
函数来矫正基于通道(config.chan
)和脉冲复发频率(config.prf
)的距离偏差,这实际上是在考虑了天线特性和环境因素后对距离的一个修正。distance[msg_f_send.destAddr[0]] = distance_temp - dwt_getrangebias(config.chan,(float)distance_temp, config.prf);
这行代码应用了距离矫正,其中天线延时是距离偏差矫正的一部分。RX_ANT_DLY
和 TX_ANT_DLY
)设置通常在程序的初始化部分,可能在其他文件或设置中定义。在这个具体的代码片段中,没有直接调用dwt_setrxantennadelay
或dwt_settxantennadelay
,但是我们可以假设这些函数在某个地方被调用,以确保天线延时被正确设置和应用于ToF和距离的计算中。在UWB通信和距离测量中,正确设置和应用天线延时是确保精确测量的关键。虽然在这段代码中没有直接看到dwt_setrxantennadelay
或dwt_settxantennadelay
的调用,它们在初始化设备时设定的值会影响整个测距过程,特别是在计算飞行时间和进行距离矫正时。天线延时的正确设置和矫正,确保了测量结果的准确性和可靠性,对于UWB应用来说至关重要。
resp_tx_ts = get_tx_timestamp_u64();
final_rx_ts = get_rx_timestamp_u64();
/* Get timestamps embedded in the final message. */
final_msg_get_ts(&msg_f->messageData[FINAL_MSG_POLL_TX_TS_IDX], &poll_tx_ts);
final_msg_get_ts(&msg_f->messageData[FINAL_MSG_RESP_RX_TS_IDX], &resp_rx_ts);
final_msg_get_ts(&msg_f->messageData[FINAL_MSG_FINAL_TX_TS_IDX], &final_tx_ts);
/* Compute time of flight. 32-bit subtractions give correct answers even if clock has wrapped. See NOTE 10 below. */
poll_rx_ts_32 = (uint32)poll_rx_ts;
resp_tx_ts_32 = (uint32)resp_tx_ts;
final_rx_ts_32 = (uint32)final_rx_ts;
Ra = (double)(resp_rx_ts - poll_tx_ts);
Rb = (double)(final_rx_ts_32 - resp_tx_ts_32);
Da = (double)(final_tx_ts - resp_rx_ts);
Db = (double)(resp_tx_ts_32 - poll_rx_ts_32);
tof_dtu = (int64)((Ra * Rb - Da * Db) / (Ra + Rb + Da + Db));
tof = tof_dtu * DWT_TIME_UNITS;
distance_temp = tof * SPEED_OF_LIGHT;
distance[msg_f_send.destAddr[0]] = distance_temp - dwt_getrangebias(config.chan,(float)distance_temp, config.prf);//距离减去矫正系数
#if 0 //如果一个标签可以打开kalman滤波
distance[msg_f_send.destAddr[0]] = KalMan(distance[msg_f_send.destAddr[0]]);
#endif
让我们再次分步骤来理解天线延时是如何被矫正的,具体到操作和原理:
dwt_setrxantennadelay
或dwt_settxantennadelay
)来完成的,但在你提供的代码段中,我们没有看到这些函数的直接调用。dwt_getrangebias
函数计算的偏差值上。这个函数根据配置的通道、预测距离和PRF等参数返回一个偏差值。尽管这个函数名为“range bias”,但通常它考虑了包括天线延时在内的多种因素。通过上述步骤,软件确保了飞行时间的计算和相应的距离测量考虑了天线延时,从而提高了测量的准确性。在实际的UWB系统中,准确的矫正对于确保高精度的距离测量至关重要。希望这次解释能让你更清楚地理解天线延时是如何被矫正的。
这张图展示了在双向测距(TWR)过程中两个设备之间的时间戳交互。设备A和设备B交替发送和接收消息,通过这些消息的发送和接收时间来计算信号的传播时间。下面是对图中所示过程的详细解释:
通过上述步骤,我们可以获得四个关键的时间戳,这些时间戳可以用来计算两个设备之间的距离。具体的计算方法依赖于( T r o u n d 1 T_{round1} Tround1?), ( T r e p l y 1 T_{reply1} Treply1?), ( T r o u n d 2 T_{round2} Tround2?), 和 ( T r e p l y 2 T_{reply2} Treply2?)的值,结合起来可以通过一系列的数学计算来提取出( T p r o p T_{prop} Tprop?)的值。
这张图以图形方式表达了在UWB系统中进行双向测距时的关键时间间隔,这些时间间隔是计算两个设备之间距离的基础。通过正确地计算这些时间间隔,并将设备内部处理时间排除,我们可以准确地得到信号的传播时间,从而测量出准确的距离。
这张图展示的是双向测距(Two-Way Ranging, TWR)中计算信号传播时间(propagation time, ( \hat{T}_{prop} ))的公式。这个公式是为了从几个不同的时间戳中提取出信号在空中传播的时间。下面是各个变量的含义和公式的解释:
公式中,信号传播时间 ( T ^ p r o p \hat{T}_{prop} T^prop? ) 被计算为:
[ T ^ p r o p = ( T r o u n d 1 × T r o u n d 2 ) ? ( T r e p l y 1 × T r e p l y 2 ) ( T r o u n d 1 + T r o u n d 2 + T r e p l y 1 + T r e p l y 2 ) \hat{T}_{prop} = \frac{(T_{round1} \times T_{round2}) - (T_{reply1} \times T_{reply2})}{(T_{round1} + T_{round2} + T_{reply1} + T_{reply2})} T^prop?=(Tround1?+Tround2?+Treply1?+Treply2?)(Tround1?×Tround2?)?(Treply1?×Treply2?)? ]
这个公式如何运作的呢?
分子:( ( T r o u n d 1 × T r o u n d 2 ) ? ( T r e p l y 1 × T r e p l y 2 T_{round1} \times T_{round2}) - (T_{reply1} \times T_{reply2} Tround1?×Tround2?)?(Treply1?×Treply2?) ) 是两轮往返时间的乘积减去两个回复时间的乘积。这样做是为了移除来自设备内部处理的时间,只保留信号在空中传播的时间。
这张图展示了在双向测距(TWR)过程中两个设备之间的时间戳交互。设备A和设备B交替发送和接收消息,通过这些消息的发送和接收时间来计算信号的传播时间。下面是对图中所示过程的详细解释:
设备和消息流:
- 设备A:通常是发起通信的设备,也被称为发起者(Initiator)。
- 设备B:是响应通信的设备,也被称为应答者(Responder)。
时间戳和时间间隔:
- ( T r o u n d 1 T_{round1} Tround1?):这是设备A发送第一个消息(通常是轮询消息)到设备B接收并响应(发送回复消息)之间的时间间隔。
- ( T r e p l y 1 T_{reply1} Treply1?):这是设备B接收轮询消息后到它发送回复消息之间的时间间隔,也就是设备B的处理时间。
- ( T r o u n d 2 T_{round2} Tround2?):这是设备B发送回复消息到设备A接收并发送最终消息(Final message)的时间间隔。
- ( T r e p l y 2 T_{reply2} Treply2?):这是设备A接收回复消息后到它发送最终消息的时间间隔,也就是设备A的处理时间。
- ( T p r o p T_{prop} Tprop?):这是信号实际在空中传播的时间,也就是我们需要计算的时间飞行(Time of Flight, ToF)。在图中,它被表示为从设备A的TX(发射)到设备B的RX(接收),再到设备B的TX(发射)和设备A的RX(接收)的传播时间。
TWR计算过程:
- 设备A向设备B发送一个轮询消息。
- 设备B在接收到轮询消息后经过一段(T_{reply1})的处理时间,然后发送一个回复消息给设备A。
- 设备A接收到回复消息后,同样经过一段(T_{reply2})的处理时间,发送一个最终消息给设备B。
- 设备B接收最终消息,并记录时间戳。
通过上述步骤,我们可以获得四个关键的时间戳,这些时间戳可以用来计算两个设备之间的距离。具体的计算方法依赖于( T r o u n d 1 T_{round1} Tround1?), ( T r e p l y 1 T_{reply1} Treply1?), ( T r o u n d 2 T_{round2} Tround2?), 和 ( T r e p l y 2 T_{reply2} Treply2?)的值,结合起来可以通过一系列的数学计算来提取出(T_{prop})的值。
总结:
这张图以图形方式表达了在UWB系统中进行双向测距时的关键时间间隔,这些时间间隔是计算两个设备之间距离的基础。通过正确地计算这些时间间隔,并将设备内部处理时间排除,我们可以准确地得到信号的传播时间,从而测量出准确的距离。
分母:( ( T r o u n d 1 + T r o u n d 2 + T r e p l y 1 + T r e p l y 2 T_{round1} + T_{round2} + T_{reply1} + T_{reply2} Tround1?+Tround2?+Treply1?+Treply2?) ) 是所有时间的总和,用于规范化分子,从而得到单程的传播时间。
在双向测距(TWR)的上下文中,为了计算信号的单程传播时间,我们不仅要知道信号在空中传播的总时间,还要能够从中分离出单个传播路径的时间。在TWR交互过程中,有两轮通信往返,每一轮都包含了信号的传播时间和设备处理时间。为了提取出纯粹的信号传播时间,我们需要做一些数学上的操作。
分母的作用在于提供一个规范化的因子,它是以下四个时间段的总和:
- ( T r o u n d 1 T_{round1} Tround1? ):第一轮从设备A发送轮询消息到设备B接收这一消息的时间。
- ( T r o u n d 2 T_{round2} Tround2? ):第二轮从设备B响应消息到设备A接收这一响应的时间。
- ( T r e p l y 1 T_{reply1} Treply1? ):设备B接收轮询消息并处理完毕后响应所花费的时间。
- ( T r e p l y 2 T_{reply2} Treply2?):设备A接收响应消息并处理完毕后发送最终消息所花费的时间。
将这些时间段加起来,我们得到了整个TWR交互过程中所有时间的总和。这个总和被用作分母,以便将分子中的时间乘积转换为单程传播时间。分子中的时间乘积表达了信号传播时间和设备处理时间的复合效应,但我们感兴趣的是纯粹的信号传播时间,因此需要进行规范化处理。
规范化操作的数学逻辑如下:
- 通过将分子中的时间乘积除以时间总和,我们有效地将总的往返时间调整为一个单程时间。这是因为分子中包含了两次传播时间的乘积,而分母则是两个往返时间加上两个回复时间的总和。
- 由于在理想情况下,两个回复时间(( T r e p l y 1 T_{reply1} Treply1? ) 和 ( T r e p l y 2 T_{reply2} Treply2? ))相对于往返时间(( T r o u n d 1 T_{round1} Tround1? ) 和 ( T r o u n d 2 T_{round2} Tround2? ))较小,可以认为分母中的总和主要由往返时间组成,从而使我们能够通过这个比例获得单程的传播时间。
最终,这个计算出的单程传播时间 ( T ^ p r o p \hat{T}_{prop} T^prop? ) 是信号从设备A传播到设备B的时间,它是距离测量的基础。通过这个时间和光速的乘积,我们可以计算出设备A和设备B之间的距离。
整体公式:通过这种计算方式,我们可以剔除非信号传播时间,如处理或等待时间,只提取出信号实际在空中传播的时间。
通过应用这个公式,我们可以计算出信号的单程传播时间,进而计算出发起者和应答者之间的距离。这是UWB定位和导航系统中精确测距的基础。