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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM