srslte_pcfich_encode 的第一步是將 2bits 的 cfi 做 channel coding 得到 32bit 的 cfi code word;這裡呼叫了 srslte_pcfich_encode 函式,輸入是 cfi(這裡就不是 2bits 的數了,直接是十進位制的 1,2,3), 輸出是 q -> data;中間的 coding 過程也很直接,即從預先定義的 cfi_table 中直接找對應的序列即可,只是注意 cfi = 1 對應的是 table 中的第 0 個元素。
接下來第二步就是對 32bits 的 channel coding 結果進行加擾(scrambling),這裡呼叫了 srslte_scrambling_b 函式來完成。該函式的輸入是存放在 &q -> seq[subframe] 當中的 scrambling code 和上一步 channel coding 的輸出 q -> data,輸出也存放在 q -> data 當中。在這個函式中主要就是做 xor 運算,通過呼叫 srslte_scrambling_b 函式來完成(實際是通過呼叫該函式中的 scrambling_b_word函式來完成的)。
實際上加擾的關鍵在於生成的 scrambling code ,從 ts36.211 可以看到不同通道(pcfich, pbch, pdsch 等)的 scrambling code 的不同就在於c_init:pcfich 的 cinit 與 slot number(in one radio frame)、小區 id 有關。
生成的 scrambling code 存放在 &q -> seq[subframe] 當中,這步是在 encode 前的 srslte_pcfich_set_cell 初始化函式中就已經完成了。函式中 for 迴圈表示每個 cinit 是隨 nsf(subframe number)變化的,初始化中會生成 10個 subframe 對應的 cinit。for 迴圈中呼叫 srslte_sequence_pcfich 函式,實際這個函式又是呼叫了 srslte_sequence_lte_pr函式來完成擾碼的生成。這個函式中 seed 就是 pcfich 的 cinit,len=32 是對應的擾碼序列的長度,與 pcfich code word 的長度是一樣的。
最後我們在 srslte_lte_encode 中加入額外的列印訊息,列印出當 cfi = 1 時、小區 id = 100、subframe = 0 時的結果。我們還可以列印出在 subframe = 0 的時候生成的 cinit(略),cinit 的結果是 103012,可以根據 cinit 算出 x2,進一步根據 ts36.211 7.2 算出 scramble sequence。有興趣的朋友可以手動算一下。
srsLTE PCFICH 原始碼解析 00
就從 pcfich 開始吧,pcfich 的物理層處理相對於 pbch,pdsch 等都比較簡單 引用金輝老師在 深入理解lte a 裡面的一張圖 在整個 pcfich test.c 當中,除了呼叫這兩個 encode 和 decode 函式,還呼叫了 pcfich.c 中的初始化 指標和記憶體分配...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
Cartographer原始碼篇 原始碼分析 1
在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...