1. 程式人生 > >誤位元速率BER計算原理及模擬輸出

誤位元速率BER計算原理及模擬輸出

原文 Understanding LTE with MATLAB  ,作者Houman Zarrinkoub,本文是對於該書的翻譯,書中的專業性詞彙給出了英文原文,圖和表的排版都是參考原文,翻譯不準確的地方請讀者多多包涵。

本文僅限於個人學習,研究,交流,不得用於其他商業用途!

翻譯:Understanding LTE with MATLAB——3.11節

3.11 系統物件接收

在這本書中,我們強調了通訊系統工具箱的許多特性,特別是我們將介紹產品中使用的新系統物件。通過非常直觀的使用者介面,系統物件使得表達通訊系統的任務更加容易,並且使得生成的MATLAB程式碼更加可讀和可共享。系統物件可以用作Matlab程式和Simulink模型的一部分。它們是表示基於時間和可執行演算法的MATLAB物件,並且它們被組織為物件,以便於使用和實際上自我記錄。由於在本書的其餘部分中我們依賴於System物件在MATLAB中表達LTE系統模型,因此本節將給出一個關於如何使用這些演算法元件的簡短教程。在此,我們插入MATLAB安裝時需要安裝的元件內容,如圖A所示:

圖A. 安裝MATLAB需要安裝的Toolbox

3.11.1 通訊系統工具箱物件

通訊系統工具箱的系統物件屬於通訊(comm)包,它們的名稱以公共字首“comm”開頭。為了訪問通訊系統工具箱的所有系統物件,鍵入“comm”,然後在MATLAB命令後鍵入Tab鍵:

>>comm.<Tab>

這將產生工具箱中可用的所有系統物件的按字母順序排列的列表。在MATLAB的最新版本中,通訊系統工具箱包含作為系統物件提供的總共123個演算法。


讓我們選擇這些系統物件中的一個,例如COM.QPSK調製器,並建立這類調製器的一個例項。我們把這個例項稱為“調製器”。

>>Modulator = comm.QPSKModulator

將建立一個QPSK(Quadratue Phase Shift Keying)調製器,該物件的描述將出現在MATLAB工作區中,如圖3.1所示。

圖3.1.通過通訊工具建立一個系統物件

每個系統物件都包含屬性和方法。其預設屬性在建立時出現;此自文件是系統物件的有用特性。通過檢視給定系統物件的屬性列表,我們知道它可以採用哪些引數,以及通常為它們分配哪些值。例如,QPSK調製器的相位偏移特性預設設定為 ?/4 。讓我們把這個引數變成 ?/2。修改屬性有兩種方法:

  • 建立具有預設值的物件,然後使用點標記更改屬性。例如:
    >> Modulator = comm.QPSKModulator;
    >> Modulator.PhaseOffset = pi/2;

  • 設定不同的屬性,因為它們是使用屬性-值對建立的。例如:

>> Modulator = comm.QPSKModulator('PhaseOffset',pi/2);

如果屬性被表示為一串字元,那麼當我們想要設定一個特定的屬性時,會出現一個方便的可能值的列表。例如,當我們鍵入“Modulator.SymbolMapping=”後跟一個Tab時,對映選項列表似乎有助於將屬性設定為幾個選項中的任何一個,在本例中為“Binary”和“Gray”。

step 方法是系統物件執行的主要方法。在建立和配置物件之後,可以傳遞一個輸入(或多個輸入),並且可以呼叫它的step方法來生成它的輸出(或多個輸出)。有兩個語法可用來執行系統物件的STEP方法。我們可以:

  • 使用“.”操作符來呼叫系統物件: y = Modulator.step(u);

  • 使用step方法作為函式,系統物件作為函式的變數:y = step(Modulator, u).

在圖3.2中,使用MATLAB randi函式建立10×1列位向量(變數u),然後作為輸入傳遞給Modulator System物件。通過呼叫它的step方法,基於指定的屬性使用QPSK演算法建立表示調製位元的調製符號的5×1輸出向量(y)。

圖3.2.呼叫step方法執行系統物件

現在我們已經瞭解瞭如何訪問、建立、設定系統物件的屬性、配置和呼叫系統物件來執行計算,接下來讓我們建立一個簡單的指令碼,該指令碼使用幾個系統物件來表達一個簡單的通訊系統。

3.11.2 系統物件測試

下面是一個MATLAB指令碼,或者稱為testbench,它使用系統物件對簡單的收發器系統進行BER分析。該收發器由QPSK調製器、加性高斯白噪聲(AWGN)通道和QPSK解調器組成。注意,此程式碼使用了來自通訊系統工具箱的四個系統物件: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');

該指令碼由四個部分組成。在初始化部分中,建立系統物件並設定一些引數。第二部分包含處理測試臺,該測試臺迭代Eb/N0值並計算相應的BER度量。第三部分是收發機處理迴圈,其中呼叫系統物件的步驟方法來調製輸入訊號,向調製訊號中新增通道噪聲,並解調以產生接收訊號和計算誤位元速率。最後,在第四部分中,對模擬進行了清理和終止,並對BER效能結果進行了視覺化。輸出結果如圖3.3所示。

圖3.3AWGN通道下QPSK調製的BER曲線模擬與理論結果對比

通過執行這個指令碼,我們獲得了使用AWGN通道的QPSK調製系統的BER曲線。由AWGN通道處理的QPSK調製的理論BER結果為公式(3-1):

系統物件的使用產生了模組化的、易於理解的MATLAB程式碼,並形成了可以擴充套件為更復雜系統的結構。我們將初始化,處理迴圈,終止,視覺化這四個步驟貫穿本書。改進MATLAB程式並使其更易讀的一種方法是將測試臺和視覺化操作與演算法和系統描述分開。接下來,我們將展示如何通過將收發器捕獲為MATLAB函式並將演算法元件與測試臺指令碼分離來實現這一點。

3.11.3 系統物件函式

MATLAB函式 chap3_ex02_qpsk() 執行我們的簡單QPSK收發器系統的演算法部分。這個函式有三個輸入變數:

  • 第一個輸入是信噪比Eb/No;

  • 第二輸入是停止標準之一,基於在停止模擬之前可以觀察到的最大錯誤數;

  • 第三個輸入是另一個停止準則,基於在停止模擬之前可以處理的最大位數。

對於每個Eb/N0值,程式碼在while迴圈中執行,直到觀察到指定的最大錯誤數量或處理最大位數為止。該程式碼通過呼叫step方法來執行每個系統物件。它計算兩個輸出:

  • BER,定義為所觀察到的錯誤數與處理的位數的比值;

  • 基於由第二和第三輸入變數定義的停止準則處理的位元數。

 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}

為了避免每次呼叫函式時建立和釋放系統物件所涉及的開銷,函式中的系統物件由持久變數 persistent 表示。使用持久變數允許我們執行諸如只在第一次呼叫函式時建立系統物件之類的操作。這增加了函式呼叫的效率,並提高了我們在迴圈中呼叫函式的模擬速度。

3.11.4 BER模擬

通訊系統工具箱為BER工具提供了一個用於BER模擬效能的綜合測試臺。BERTool 是一個圖形應用程式,它計算一系列模擬的誤位元速率,並將結果與已知的分析結果進行比較。

圖3.4. BERTool:BER結果視覺化的測試平臺應用

 圖3.15 BER模擬結果輸出

例如,為了視覺化函式chap3_ex02_qpsk.m的模擬BER,如圖3.4所示,轉到Mote Carlo選項卡,將檔案指定為模擬MATLAB檔案,並指定Eb/N0值和停止條件。BERTool將計算提供的Eb/N0值範圍內的BER,並將自動顯示結果。這些模擬結果可以通過進入理論標籤並指定所使用的調製和編碼方案與理論結果進行比較。圖3.5顯示了BERTool模擬結果的輸出。

未完待續

2018/11/13