SDR USRP LTE 定時 時序問題

2021-08-14 09:42:19 字數 1400 閱讀 6306

在我之前的部落格中介紹了很多關於軟體無線電(sdr)的技術原理。通過軟體無線電技術,基於開源sdr lte平台,我們能快捷的搭建一套lte系統。下圖便是乙個sdr lte系統的例子。

我們知道,lte系統對時序要求非常嚴格。不像wifi,隨時想發資料就發資料。如果lte系統的時序不對,ue和enb則無法同步上,更不可能收發資料了。

那這就有乙個問題,sdr lte系統是如何保證系統時序的呢?usrp和pc之間又是怎麼保證時序的?

參見上圖,我們以usrp b210為例講解sdr lte系統的定時。usrp b210的最大取樣率為61.44ms/s。當我們執行lte 20m頻寬時,我們將取樣率設定為30.72m(假設不過取樣,也不欠取樣)。usrp b210取樣率設定為30.72m的取樣率,簡單理解就是usrp每秒能傳送30.72m(30.72*10^6)個

複數(即iq兩路)。當然,由於usrp b210支援full duplex,可以同時進行收發,即每秒時間內都能傳送30.72m個複數資料同時接收30.72m個複數資料。任何晶振都不能做到100%的精準,usrp b210上的晶振也不例外,不過一般波動都不大。

那pc和usrp是怎麼保持同步的呢?其實準確來說,usrp和pc之間不需要保持同步。usrp有乙個時間戳的概念,是usrp內部的一套時序,其實就是乙個用來精確描述取樣點的數。比如n表示當前取樣點,則n+1則表示下乙個取樣點。當pc通過uhd驅動從usrp中獲得接收到的基帶資料時,pc能從uhd中獲得該基帶資料接收的起始時間戳。假設pc從usrp中讀取了乙個子幀的資料(1ms,對應30720個資料)並獲得該子幀的時間戳為t。那麼下乙個子幀的起始時間便是(

t+30720),再下乙個子幀的起始時間是(t+30720*2),以此類推。當然,pc內部會根據時間戳了更新lte系統的幀號(frame)和子幀號(subframe)。

當pc處理完基帶資料,需要把資料傳送給usrp進行傳送時,需要根據資料將要傳送的frame和subframe確定時間戳,並把時間戳傳給usrp,這樣usrp就知道要在哪個取樣點時刻開始傳送該資料了。還有乙個問題,假如我們需要在t時間戳的時刻開始傳送資料,那我們不能再t時刻之後才將資料傳送給usrp。所以pc系統需要提前將要傳送的資料準備好並傳送給usrp。有興趣的同學可以去研究下oai平台的這個時間提前量。這個提前量不能太大,太大的話會增加lte系統的時延;也不能太小,太小會導致usrp沒有足夠的時間來處理資料。

綜上所述,sdr lte系統的定時完全是由usrp來控制的。pc只需要提前將資料準備好並傳輸給usrp,告訴usrp我們的資料要在哪個時刻傳送即可。

時間有限,如果表述有不正確的地方,歡迎交流討論。

動態改變squartz的定時時間

注意 根據本人經驗 spring跟squartz整合出現了版本問題,如果spring是3.1以下的就要用squartz1.x版本,如果spring是3.1以上的就要用squartz2.x版本,我的spring是4.x的所有整合是 org.quartz scheduler quartz 1.8.4 一...

Oracle之job 常用定時時間

1 每天午夜12點 trunc sysdate 1 2 每天早上8點30分 trunc sysdate 1 8 60 30 24 60 3 每星期二中午12點 next day trunc sysdate tuesday 12 24 4 每個月第一天的午夜12點 trunc last day sys...

STM32 定時器 定時時間的計算

假設 系統時鐘是72mhz,tim1 是由pclk2 72mhz 得到,tim2 7是由 pclk1 得到 關鍵是設定 時鐘預分頻數,自動重裝載暫存器週期的值 每1秒發生一次更新事件 進入中斷服務程式 rcc configuration 的systeminit 的 rcc cfgr uint32 t...