3.12 MATLAB信道編碼例子
在本節(jié)中,我們將使用一種教學(xué)方法和一系列MATLAB程序,檢查工具箱在信道編碼方面提供的內(nèi)容。首先,我們將建立一個(gè)系統(tǒng),使用卷積編碼和基于硬判決解碼的維特比譯碼。然后,我們將使用軟判決譯碼更新算法。最后,我們將用卷積編碼算法代替卷積編碼,并比較每個(gè)階段的性能。通過這些簡(jiǎn)單的練習(xí),我們不僅將了解使用MATLAB和通信系統(tǒng)工具箱為移動(dòng)通信模型增加更多復(fù)雜性是多么容易,而且我們將清楚地看到,BER性能的顯著提高解釋了turbo編碼在LTE標(biāo)準(zhǔn)的信道編碼中所起的重要作用。
3.12.1 誤差校正與檢測(cè)
信道編碼包括錯(cuò)誤檢測(cè)和糾錯(cuò)。通過使用CRC(循環(huán)冗余校驗(yàn))檢測(cè)器進(jìn)行錯(cuò)誤檢測(cè),接收器可以請(qǐng)求傳輸?shù)闹貜?fù),這被稱為自動(dòng)重復(fù)請(qǐng)求。前向糾錯(cuò)編碼允許基于傳輸信號(hào)中包括的冗余比特來校正錯(cuò)誤。錯(cuò)誤檢測(cè)和前向糾錯(cuò)的混合稱為HARQ(Hybrid Automatic Repeat Request,混合自動(dòng)重復(fù)請(qǐng)求)構(gòu)成了大多數(shù)3G標(biāo)準(zhǔn)的組成部分,并且也被用于LTE標(biāo)準(zhǔn)。糾錯(cuò)碼通常分為分組碼和卷積碼。卷積碼在2G和3G移動(dòng)通信標(biāo)準(zhǔn)中有著廣泛的應(yīng)用,主要是因?yàn)槠鋸?fù)雜度較低。
在這一節(jié)中,我們將詳細(xì)說明我們已經(jīng)增長(zhǎng)的Matlab模型,它已經(jīng)包含了調(diào)制,包括信道編碼。作為解釋在LTE標(biāo)準(zhǔn)中使用turbo編碼的價(jià)值和動(dòng)機(jī)的完美工具,我們將比較卷積編碼和turbo編碼的性能。此外,為了解釋在使用接收機(jī)設(shè)計(jì)中所涉及的折衷,我們將比較具有和不帶軟判決譯碼的調(diào)制編碼組合的性能。
3.12.2 卷積碼
卷積碼是由輸入序列與編碼器的脈沖響應(yīng)卷積而產(chǎn)生的。編碼器接受k位輸入樣本塊,并通過對(duì)當(dāng)前數(shù)據(jù)塊和m個(gè)先前輸入塊進(jìn)行操作,產(chǎn)生n位輸出樣本塊。編碼器的編碼速率由比Rc=k/n給出,卷積編碼器由這三個(gè)參數(shù)(n,k,m)指定。圖3.6示出了卷積編碼器。
3.12.3 硬判決Viterbi譯碼
在本練習(xí)的第一次迭代中,我們修改了上一節(jié)中的MATLAB函數(shù),以在調(diào)制中添加信道編碼方案。當(dāng)使用信道編碼方案時(shí),發(fā)射機(jī)通過無線信道發(fā)送冗余比特和消息比特。接收機(jī)接收發(fā)送的信號(hào),并使用冗余位來檢測(cè)和校正信道引入的一些錯(cuò)誤。讓我們開始向通信系統(tǒng)添加卷積編碼器和維特比解碼器。該通信系統(tǒng)使用硬判決維特比譯碼,其中解調(diào)器將接收信號(hào)映射到位,然后將位傳遞到維特比譯碼器進(jìn)行糾錯(cuò)。下面的MATLAB函數(shù)(chap3_ex03_qpsk_viterbi)使用QPSK調(diào)制和AWGN信道的硬判決Viterbi解碼。
1function [ ber,bits ] = chap3_ex03_qpsk_viterbi( EbNo,maxNumErrs,maxNumBits )
2%% Initializations
3
4persistent Modulator AWGN DeModulator BitError ConvEncoder Viterbi
5
6if isempty(Modulator)
7 Modulator = comm.QPSKModulator('BitInput',true);
8 AWGN = comm.AWGNChannel;
9 DeModulator = comm.QPSKDemodulator('BitOutput',true);
10 BitError = comm.ErrorRate;
11 ConvEncoder = comm.ConvolutionalEncoder('TerminationMethod','Terminated');
12 Viterbi = comm.ViterbiDecoder('InputFormat','Hard','TerminationMethod','Terminated');
13end
14%% Constants
15FRM = 2048;
16M = 4;
17k = log2(M);
18codeRate = 1/2;
19snr = EbNo + 10*log10(k)+10*log10(codeRate);
20AWGN.EbNo = snr;
21
22%% Processing loop modeling transmitter, channel model and receiver
23numErrs = 0;
24numBits = 0;
25results = zeros(3,1);
26while((numErrs< maxNumErrs)&&(numBits< maxNumBits))
27 % Transmitter
28 u = randi([0 1],FRM,1);
29 encoded = ConvEncoder.step(u);
30 mod_sig = Modulator.step(encoded);
31
32 % Channel
33 rx_sig = AWGN.step(mod_sig);
34
35 % Receiver
36 demod = DeModulator.step(rx_sig);
37 decoded = Viterbi.step(demod);
38 y = decoded(1:FRM);
39 results = BitError.step(u,y);
40 numErrs = results(2);
41 numBits = results(3);
42end
43
44%% Clean up & collect results
45ber = results(1);
46bits = results(3);
47reset(BitError);
48
49end
通過在BERTool中運(yùn)行該函數(shù),我們可以測(cè)量硬判決維特比譯碼的性能,并與上限理論結(jié)果進(jìn)行比較。檢查圖3.7中的結(jié)果,我們可以看到模擬的BER曲線低于理論上限值,這與我們的期望是一致的。這些結(jié)果表明,為了達(dá)到更好的性能,我們需要改進(jìn)我們的解碼算法。
圖3.7 Viterbi譯碼的性能和AWGN信道的QPSK調(diào)制對(duì)比
3.12.4 軟判決Viterbi譯碼
在這個(gè)迭代中,我們通過使用軟判決譯碼算法來改進(jìn)BER性能結(jié)果。在軟判決譯碼中,解調(diào)器將接收到的信號(hào)映射到對(duì)數(shù)似然比。這些概率度量是基于接收到正確數(shù)據(jù)的可能性的對(duì)數(shù)而不是損壞的數(shù)據(jù)。當(dāng)提供對(duì)數(shù)似然比作為對(duì)維特比解碼器的輸入時(shí),解碼器的誤碼率性能得到改善。通過改變幾個(gè)解調(diào)器和維特比譯碼器系統(tǒng)目標(biāo)參數(shù),可以得到一種實(shí)現(xiàn)軟判決維特比譯碼的算法。下面的MATLAB函數(shù)(chap3_ex04_qpsk_viterbi_soft() )已被更新為使用軟判決維特比譯碼。
1function [ ber,bits ] = chap3_ex04_qpsk_viterbi_soft( EbNo,maxNumErrs,maxNumBits )
2%% Initializations
3
4persistent Modulator AWGN DeModulator BitError ConvEncoder Viterbi Quantizer
5
6if isempty(Modulator)
7 Modulator = comm.QPSKModulator('BitInput',true);
8 AWGN = comm.AWGNChannel;
9 DeModulator = comm.QPSKDemodulator('BitOutput',true,'DecisionMethod','Log-likelihood ratio','VarianceSource','Input port');
10 BitError = comm.ErrorRate;
11 ConvEncoder = comm.ConvolutionalEncoder('TerminationMethod','Terminated');
12 Viterbi = comm.ViterbiDecoder('InputFormat','Soft','SoftInputWordLength',4,'OutputDataType','double','TerminationMethod','Terminated');
13 Quantizer = dsp.ScalarQuantizerEncoder('Partitioning','Unbounded','BoundaryPoints',-7:7,'OutputIndexDataType','uint8');
14
15
16end
17%% Constants
18FRM = 2048;
19M = 4;
20k = log2(M);
21codeRate = 1/2;
22snr = EbNo + 10*log10(k)+10*log10(codeRate);
23noise_var = 10.^(-snr/10);
24AWGN.EbNo = snr;
25
26%% Processing loop modeling transmitter, channel model and receiver
27numErrs = 0;
28numBits = 0;
29results = zeros(3,1);
30while((numErrs< maxNumErrs)&&(numBits< maxNumBits))
31 % Transmitter
32 u = randi([0 1],FRM,1);
33 encoded = ConvEncoder.step(u);
34 mod_sig = Modulator.step(encoded);
35
36 % Channel
37 rx_sig = AWGN.step(mod_sig);
38
39 % Receiver
40 demod = DeModulator.step(rx_sig,noise_var);
41 llr = Quantizer.step(-demod);
42 decoded = Viterbi.step(llr);
43 y = decoded(1:FRM);
44 results = BitError.step(u,y);
45 numErrs = results(2);
46 numBits = results(3);
47end
48
49%% Clean up & collect results
50ber = results(1);
51bits = results(3);
52reset(BitError);
53
54end
理論上,我們預(yù)期結(jié)果會(huì)有2dB的改進(jìn),這正是圖3.8中所示的模擬曲線。接下來,我們檢查Turbo編碼,看看它是否可以提供任何改進(jìn)的BER結(jié)果。
圖3.8 硬判決Viterbi譯碼 Vs 軟判決Viterbi譯碼
3.12.5 Turbo 編碼
Turbo碼大大提高了軟判決Viterbi譯碼的誤碼率性能。Turbo編碼在發(fā)射機(jī)處并行使用兩個(gè)卷積編碼器,在接收機(jī)處串聯(lián)使用兩個(gè)A后驗(yàn)概率(APP)解碼器。此示例使用率1/3 turbo編碼器。對(duì)于每個(gè)輸入位,輸出具有一個(gè)系統(tǒng)位和兩個(gè)奇偶位,總共三位。
下面的MATLAB函數(shù)已被更新,使用Turbo編碼器和解碼器。注意,Turbo解碼是一個(gè)迭代迭代,性能隨著迭代次數(shù)的增加而提高。在這個(gè)例子中,我們選擇了六作為解碼器執(zhí)行的迭代次數(shù)。
1function [ ber,bits ] = chap3_ex05_qpsk_turbo( EbNo,maxNumErrs,maxNumBits )
2%% Constants
3FRM = 2048;
4Trellis = poly2trellis(4,[13 15],13);
5Indices = randperm(FRM);
6M = 4;
7k = log2(M);
8R = FRM/(3*FRM+4*3);
9
10snr = EbNo + 10*log10(k)+10*log10(R);
11noise_var = 10.^(-snr/10);
12
13%% Initializations
14persistent Modulator AWGN DeModulator BitError TurboEncoder TurboDecoder
15
16if isempty(Modulator)
17 Modulator = comm.QPSKModulator('BitInput',true);
18 AWGN = comm.AWGNChannel;
19 DeModulator = comm.QPSKDemodulator('BitOutput',true,'DecisionMethod','Log-likelihood ratio','VarianceSource','Input port');
20 BitError = comm.ErrorRate;
21 TurboEncoder = comm.TurboEncoder('TrellisStructure',Trellis,'InterleaverIndices',Indices);
22 TurboDecoder = comm.TurboDecoder('TrellisStructure',Trellis,'InterleaverIndices',Indices,'NumIterations',6);
23end
24
25
26%% Processing loop modeling transmitter, channel model and receiver
27AWGN.EbNo = snr;
28numErrs = 0;
29numBits = 0;
30results = zeros(3,1);
31while((numErrs< maxNumErrs)&&(numBits< maxNumBits))
32 % Transmitter
33 u = randi([0 1],FRM,1);
34 encoded = TurboEncoder.step(u);
35 mod_sig = Modulator.step(encoded);
36
37 % Channel
38 rx_sig = AWGN.step(mod_sig);
39
40 % Receiver
41 demod = DeModulator.step(rx_sig,noise_var);
42
43 decoded = TurboDecoder.step(-demod);
44 y = decoded(1:FRM);
45 results = BitError.step(u,y);
46 numErrs = results(2);
47 numBits = results(3);
48end
49
50%% Clean up & collect results
51ber = results(1);
52bits = results(3);
53reset(BitError);
54
55end
圖3.9示出了在AWGN信道下QPSK調(diào)制中turbo編碼的結(jié)果。注意,在1dB,我們有一個(gè)BER值發(fā)生在5dB的硬判決和3dB軟判決解碼。這清楚地表明了Turbo編碼算法的優(yōu)越性。記住,這種性能增益是以計(jì)算復(fù)雜性的增加為代價(jià)的 (我的電腦單單計(jì)算 Turbo Coding 就花費(fèi)了很長(zhǎng)時(shí)間,而我的電腦配置是最新的 CORE i7)。我們的Turbo解碼器經(jīng)過六次迭代譯碼以達(dá)到這一性能。我們將在Turbo譯碼器中研究性能和復(fù)雜性之間的折衷。
3.13 本章總結(jié)
Simulink及其工具箱提供了用于建模、仿真、評(píng)估性能、以及最終生成和實(shí)現(xiàn)通信系統(tǒng)代碼的能力。對(duì)于建模和仿真,我們可以使用來自通信系統(tǒng)工具箱的算法構(gòu)建塊,作為系統(tǒng)對(duì)象或Simulink塊。在MATLAB中可以更有效地對(duì)移動(dòng)標(biāo)準(zhǔn)的PHY處理的許多方面進(jìn)行建模和仿真,因?yàn)槲覀兛梢詫W⒂趯⒏呒?jí)的功能引入系統(tǒng)模型,而不是創(chuàng)建諸如調(diào)制器和編碼器之類的構(gòu)建塊。特別感興趣的是通信系統(tǒng)工具箱的系統(tǒng)對(duì)象。系統(tǒng)對(duì)象是為基于塊的流系統(tǒng)的建模而設(shè)計(jì)的自文檔化、易于使用和定制的建模和仿真組件。
當(dāng)模擬復(fù)雜系統(tǒng)時(shí),我們需要訪問各種加速技術(shù)。這些技術(shù)幫助我們處理更多的測(cè)試數(shù)據(jù),并在合理的模擬時(shí)間內(nèi)獲得統(tǒng)計(jì)上正確的評(píng)估。MATLAB工具箱,如并行處理工具箱和MATLAB編碼器可以加快仿真。最后,為了在軟件或硬件上實(shí)現(xiàn)設(shè)計(jì),我們可以使用代碼生成產(chǎn)品通過自動(dòng)C或HDL代碼生成來獲得對(duì)精確實(shí)現(xiàn)細(xì)節(jié)的訪問。
-
解調(diào)器
+關(guān)注
關(guān)注
0文章
286瀏覽量
25812 -
MATLAB仿真
+關(guān)注
關(guān)注
4文章
176瀏覽量
19922 -
QPSK調(diào)制
+關(guān)注
關(guān)注
0文章
11瀏覽量
7619 -
CRC效驗(yàn)
+關(guān)注
關(guān)注
0文章
30瀏覽量
1102 -
卷積編碼器
+關(guān)注
關(guān)注
0文章
6瀏覽量
2434
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論