“原文 Understanding LTE with MATLAB ,作者Houman Zarrinkoub,本文是對(duì)于該書的翻譯,書中的專業(yè)性詞匯給出了英文原文,圖和表的排版都是參考原文,翻譯不準(zhǔn)確的地方請(qǐng)讀者多多包涵。
本文僅限于個(gè)人學(xué)習(xí),研究,交流,不得用于其他商業(yè)用途!”
4.3 信道編碼
到目前為止,我們已經(jīng)討論了在物理信道處理中執(zhí)行的調(diào)制和加擾操作,F(xiàn)在我們將結(jié)合TrCH處理,即信道編碼,與調(diào)制和加擾。我們將介紹基于turbo編碼的糾錯(cuò)編碼和以CRC檢測(cè)為代表的錯(cuò)誤檢測(cè)機(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ū)動(dòng)部件;谖覀兊慕虒W(xué)方法,我們將逐步建立LTE標(biāo)準(zhǔn)的TrCH處理,分五個(gè)步驟。首先,我們以1/3的編碼率實(shí)現(xiàn)turbo編碼算法。然后在Turbo譯碼器中加入早期終止機(jī)制。這使得Turbo解碼器的計(jì)算復(fù)雜度可擴(kuò)展。然后,我們介紹速率匹配操作,它通過對(duì)1/3速率渦輪編碼器輸出進(jìn)行操作來(lái)提供任意給定速率的編碼。介紹了與子塊分割和碼字重構(gòu)相關(guān)的功能。最后,將所有組件放在一起,實(shí)現(xiàn)TrCH處理的處理鏈。在這本書中,我們省略了與HARQ處理相關(guān)的MATLAB函數(shù)的介紹。HARQ處理非常重要,因?yàn)樗举|(zhì)上減少了重傳次數(shù),并且提高了傳輸塊錯(cuò)誤檢測(cè)之后的性能。這個(gè)省略符合我們聲明的范圍,該范圍關(guān)注于穩(wěn)態(tài)用戶平面處理。
4.4 Turbo 編碼
Turbo編碼器屬于稱為并行級(jí)聯(lián)卷積編碼的一類信道編碼算法[2]。顧名思義,turbo碼是通過并行連接兩個(gè)傳統(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)部交織器分離的兩個(gè)8狀態(tài)分量編碼器的并行級(jí)聯(lián)。Turbo編碼器的輸出由三個(gè)碼流組成。第一流的位通常被稱為系統(tǒng)位。第二和第三流的比特——即兩個(gè)組成編碼器的輸出——通常分別稱為奇偶校驗(yàn)1和奇偶校驗(yàn)2比特流。每個(gè)組成編碼器獨(dú)立地由尾部比特終止。這意味著對(duì)于K位的輸入塊大小,由于網(wǎng)格終止,渦輪編碼器的輸出由三個(gè)長(zhǎng)度為K+4位的流組成。這使得Turbo編碼器的編碼率略小于1/3。由于在每個(gè)流的末尾多路復(fù)用尾比特,所以系統(tǒng)位和奇偶校驗(yàn)1和奇偶校驗(yàn)2比特流都具有大小K+4。
為了完全指定turbo編碼器,我們需要指定組成編碼器和turbo代碼內(nèi)部交織器的網(wǎng)格結(jié)構(gòu)。LTE交織器是基于一個(gè)簡(jiǎn)單的二次多項(xiàng)式置換(QPP)方案。交織器置換輸入比特的索引。輸出索引p(i)和輸入索引i之間的關(guān)系由以下二次多項(xiàng)式表達(dá)式描述:
其中K是輸入塊的大小,f1和f2是取決于K值的常數(shù)。LTE允許輸入塊大小K為188個(gè)不同的值。最小塊大小為40,最大塊大小為6144。這些塊大小和相應(yīng)的f1和f2常數(shù)在文獻(xiàn)[3]中進(jìn)行了總結(jié)。
LTE turbo編碼器是使用QPP交織器的無(wú)競(jìng)爭(zhēng)編碼器,它通過在交織操作中對(duì)存儲(chǔ)器訪問進(jìn)行流線化來(lái)顯著改善turbo碼的性能。組成編碼器的網(wǎng)格結(jié)構(gòu)由以下兩個(gè)多項(xiàng)式描述:
這描述了一個(gè)1/3 Turbo編碼器,具有四個(gè)狀態(tài),并且在每個(gè)組成編碼器處具有網(wǎng)格結(jié)構(gòu),由前饋和反饋連接多項(xiàng)式表示,八度值分別為13和15。
4.4.2 Turbo 解碼器
在接收機(jī)中,turbo解碼器將turbo編碼器執(zhí)行的操作反相。turbo譯碼器基于兩個(gè)校驗(yàn)位(APP)譯碼器和反饋環(huán)路中的兩個(gè)交織器的使用。在APP解碼器中使用在turbo編碼器中發(fā)現(xiàn)的相同的網(wǎng)格結(jié)構(gòu),以及相同的交織器。不同之處在于turbo解碼是一種迭代操作。turbo譯碼器的性能和計(jì)算復(fù)雜度直接關(guān)系到所執(zhí)行的迭代次數(shù)。
在接收機(jī)處,turbo解碼器執(zhí)行turbo編碼器的逆操作。通過處理其輸入信號(hào),即解調(diào)和解擾器的輸出,turbo解碼器將恢復(fù)TrCH傳輸比特的最佳估計(jì)。請(qǐng)注意,Turbo解碼器輸入需要在LLRs中表示。如前所述,如果執(zhí)行軟判決解調(diào),則解調(diào)器生成LLR。
4.4.3 MATLAB 例子
下面的兩個(gè)MATLAB函數(shù)顯示了LTE的Turobo碼器和解碼器的實(shí)現(xiàn)及其所有規(guī)范,使用通信系統(tǒng)工具箱的系統(tǒng)對(duì)象。在TurboEncoder函數(shù)中,我們使用comm.TurboEncoder系統(tǒng)對(duì)象,設(shè)置網(wǎng)格結(jié)構(gòu)和交織器屬性,以實(shí)現(xiàn)LTE標(biāo)準(zhǔn)中指定的功能。通過調(diào)用系統(tǒng)對(duì)象的step方法,對(duì)輸入比特進(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ù)對(duì)其第一輸入信號(hào)(u)進(jìn)行操作,該信號(hào)是解調(diào)器和解擾器的LLR輸出。Turbo解碼器將恢復(fù)發(fā)送比特的最佳估計(jì)。該函數(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)同時(shí)具有前饋和反饋連接多項(xiàng)式,我們首先建立多項(xiàng)式的二進(jìn)制數(shù)表示,然后將二進(jìn)制表示轉(zhuǎn)換成八進(jìn)制表示。通過查看圖4.3中的渦輪編碼器的框圖,我們可以看出該編碼器具有約束長(zhǎng)度為4、生成器多項(xiàng)式矩陣為[1315]和反饋連接多項(xiàng)式為13。因此,為了設(shè)置網(wǎng)格結(jié)構(gòu),我們需要使用poly2trellis(4,[1315],13)函數(shù)。
為了構(gòu)建基于QPP方案的LTE交織器,我們使用lteIntrlvrIndices() 函數(shù)。該函數(shù)基于僅允許的188個(gè)輸入大小查找LTE交織器表,找到相應(yīng)的f1和f2常數(shù),并按照標(biāo)準(zhǔn)中的描述計(jì)算置換向量。
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)對(duì)象是基于直接MATLAB實(shí)現(xiàn)來(lái)表達(dá)算法的對(duì)象。因此,使用MATLAB編輯命令,我們可以檢查每次使用這些系統(tǒng)對(duì)象時(shí)執(zhí)行的MATLAB代碼;贛ATLAB的系統(tǒng)對(duì)象的創(chuàng)建和創(chuàng)作超出了本書的范圍;有關(guān)此主題的更多信息,請(qǐng)參考MATLAB文檔[4]。為了說(shuō)明MATLAB實(shí)現(xiàn)如何符合我們的期望,我們可以檢查這個(gè)系統(tǒng)對(duì)象的stepimpl函數(shù)。
comm.TurboEncoder stepimpl函數(shù)執(zhí)行兩個(gè)卷積編碼操作,首先針對(duì)輸入信號(hào),然后針對(duì)信號(hào)的交織版本。然后它捕獲與網(wǎng)格終止相關(guān)的額外樣本并將它們附加到Systematic和Parity流的末尾。comm.TurboDecoder stepimpl重復(fù)一系列操作,包括兩個(gè)APP解碼器和交織器,N次。N值對(duì)應(yīng)于turbo解碼器中的最大迭代次數(shù)。在每個(gè)處理迭代結(jié)束時(shí),turbo解碼器使用結(jié)果更新其最佳估計(jì)。
4.4.4 誤碼率測(cè)量
任何turbo編碼器的性能取決于在解碼操作中執(zhí)行的迭代次數(shù)。這意味著,對(duì)于給定的渦輪編碼器(例如,LTE標(biāo)準(zhǔn)中指定的編碼器),隨著迭代次數(shù)的增加,BER性能逐漸變好。函數(shù)chap4_ex03_nIter通過計(jì)算作為迭代次數(shù)的函數(shù)的BER性能來(lái)說(shuō)明這一點(diǎn)。
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)卷積編碼器的性能,我們還運(yùn)行了一個(gè)名為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解碼的一次、三次或五次迭代與同樣編碼速率的典型維特比解碼器時(shí)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編碼與卷積編碼誤碼率對(duì)比圖
turbo編碼的這種性能特征可以解釋為什么在LTE標(biāo)準(zhǔn)中turbo編碼被選擇作為用戶數(shù)據(jù)的強(qiáng)制信道編碼機(jī)制。
通過執(zhí)行以下腳本(chap4_ex03_nIter),我們可以測(cè)量作為迭代次數(shù)的函數(shù)的收發(fā)器計(jì)算時(shí)間。計(jì)算時(shí)間是對(duì)turbo編碼和解碼操作的計(jì)算復(fù)雜度的估計(jì)。
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ù)成正比。
為了了解什么函數(shù)對(duì)我們迄今為止開發(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í)行時(shí)間總結(jié)在圖4.5所示的分析報(bào)告中。
結(jié)果表明,采用固定的迭代值進(jìn)行Turbo譯碼約占整個(gè)系統(tǒng)仿真時(shí)間的86%。因此,Turbo譯碼器被認(rèn)為是系統(tǒng)的瓶頸之一。為了克服這個(gè)問題,LTE標(biāo)準(zhǔn)在LTE編碼器中提供了一種機(jī)制,該機(jī)制使得能夠盡早終止Turbo譯碼,而不會(huì)對(duì)Turbo譯碼的性能產(chǎn)生嚴(yán)重影響。這種早期終止機(jī)制將在下一節(jié)中討論。
未完待續(xù)
2018/12/2
點(diǎn)擊關(guān)注了解更多精彩內(nèi)容!