“原文 Understanding LTE with MATLAB ,作者Houman Zarrinkoub,本文是對于該書的翻譯,書中的專業(yè)性詞匯給出了英文原文,圖和表的排版都是參考原文,翻譯不準(zhǔn)確的地方請讀者多多包涵。
本文僅限于個人學(xué)習(xí),研究,交流,不得用于其他商業(yè)用途!”

4.3 信道編碼
到目前為止,我們已經(jīng)討論了在物理信道處理中執(zhí)行的調(diào)制和加擾操作。現(xiàn)在我們將結(jié)合TrCH處理,即信道編碼,與調(diào)制和加擾。我們將介紹基于turbo編碼的糾錯編碼和以CRC檢測為代表的錯誤檢測機(jī)制。表4.3總結(jié)了各種TrCH的信道編碼方案。除了基于卷積編碼的廣播信道(BCH)外,大多數(shù)物理信道都采用turbo編碼。

Turbo編碼是LTE標(biāo)準(zhǔn)中規(guī)定的信道編碼的基礎(chǔ)。盡管turbo編碼在許多以前的標(biāo)準(zhǔn)中已經(jīng)被使用,但是它一直被視為與其他卷積編碼方案一起的可選組件。然而,在LTE中,turbo編碼是信道編碼機(jī)制的驅(qū)動部件;谖覀兊慕虒W(xué)方法,我們將逐步建立LTE標(biāo)準(zhǔn)的TrCH處理,分五個步驟。首先,我們以1/3的編碼率實現(xiàn)turbo編碼算法。然后在Turbo譯碼器中加入早期終止機(jī)制。這使得Turbo解碼器的計算復(fù)雜度可擴(kuò)展。然后,我們介紹速率匹配操作,它通過對1/3速率渦輪編碼器輸出進(jìn)行操作來提供任意給定速率的編碼。介紹了與子塊分割和碼字重構(gòu)相關(guān)的功能。最后,將所有組件放在一起,實現(xiàn)TrCH處理的處理鏈。在這本書中,我們省略了與HARQ處理相關(guān)的MATLAB函數(shù)的介紹。HARQ處理非常重要,因為它本質(zhì)上減少了重傳次數(shù),并且提高了傳輸塊錯誤檢測之后的性能。這個省略符合我們聲明的范圍,該范圍關(guān)注于穩(wěn)態(tài)用戶平面處理。
4.4 Turbo 編碼
Turbo編碼器屬于稱為并行級聯(lián)卷積編碼的一類信道編碼算法[2]。顧名思義,turbo碼是通過并行連接兩個傳統(tǒng)編碼器并通過交織器將它們分開而形成的。LTE中Turbo碼的選擇受到多種因素的影響。首先是Turbo編碼器的近香農(nóng)約束性能。在turbo譯碼中,給定足夠的迭代次數(shù),turbo碼可以具有遠(yuǎn)遠(yuǎn)超過傳統(tǒng)卷積編碼器的誤碼性能。此外,由于采用了創(chuàng)新的速率匹配機(jī)制,Turbo編碼的適用性稍后再做討論。
4.4.1 Turbo編碼器
LTE采用基本速率為1/3的turbo編碼作為其信道編碼方案的基石,如圖4.3所示:

LTE渦輪編碼器基于由內(nèi)部交織器分離的兩個8狀態(tài)分量編碼器的并行級聯(lián)。Turbo編碼器的輸出由三個碼流組成。第一流的位通常被稱為系統(tǒng)位。第二和第三流的比特——即兩個組成編碼器的輸出——通常分別稱為奇偶校驗1和奇偶校驗2比特流。每個組成編碼器獨立地由尾部比特終止。這意味著對于K位的輸入塊大小,由于網(wǎng)格終止,渦輪編碼器的輸出由三個長度為K+4位的流組成。這使得Turbo編碼器的編碼率略小于1/3。由于在每個流的末尾多路復(fù)用尾比特,所以系統(tǒng)位和奇偶校驗1和奇偶校驗2比特流都具有大小K+4。
為了完全指定turbo編碼器,我們需要指定組成編碼器和turbo代碼內(nèi)部交織器的網(wǎng)格結(jié)構(gòu)。LTE交織器是基于一個簡單的二次多項式置換(QPP)方案。交織器置換輸入比特的索引。輸出索引p(i)和輸入索引i之間的關(guān)系由以下二次多項式表達(dá)式描述:

其中K是輸入塊的大小,f1和f2是取決于K值的常數(shù)。LTE允許輸入塊大小K為188個不同的值。最小塊大小為40,最大塊大小為6144。這些塊大小和相應(yīng)的f1和f2常數(shù)在文獻(xiàn)[3]中進(jìn)行了總結(jié)。
LTE turbo編碼器是使用QPP交織器的無競爭編碼器,它通過在交織操作中對存儲器訪問進(jìn)行流線化來顯著改善turbo碼的性能。組成編碼器的網(wǎng)格結(jié)構(gòu)由以下兩個多項式描述:

這描述了一個1/3 Turbo編碼器,具有四個狀態(tài),并且在每個組成編碼器處具有網(wǎng)格結(jié)構(gòu),由前饋和反饋連接多項式表示,八度值分別為13和15。
4.4.2 Turbo 解碼器
在接收機(jī)中,turbo解碼器將turbo編碼器執(zhí)行的操作反相。turbo譯碼器基于兩個校驗位(APP)譯碼器和反饋環(huán)路中的兩個交織器的使用。在APP解碼器中使用在turbo編碼器中發(fā)現(xiàn)的相同的網(wǎng)格結(jié)構(gòu),以及相同的交織器。不同之處在于turbo解碼是一種迭代操作。turbo譯碼器的性能和計算復(fù)雜度直接關(guān)系到所執(zhí)行的迭代次數(shù)。
在接收機(jī)處,turbo解碼器執(zhí)行turbo編碼器的逆操作。通過處理其輸入信號,即解調(diào)和解擾器的輸出,turbo解碼器將恢復(fù)TrCH傳輸比特的最佳估計。請注意,Turbo解碼器輸入需要在LLRs中表示。如前所述,如果執(zhí)行軟判決解調(diào),則解調(diào)器生成LLR。
4.4.3 MATLAB 例子
下面的兩個MATLAB函數(shù)顯示了LTE的Turobo碼器和解碼器的實現(xiàn)及其所有規(guī)范,使用通信系統(tǒng)工具箱的系統(tǒng)對象。在TurboEncoder函數(shù)中,我們使用comm.TurboEncoder系統(tǒng)對象,設(shè)置網(wǎng)格結(jié)構(gòu)和交織器屬性,以實現(xiàn)LTE標(biāo)準(zhǔn)中指定的功能。通過調(diào)用系統(tǒng)對象的step方法,對輸入比特進(jìn)行處理,生成Turbo編碼比特作為輸出。
1function y=TurboEncoder(u, intrlvrIndices)
2%#codegen
3persistent Turbo
4if isempty(Turbo)
5 Turbo = comm.TurboEncoder('TrellisStructure', poly2trellis(4, [13 15], 13), ...
6 'InterleaverIndicesSource','Input port');
7end
8y=step(Turbo, u, intrlvrIndices);
9end
類似地,TurboDecoder函數(shù)對其第一輸入信號(u)進(jìn)行操作,該信號是解調(diào)器和解擾器的LLR輸出。Turbo解碼器將恢復(fù)發(fā)送比特的最佳估計。該函數(shù)還將交織索引(intrlvrIndices)和解碼器中使用的最大迭代次數(shù)(maxIter)作為輸入。
1function y=TurboDecoder(u, intrlvrIndices, maxIter)
2%#codegen
3persistent Turbo
4if isempty(Turbo)
5 Turbo = comm.TurboDecoder('TrellisStructure', poly2trellis(4, [13 15], 13),...
6 'InterleaverIndicesSource','Input port', ...
7 'NumIterations', maxIter);
8end
9y=step(Turbo, u, intrlvrIndices);
10end
為了設(shè)置網(wǎng)格結(jié)構(gòu),我們使用通信系統(tǒng)工具箱的 ploy2trellis() 函數(shù)。由于LTE網(wǎng)格結(jié)構(gòu)同時具有前饋和反饋連接多項式,我們首先建立多項式的二進(jìn)制數(shù)表示,然后將二進(jìn)制表示轉(zhuǎn)換成八進(jìn)制表示。通過查看圖4.3中的渦輪編碼器的框圖,我們可以看出該編碼器具有約束長度為4、生成器多項式矩陣為[1315]和反饋連接多項式為13。因此,為了設(shè)置網(wǎng)格結(jié)構(gòu),我們需要使用poly2trellis(4,[1315],13)函數(shù)。
為了構(gòu)建基于QPP方案的LTE交織器,我們使用lteIntrlvrIndices() 函數(shù)。該函數(shù)基于僅允許的188個輸入大小查找LTE交織器表,找到相應(yīng)的f1和f2常數(shù),并按照標(biāo)準(zhǔn)中的描述計算置換向量。
1function indices = lteIntrlvrIndices(blkLen)
2%#codegen
3
4[f1, f2] = getf1f2(blkLen);
5Idx = (0:blkLen-1).';
6indices = mod(f1*Idx + f2*Idx.^2, blkLen) + 1;
8end
9
其中comm.TurboEncoder和comm.TurboDecoder系統(tǒng)對象是基于直接MATLAB實現(xiàn)來表達(dá)算法的對象。因此,使用MATLAB編輯命令,我們可以檢查每次使用這些系統(tǒng)對象時執(zhí)行的MATLAB代碼;贛ATLAB的系統(tǒng)對象的創(chuàng)建和創(chuàng)作超出了本書的范圍;有關(guān)此主題的更多信息,請參考MATLAB文檔[4]。為了說明MATLAB實現(xiàn)如何符合我們的期望,我們可以檢查這個系統(tǒng)對象的stepimpl函數(shù)。
comm.TurboEncoder stepimpl函數(shù)執(zhí)行兩個卷積編碼操作,首先針對輸入信號,然后針對信號的交織版本。然后它捕獲與網(wǎng)格終止相關(guān)的額外樣本并將它們附加到Systematic和Parity流的末尾。comm.TurboDecoder stepimpl重復(fù)一系列操作,包括兩個APP解碼器和交織器,N次。N值對應(yīng)于turbo解碼器中的最大迭代次數(shù)。在每個處理迭代結(jié)束時,turbo解碼器使用結(jié)果更新其最佳估計。
4.4.4 誤碼率測量
任何turbo編碼器的性能取決于在解碼操作中執(zhí)行的迭代次數(shù)。這意味著,對于給定的渦輪編碼器(例如,LTE標(biāo)準(zhǔn)中指定的編碼器),隨著迭代次數(shù)的增加,BER性能逐漸變好。函數(shù)chap4_ex03_nIter通過計算作為迭代次數(shù)的函數(shù)的BER性能來說明這一點。
1function [ber, numBits]=chap4_ex03_nIter(EbNo, maxNumErrs, maxNumBits, nIter)
2%% Constants
3clear functions;
4FRM=2432; % Size of bit frame
5Indices = lteIntrlvrIndices(FRM);
6M=4;k=log2(M);
7R= FRM/(3* FRM + 4*3);
8snr = EbNo + 10*log10(k) + 10*log10(R);
9noiseVar = 10.^(-snr/10);
10ModulationMode=1; % QPSK
11%% Processsing loop modeling transmitter, channel model and receiver
12numErrs = 0; numBits = 0; nS=0;
13while ((numErrs < maxNumErrs) && (numBits < maxNumBits))
14 % Transmitter
15 u = randi([0 1], FRM,1); % Randomly generated input bits
16 t0 = TurboEncoder(u, Indices); % Turbo Encoder
17 t1 = Scrambler(t0, nS); % Scrambler
18 t2 = Modulator(t1, ModulationMode); % Modulator
19 % Channel
20 c0 = AWGNChannel(t2, snr); % AWGN channel
21 % Receiver
22 r0 = DemodulatorSoft(c0, ModulationMode, noiseVar); % Demodulator
23 r1 = DescramblerSoft(r0, nS); % Descrambler
24 y = TurboDecoder(-r1, Indices, nIter); % Turbo Deocder
25 % Measurements
26 numErrs = numErrs + sum(y~=u); % Update number of bit errors
27 numBits = numBits + FRM; % Update number of bits processed
28 % Manage slot number with each subframe processed
29 nS = nS + 2; nS = mod(nS, 20);
30end
31%% Clean up & collect results
32ber = numErrs/numBits; % Compute Bit Error Rate (BER)
33
為了比較turbo編碼器和傳統(tǒng)卷積編碼器的性能,我們還運行了一個名為chap4_ex03_viterbi.m的函數(shù),它使用了1/3速率的卷積編碼器、Viterbi解碼器和軟判決解調(diào)。
1function [ber, numBits]=chap4_ex03_viterbi(EbNo, maxNumErrs, maxNumBits)
2%% Constants
3FRM=2432; % Size of bit frame
4M=4;k=log2(M);
5R= FRM/(3* (FRM+6));
6snr = EbNo + 10*log10(k) + 10*log10(R);
7noiseVar = 10.^(-snr/10);
8ModulationMode=1; % QPSK
9%% Processsing loop modeling transmitter, channel model and receiver
10numErrs = 0; numBits = 0; nS=0;
11while ((numErrs < maxNumErrs) && (numBits < maxNumBits))
12 % Transmitter
13 u = randi([0 1], FRM,1); % Randomly generated input bits
14 t0 = ConvolutionalEncoder(u); % Convolutional Encoder
15 t1 = Scrambler(t0, nS); % Scrambler
16 t2 = Modulator(t1, ModulationMode); % Modulator
17 % Channel
18 c0 = AWGNChannel(t2, snr); % AWGN channel
19 % Receiver
20 r0 = DemodulatorSoft(c0, ModulationMode, noiseVar); % Demodulator
21 r1 = DescramblerSoft(r0, nS); % Descrambler
22 r2 = ViterbiDecoder(r1); % Viterbi Deocder
23 y=r2(1:FRM);
24 % Measurements
25 numErrs = numErrs + sum(y~=u); % Update number of bit errors
26 numBits = numBits + FRM; % Update number of bits processed
27 % Manage slot number with each subframe processed
28 nS = nS + 2; nS = mod(nS, 20);
29end
30%% Clean up & collect results
31ber = numErrs/numBits; % Compute Bit Error Rate (BER)
32end
33
圖4.4比較了當(dāng)使用Turbo解碼的一次、三次或五次迭代與同樣編碼速率的典型維特比解碼器時Turbo解碼器的BER性能。隨著迭代次數(shù)從1次增加到3次,然后增加到5次,我們看到BER曲線的形狀反映了Turbo譯碼器的近最佳質(zhì)量。該曲線在E/N一定值后呈現(xiàn)陡峭的斜率,例如,以5次迭代為最大迭代次數(shù),結(jié)合QPSK和軟判決解調(diào)器的LTE turbo解碼器能夠達(dá)到1.25dB的信噪比值2e_4。

圖4.4 不同迭代次數(shù)情況下的Turbo編碼與卷積編碼誤碼率對比圖
turbo編碼的這種性能特征可以解釋為什么在LTE標(biāo)準(zhǔn)中turbo編碼被選擇作為用戶數(shù)據(jù)的強(qiáng)制信道編碼機(jī)制。
通過執(zhí)行以下腳本(chap4_ex03_nIter),我們可以測量作為迭代次數(shù)的函數(shù)的收發(fā)器計算時間。計算時間是對turbo編碼和解碼操作的計算復(fù)雜度的估計。
1%% Computation time of turbo coder
2%% as a function of number of iterations
3EbNo=1;
4maxNumErrs=1e6;
5maxNumBits=1e6;
6for nIter=1:6
7 clear functions
8 tic;
9 ber=chap4_ex03_nIter(EbNo, maxNumErrs, maxNumBits , nIter);
10 toc;
11end
12
表4.4總結(jié)了結(jié)果。如預(yù)期的,復(fù)雜度以及因此完成解碼操作所需的時間與迭代次數(shù)成正比。

為了了解什么函數(shù)對我們迄今為止開發(fā)的收發(fā)器(chap4_ex03_nIter)的復(fù)雜性貢獻(xiàn)最大,我們執(zhí)行以下分析腳本。
1%% Profiling the turbo coder system model
2EbNo=1;
3maxNumErrs=1e6;
4maxNumBits=1e6;
5profile on
6ber=chap4_ex03_nIter(EbNo, maxNumErrs, maxNumBits , 1);
7profile viewer
系統(tǒng)模型的每行的執(zhí)行時間總結(jié)在圖4.5所示的分析報告中。

結(jié)果表明,采用固定的迭代值進(jìn)行Turbo譯碼約占整個系統(tǒng)仿真時間的86%。因此,Turbo譯碼器被認(rèn)為是系統(tǒng)的瓶頸之一。為了克服這個問題,LTE標(biāo)準(zhǔn)在LTE編碼器中提供了一種機(jī)制,該機(jī)制使得能夠盡早終止Turbo譯碼,而不會對Turbo譯碼的性能產(chǎn)生嚴(yán)重影響。這種早期終止機(jī)制將在下一節(jié)中討論。
未完待續(xù)
2018/12/2
