首页 » 技术分享 » 误码率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

 

 

 

 

转载自原文链接, 如需删除请联系管理员。

原文链接:误码率BER计算原理及仿真输出,转载请注明来源!

0