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

翻譯:Understanding LTE with MATLAB——3.11節(jié)
3.11 系統(tǒng)對(duì)象接收
在這本書中,我們強(qiáng)調(diào)了通信系統(tǒng)工具箱的許多特性,特別是我們將介紹產(chǎn)品中使用的新系統(tǒng)對(duì)象。通過非常直觀的用戶界面,系統(tǒng)對(duì)象使得表達(dá)通信系統(tǒng)的任務(wù)更加容易,并且使得生成的MATLAB代碼更加可讀和可共享。系統(tǒng)對(duì)象可以用作Matlab程序和Simulink模型的一部分。它們是表示基于時(shí)間和可執(zhí)行算法的MATLAB對(duì)象,并且它們被組織為對(duì)象,以便于使用和實(shí)際上自我記錄。由于在本書的其余部分中我們依賴于System對(duì)象在MATLAB中表達(dá)LTE系統(tǒng)模型,因此本節(jié)將給出一個(gè)關(guān)于如何使用這些算法組件的簡(jiǎn)短教程。在此,我們插入MATLAB安裝時(shí)需要安裝的組件內(nèi)容,如圖A所示:

圖A. 安裝MATLAB需要安裝的Toolbox
3.11.1 通信系統(tǒng)工具箱對(duì)象
通信系統(tǒng)工具箱的系統(tǒng)對(duì)象屬于通信(comm)包,它們的名稱以公共前綴“comm”開頭。為了訪問通信系統(tǒng)工具箱的所有系統(tǒng)對(duì)象,鍵入“comm”,然后在MATLAB命令后鍵入Tab鍵:
>>comm.<Tab>
這將產(chǎn)生工具箱中可用的所有系統(tǒng)對(duì)象的按字母順序排列的列表。在MATLAB的最新版本中,通信系統(tǒng)工具箱包含作為系統(tǒng)對(duì)象提供的總共123個(gè)算法。
讓我們選擇這些系統(tǒng)對(duì)象中的一個(gè),例如COM.QPSK調(diào)制器,并創(chuàng)建這類調(diào)制器的一個(gè)實(shí)例。我們把這個(gè)實(shí)例稱為“調(diào)制器”。
>>Modulator = comm.QPSKModulator
將創(chuàng)建一個(gè)QPSK(Quadratue Phase Shift Keying)調(diào)制器,該對(duì)象的描述將出現(xiàn)在MATLAB工作區(qū)中,如圖3.1所示。

圖3.1.通過通信工具創(chuàng)建一個(gè)系統(tǒng)對(duì)象
每個(gè)系統(tǒng)對(duì)象都包含屬性和方法。其默認(rèn)屬性在創(chuàng)建時(shí)出現(xiàn);此自文檔是系統(tǒng)對(duì)象的有用特性。通過查看給定系統(tǒng)對(duì)象的屬性列表,我們知道它可以采用哪些參數(shù),以及通常為它們分配哪些值。例如,QPSK調(diào)制器的相位偏移特性默認(rèn)設(shè)置為
𝜋/4 。讓我們把這個(gè)參數(shù)變成 𝜋/2。修改屬性有兩種方法:
>> Modulator = comm.QPSKModulator('PhaseOffset',pi/2);
如果屬性被表示為一串字符,那么當(dāng)我們想要設(shè)置一個(gè)特定的屬性時(shí),會(huì)出現(xiàn)一個(gè)方便的可能值的列表。例如,當(dāng)我們鍵入“Modulator.SymbolMapping=”后跟一個(gè)Tab時(shí),映射選項(xiàng)列表似乎有助于將屬性設(shè)置為幾個(gè)選項(xiàng)中的任何一個(gè),在本例中為“Binary”和“Gray”。
step 方法是系統(tǒng)對(duì)象執(zhí)行的主要方法。在創(chuàng)建和配置對(duì)象之后,可以傳遞一個(gè)輸入(或多個(gè)輸入),并且可以調(diào)用它的step方法來(lái)生成它的輸出(或多個(gè)輸出)。有兩個(gè)語(yǔ)法可用來(lái)執(zhí)行系統(tǒng)對(duì)象的STEP方法。我們可以:
使用“.”操作符來(lái)調(diào)用系統(tǒng)對(duì)象: y = Modulator.step(u);
使用step方法作為函數(shù),系統(tǒng)對(duì)象作為函數(shù)的變量:y = step(Modulator, u).
在圖3.2中,使用MATLAB randi函數(shù)創(chuàng)建10×1列位向量(變量u),然后作為輸入傳遞給Modulator System對(duì)象。通過調(diào)用它的step方法,基于指定的屬性使用QPSK算法創(chuàng)建表示調(diào)制比特的調(diào)制符號(hào)的5×1輸出向量(y)。

圖3.2.調(diào)用step方法執(zhí)行系統(tǒng)對(duì)象
現(xiàn)在我們已經(jīng)了解了如何訪問、創(chuàng)建、設(shè)置系統(tǒng)對(duì)象的屬性、配置和調(diào)用系統(tǒng)對(duì)象來(lái)執(zhí)行計(jì)算,接下來(lái)讓我們創(chuàng)建一個(gè)簡(jiǎn)單的腳本,該腳本使用幾個(gè)系統(tǒng)對(duì)象來(lái)表達(dá)一個(gè)簡(jiǎn)單的通信系統(tǒng)。
3.11.2 系統(tǒng)對(duì)象測(cè)試
下面是一個(gè)MATLAB腳本,或者稱為testbench,它使用系統(tǒng)對(duì)象對(duì)簡(jiǎn)單的收發(fā)器系統(tǒng)進(jìn)行BER分析。該收發(fā)器由QPSK調(diào)制器、加性高斯白噪聲(AWGN)信道和QPSK解調(diào)器組成。注意,此代碼使用了來(lái)自通信系統(tǒng)工具箱的四個(gè)系統(tǒng)對(duì)象:comm.QPSKModulator、comm.AWGNChannel、comm.QPSKDemodulator和comm.ErrorRate。
1%% Constants
2FRM = 2048;
3MaxNumErrs = 200;
4MaxNumBits = 1e7;
5EbNo_vector = 0:10;
6BER_vector = zeros(size(EbNo_vector));
7
8%% Initializations
9
10Modulator = comm.QPSKModulator('BitInput',true);
11AWGN = comm.AWGNChannel;
12DeModulator = comm.QPSKDemodulator('BitOutput',true);
13BitError = comm.ErrorRate;
14
15%% Outer Loop computing Bit-error rate as a function of EbNo
16
17for EbNo = EbNo_vector
18 snr = EbNo + 10*log10(2);
19 AWGN.EbNo = snr;
20 numErrs = 0;
21 numBits = 0;
22 results = zeros(3,1);
23 %% Inner loop modeling transmitter, chanel model and receiver for each EbNo
24 while((numErrs<MaxNumErrs)&&(numBits<MaxNumBits))
25 % Transmitter
26 u = randi([0,1],FRM,1);
27 mod_sig = step(Modulator,u);
28
29 % Channel
30 rx_sig = step(AWGN,mod_sig);
31
32 %Receiver
33 y = step(DeModulator,rx_sig);
34 results = step(BitError,u,y);
35 numErrs = results(2);
36 numBits = results(3);
37 end
38
39 % Compute BER
40
41 ber = results(1);
42 bits = results(3);
43
44 %% Clean up & collect results
45 reset(BitError);
46 BER_vector(EbNo+1) = ber;
47end
48
49%% Visualize results
50
51EbNoLin = 10.^(EbNo_vector/10);
52theoretical_results = 0.5*erfc(sqrt(EbNoLin));
53semilogy(EbNo_vector,BER_vector)
54grid;
55title('BER vs. EbNo - QPSK modulation');
56xlabel('Eb/No (dB)');
57ylabel('BER');
58hold;
59semilogy(EbNo_vector,theoretical_results,'dr');
60hold;
61legend('Simulation','Theoretical');
該腳本由四個(gè)部分組成。在初始化部分中,創(chuàng)建系統(tǒng)對(duì)象并設(shè)置一些參數(shù)。第二部分包含處理測(cè)試臺(tái),該測(cè)試臺(tái)迭代Eb/N0值并計(jì)算相應(yīng)的BER度量。第三部分是收發(fā)機(jī)處理循環(huán),其中調(diào)用系統(tǒng)對(duì)象的步驟方法來(lái)調(diào)制輸入信號(hào),向調(diào)制信號(hào)中添加信道噪聲,并解調(diào)以產(chǎn)生接收信號(hào)和計(jì)算誤碼率。最后,在第四部分中,對(duì)仿真進(jìn)行了清理和終止,并對(duì)BER性能結(jié)果進(jìn)行了可視化。輸出結(jié)果如圖3.3所示。

圖3.3AWGN信道下QPSK調(diào)制的BER曲線仿真與理論結(jié)果對(duì)比
通過運(yùn)行這個(gè)腳本,我們獲得了使用AWGN信道的QPSK調(diào)制系統(tǒng)的BER曲線。由AWGN信道處理的QPSK調(diào)制的理論BER結(jié)果為公式(3-1):

系統(tǒng)對(duì)象的使用產(chǎn)生了模塊化的、易于理解的MATLAB代碼,并形成了可以擴(kuò)展為更復(fù)雜系統(tǒng)的結(jié)構(gòu)。我們將初始化,處理循環(huán),終止,可視化這四個(gè)步驟貫穿本書。改進(jìn)MATLAB程序并使其更易讀的一種方法是將測(cè)試臺(tái)和可視化操作與算法和系統(tǒng)描述分開。接下來(lái),我們將展示如何通過將收發(fā)器捕獲為MATLAB函數(shù)并將算法組件與測(cè)試臺(tái)腳本分離來(lái)實(shí)現(xiàn)這一點(diǎn)。
3.11.3 系統(tǒng)對(duì)象函數(shù)
MATLAB函數(shù) chap3_ex02_qpsk() 執(zhí)行我們的簡(jiǎn)單QPSK收發(fā)器系統(tǒng)的算法部分。這個(gè)函數(shù)有三個(gè)輸入變量:
對(duì)于每個(gè)Eb/N0值,代碼在while循環(huán)中運(yùn)行,直到觀察到指定的最大錯(cuò)誤數(shù)量或處理最大位數(shù)為止。該代碼通過調(diào)用step方法來(lái)執(zhí)行每個(gè)系統(tǒng)對(duì)象。它計(jì)算兩個(gè)輸出:
1function [ ber,bits ] = chap3_ex02_qpsk( EbNo,maxNumErrs,maxNumBits )
2%% Initializations
3
4persistent Modulator AWGN DeModulator BitError
5
6if isempty(Modulator)
7 Modulator = comm.QPSKModulator('BitInput',true);
8 AWGN = comm.AWGNChannel;
9 DeModulator = comm.QPSKDemodulator('BitOutput',true);
10 BieError = comm.ErrorRate;
11end
12
13%% Constants
14FRM = 2048;
15M = 4;
16k = log2(M);
17snr = EbNo + 10*log10(k);
18AWGN.EbNo = snr;
19
20%% Processing loop modeling transmitter, channel model and receiver
21numErrs = 0;
22numBits = 0;
23results = zeros(3,1);
24while((numErrs<maxNumErrs)&&(numBits<maxNumBits))
25 % Transmitter
26 u = randi([0 1],FRM,1);
27 mod_sig = Modulator.step(u);
28
29 % Channel
30 rx_sig = AWGN.step(mod_sig);
31
32 % Receiver
33 demod = DeModulator.step(mod_sig);
34 y = demod(1:FRM);
35 results = BitError.step(u,y);
36 numErrs = results(2);
37 numBits = results(3);
38end
39
40%% Clean up & collect results
41ber = results(1);
42bits = results(3);
43reset(BitError);
44
45end
46
47
48}
為了避免每次調(diào)用函數(shù)時(shí)創(chuàng)建和釋放系統(tǒng)對(duì)象所涉及的開銷,函數(shù)中的系統(tǒng)對(duì)象由持久變量 persistent 表示。使用持久變量允許我們執(zhí)行諸如只在第一次調(diào)用函數(shù)時(shí)創(chuàng)建系統(tǒng)對(duì)象之類的操作。這增加了函數(shù)調(diào)用的效率,并提高了我們?cè)谘h(huán)中調(diào)用函數(shù)的模擬速度。
3.11.4 BER仿真
通信系統(tǒng)工具箱為BER工具提供了一個(gè)用于BER仿真性能的綜合測(cè)試臺(tái)。BERTool 是一個(gè)圖形應(yīng)用程序,它計(jì)算一系列模擬的誤碼率,并將結(jié)果與已知的分析結(jié)果進(jìn)行比較。

圖3.4. BERTool:BER結(jié)果可視化的測(cè)試平臺(tái)應(yīng)用

圖3.15 BER仿真結(jié)果輸出
例如,為了可視化函數(shù)chap3_ex02_qpsk.m的模擬BER,如圖3.4所示,轉(zhuǎn)到Mote
Carlo選項(xiàng)卡,將文件指定為模擬MATLAB文件,并指定Eb/N0值和停止條件。BERTool將計(jì)算提供的Eb/N0值范圍內(nèi)的BER,并將自動(dòng)顯示結(jié)果。這些模擬結(jié)果可以通過進(jìn)入理論標(biāo)簽并指定所使用的調(diào)制和編碼方案與理論結(jié)果進(jìn)行比較。圖3.5顯示了BERTool仿真結(jié)果的輸出。
點(diǎn)擊關(guān)注了解更多精彩內(nèi)容!!
未完待續(xù)
2018/11/13
