• TDOA基础之 delayed tx 实现说明


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

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

    首先说几个dwm1000中用到的time

    1 最重要的是dwm1000 内部时钟

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

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

    2 delayed counter

    与系统时间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.



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

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

  • 相关阅读:
    详解consul的安装和配置
    vs2017
    Android Bitmap 和 ByteArray的互相转换
    android中的byte数组转换(转)
    TensorFlow编译androiddemo
    Linux下命令行安装配置android sdk
    Warning: cast to/from pointer from/to integer of different size
    scribe 搭建遇到的问题
    参数依赖查找(ADL,Argument-dependent lookup)
    模板类继承后找不到父类函数的问题
  • 原文地址:https://www.cnblogs.com/tuzhuke/p/11638221.html
Copyright © 2020-2023  润新知