TDOA基礎之 delayed tx 實現說明

2022-08-26 04:51:07 字數 1846 閱讀 5069

不論是在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. 

與系統時間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 就可以知道這個資訊準確的傳送時間。

C 基礎之基礎

c 容納了好幾種程式設計正規化 物件導向程式設計 泛型程式設計 過程化程式設計 物件導向程式設計 其本質是以建立模型體現出來的抽象思維過程和物件導向的方法。抽象 繼承 多型 抽象性是指將具有一致的資料結構 屬性 和行為 操作 的物件抽象成類。乙個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽...

python基礎之語句 Python基礎之條件語句

我們在程式設計中經常需要通過檢查某個條件,從而決定去做什麼。條件語句就是針對這一情景應用的。本篇主要介紹 if 和 while。一 if語句 先來個總覽 if 條件一 條件一對應的 塊 elif 條件二 條件一對應的 塊 else 不滿足條件一和條件二對應的 塊 if 語句的核心就是值為true 或...

vue基礎基礎之基基礎

目錄 1,引用 2,例項化 3,資料定義和使用 4,函式的定義和使用 5,資料的改變方式 6,原生js如何輸出vue中的data資料 7,vue中系統屬性的使用 每個vue應用都需要通過例項化vue來實現 語法 var myvue new vue 注意 若id重複,則以第乙個為準 也可以在外邊定義 ...