TDOA基础之 delayed tx 实现说明

不论是在TWR 还是TDOA定位算法中,delayed tx 都会用到,这篇博文主要解析delayed tx 实现。

何为delayed tx? delayed tx 是延时发送,为何要延时?因为这个延时可以控制,设定好延时后,可以把延时信息放到数据包中,接收者收到信息后,除了知道接收时间还能知道发送时间。具体作用参考TWR或者TDOA算法代码。

首先说几个dwm1000中用到的time

1 最重要的是dwm1000 内部时钟

TDOA基础之 delayed tx 实现说明_第1张图片

从上面描述中可以得知时钟频率为63.8976GHz,这个Counter 每增加一个step,对应的时间是1/63.8976G=15.56ps ,这个时间再乘以光速,大概距离是0.0047m.

但是根据标黄的地方知道,低9bit 一直是0. 

2 delayed counter

TDOA基础之 delayed tx 实现说明_第2张图片

与系统时间counter对应,低9bit 也是0.

Delayed Tx 代码分析

final_tx_time = dwt_readsystimestamphi32() +0x100000;
dwt_setdelayedtrxtime(final_tx_time);

1 首先使用dwt_readsystimestamphi32() 读取系统时间counter的高32位(最低位是0,另外8bit 也是0,没有去读),然后再这个基础上加了0x100000

2 使用API 设定delayed tx时间dwt_setdelayedtrxtime(txdelay),同样,这里设置的是高32位,而不是全部40bit。

整个delay时间为0x100000 00 *15.5ps = 4160749568 ps =0.416s

这个计算方法是错的,因为用dwt_readsystimestamphi32() 读取的是高32位,低8bit虽然为0,但是实际时间可能不为0,虽然看不到,但实际存在。

例如连续两次dwt_readsystimestamphi32(),可能返回一样的值,但是低9bit 0是有差异的。所以不能用上述公式计算delay,哪如何算? 没法算,其实也没有太大用,或者实际上没用!

 

如何理解? 

我们设定了delaytx 时间,高32bit,低8bit是0后,系统counter 增加,等到某一个时间系统counter与 delaytx counter 相等,这个时候低9bit 的0 是真实的0!

 

理解了上面部分再往下看代码

final_tx_ts = (((uint64)(final_tx_time & 0xFFFFFFFE)) << 8) + TX_ANT_DLY;
final_msg_set_ts(&msg_f_send.messageData[FIRST_TX],  final_tx_ts);
这个代码final_tx_time & 0xFFFFFFFE,是因为高32bit 的counter其实最低一位也是0,把它清楚掉。
然后右移8位,完整的时间,产生40bit 时间,后面加上tx 天线延时,就是发送端真实的发送时间。

那tx_ant_dly 低8位可以是非零吗? 可以! 因为rx tx timestamp 40bit 都是有效的,没有说低9bit为0.

TDOA基础之 delayed tx 实现说明_第3张图片

当接收端接收到信息,解析
messageData 就可以知道这个信息准确的发送时间。
 
 

 更多内容参考蓝点无限论坛bphero.com.cn 

 

你可能感兴趣的:(TDOA基础之 delayed tx 实现说明)