原文 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%% Constants2FRM = 2048;3MaxNumErrs = 200;4MaxNumBits = 1e7;5EbNo_vector = 0:10;6BER_vector = zeros(size(EbNo_vector));78%% Initializations9
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%% Initializations34persistent Modulator AWGN DeModulator BitError56if 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计算原理及仿真输出相关推荐

  1. matlab 信号噪声星座图,QPSK误码率和星座图MATLAB仿真

    一.数字调制就是把数字基带信号的频谱搬移到高频处,形成适合在信道中传输的带通信号.基本的数字调制方式有振幅键控(ASK).频移键控(FSK).绝对相移键控(PSK).相对(差分)相移键控(DPSK). ...

  2. qpsk相点 matlab,QPSK误码率和星座图MATLAB仿真

    一.数字调制便是把数字基带信号的频谱搬移到高频处,构成适宜在信道中传输的带通讯号.根柢的数字调制办法有振幅键控(ASK).频移键控(FSK).必定相移键控(PSK).相对(差分)相移键控(DPSK). ...

  3. 电源环路增益测试的原理与仿真(基于buck变换器和PID控制)

    背景 文章目录 背景 环路增益测量的原理 环路增益定义 测量方法 开环测量 电压注入法 注入位置选择 电流注入法 环路增益测量的仿真分析 仿真模型介绍 主电路 采样和控制 测量方式 单次瞬态仿真 处理 ...

  4. 基于STM32的MDK软件仿真输出PWM波形

    文章目录 一.PWM相关 1.PWM是什么 2.PWM原理 3.PWM应用 4.PWM信号输出 二.实验相关 1.实验要求 2.实验过程 (1)实验代码 (2)Keil仿真设置 (3)实验结果 三.总 ...

  5. 通信原理MATLAB仿真实验50例

    通信原理MATLAB仿真实验50例 一.文章出处 1.1.本文转自 matchfilter的博客 原文链接:http://blog.sina.com.cn/s/articlelist_15036850 ...

  6. 分子模拟计算机仿真,化工模拟:从分子计算到过程仿真

    化工模拟:从分子计算到过程仿真 出版时间:2017 内容简介 本书主要介绍分子模拟和过程仿真的基本原理,并通过典型实例讲解Gaussian和Aspen Plus软件在化工研究与设计中的应用.全书共分6 ...

  7. 基于新型忆阻器的存内计算原理、研究和挑战

    作者 | 林钰登.高滨.王小虎.钱鹤.吴华强 来源 | <微纳电子与智能制造>期刊 引言 过去半个世纪以来 ,芯片计算性能的提高主要依赖于场效应晶体管尺寸的缩小.随着特征尺寸的减小 ,器件 ...

  8. 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...

    第二章计算机系统与计算原理 大学计算机基础 * 信息表示与处理 ----西文字符 ASCII 码是美国信息交换标准代码(American Standard Code for Information I ...

  9. 不同阶QAM调制星座图中,符号能量的归一化计算原理

    文章目录 前言 一.归一化能量计算原理 二.Matlab中如何得到归一化能量符号 总结 前言 在基于QAM调制的matlab仿真程序中,我们通常会产生二进制比特流,并最终映射成QAM符号,该符号大都是 ...

最新文章

  1. 如何获取公众号中html,[技巧] 如何获取公众号图文里的视频地址
  2. ios架构篇-1 项目组织架构
  3. Android控件布局属性全解(一看就会)
  4. hdu 1006 Tick and Tick
  5. 行,Python玩大了!​取代Excel,程序员:太牛!你怎么看?
  6. 被动声呐 相移波束形成_100天计划-DAY9-拖曳声呐
  7. windows7系统屏幕一直闪屏的解决教程
  8. vue怎么编辑已有视频_手机制作短视频、VLOG用啥App?~~
  9. 查阅 arXiv 论文新神器,一行代码比较版本差别,Github 新开源!
  10. python计算夏令时的具体日期,python time.time()和“夏令时”;
  11. mysql自主增长键_mysql中关于自增长主键的获取
  12. 如何在Mongoose中更新/更新文档?
  13. Ant :Property
  14. 数学教授曲安京2016年毕业致辞:永远珍重那些美好的内蕴品质
  15. Java通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError:包名.类.方法(参数)”问题
  16. apkg格式怎么打开_jpg怎么转换成pdf?再不学就晚了
  17. 基于wine葡萄酒数据集的分类方法研究
  18. jvav是什么梗?jvav是什么?jvav史上最牛语言
  19. Android | 教你如何开发一键银行卡绑定功能
  20. 案例复盘:从上海首例遗弃犬只案看 如何精准研判舆情争议点

热门文章

  1. HTTP LIVE Streams
  2. 智能制造:有大数据不一定能成,但没有一定不能成
  3. Python 一网打尽<排序算法>之堆排序算法中的树
  4. it618积分商城 v5.6
  5. 【极客时间】《MySQL45讲》学习笔记
  6. 数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(一)
  7. 文本数据“关键词渲染”的高频词可视化——词云图。
  8. 虹膜识别之虹膜位置检测与定位(基于opencv传统算子)
  9. 7-38 等边三角形面积
  10. 联想E530c 出现开机声音卡顿的问题