NO IMAGE

本篇首先講述速率匹配的具體過程, 然後講述速率匹配的具體引數含義. (這裡針對的是Turbo編碼的速率匹配, 卷積碼速率匹配過程較簡單, 這裡就不說了.)

如協議中速率匹配的原理圖, dk是Turbo碼的三路輸出,分別經過子交織器後,得到三路vk,
wk把三路vk序列收集在一起,
經過打孔或重複過程得到物理通道要傳輸的位元ek.

該過程是基於碼塊處理的, 多個碼塊需要多次處理後, 將輸出序列級聯.
碼塊大小為3*D, D是一路dk的大小. 子交織器有固定的32列, 行大小:
$R=\left\lceil D/32 \right\rceil .
位元收集後的長度:
$W=3\times\text{32}\times\text{R}\ge\text{3}\times\text{D}

單個程序單個流的soft buffer大小為:
${{N}_{IR}}=\left\lfloor \frac{{{N}_{soft}}}{{{K}_{\text{MIMO}}}\cdot \min \left( {{M}_{\text{DL }\!\!\_\!\!\text{ HARQ}}},\ {{M}_{\text{limit}}} \right)} \right\rfloor

其中Nsoft代表UE能夠處理的資料最大快取,KMIMO是由流個數決定的引數可為1或2,
剩下的那個最小值是指有多少個HARQ程序, 因為每個HARQ程序都要分相同大小的soft buffer.
其中每一個碼塊的soft buffer大小為:
${{N}_{cb}}=\min \left( \left\lfloor \frac{{{N}_{IR}}}{C} \right\rfloor ,\text{W} \right)

這裡C為碼塊個數.

G是根據分配的可用RB資源所能傳輸的總位元數. E是每個碼塊進行速率匹配後的輸出長度.中間做的一些變換,是為了當G不能被C整除時, 保證每個碼塊的E都是整數.

比較複雜的是每次從迴圈buffer Ncb中取數的起點位置K0的確定.
${{k}_{0}}=R\cdot \left( 2\cdot \left\lceil {{N}_{cb}}/(8R) \right\rceil \cdot r{{v}_{idx}} 2 \right)

這裡rvidx=0,1,2,3.決定了每次取數的起始位置. 假設Ncb=W=96*R,
那麼每次的起始位置為2R, 26R, 50R, 74R, 也就是每次偏移1/4的buffer大小. 而第一次為什麼2R的系統資訊不傳送呢, 這是為了提高高位元速率情況下的解碼效能, 具體大家可以搜搜3gpp相關的提案.

最後就是每個碼塊打孔和重複的過程了:
while (k < E)
         // 下面的if條件是判斷是否是交織時插入的Null位元, 如果是則跳過, 然後j ; 如果不是Null則輸出, 然後k , 再j . 其中mod實現了迴圈buffer.

        if ${{w}_{({{k}_{0}} j)\bmod {{N}_{cb}}}}\ne NULL

                ${{e}_{k}}={{w}_{({{k}_{0}} j)\bmod {{N}_{cb}}}};

                k

        end if
        j
end while

好了, 大功告成, 大家看完這篇文章如果還沒理解速率匹配過程, 那就是你是否仔細的原因了. 避免浮躁, 慢慢體會協議的用意.