Matlab中卷积码译码器的误码率分析
- 格式:doc
- 大小:1003.50 KB
- 文档页数:18
基于MATLAB的卷积码的分析与应用毕业设计(论文)任务书基于MATLAB的卷积码的分析与应用摘要随着现代通信的发展,特别是在未来4G通信网络中,高速信息传输和高可靠性传输成为信息传输的两个主要方面,而可靠性尤其重要。
因为信道状况的恶劣,信号不可避免会受到干扰而出错。
为实现可靠性通信,主要有两种途径:一种是增加发送信号的功率,提高接收端的信号噪声比;另一种是采用编码的方法对信道差错进行控制。
前者常常受条件限制,不是所有情况都能采用。
因此差错控制编码得到了广泛应用。
介绍了多种信道编码方式,着重介绍了卷积码的编码方法和解码方式。
介绍了MATLAB的使用方法、编程方法、语句、变量、函数、矩阵等。
介绍了TD-SCDMA通信系统和该系统下的卷积码,搭建了系统通信模型。
编写卷积码的编码和解码程序。
用MATLAB仿真软件对TD-SCDMA系统的卷积码编解码进行仿真。
对其纠正错码性能进行验证,并且对误码率进行仿真和分析。
卷积码的编码解码方式有很多,重点仿真Viterbi算法。
Viterbi算法就是利用卷积码编码器的格图来计算路径度量,选择从起始时刻到终止时刻的惟一幸存路径作为最大似然路径。
沿着最大似然路径回溯到开始时刻,所走过的路径对应的编码输出就是最大似然译码输出序列。
它是一种最大似然译码方法,当编码约束长度不大、或者误码率要求不是很高的情况下,Viterbi译码器设备比较简单,计算速度快,因而Viterbi译码器被广泛应用于各种领域。
关键词:卷积码;信道编码;TD-SCDMA;MATLAB目录毕业设计(论文)任务书 (I)摘要 (II)Abstract......................................................................................... 错误!未定义书签。
第1章绪论 . (1)1.1课题研究的背景和来源 (1)1.2主要内容 (2)第2章相关理论介绍 (3)2.1信道编码 (3)2.1.1 信道编码的分类 (3)2.1.2 编码效率 (3)2.2线性分组码 (3)2.3循环码 (5)2.4卷积码 (6)2.4.1 卷积码简介 (7)2.4.2 卷积码的编码 (7)2.4.3 卷积码的解码 (13)第3章MATLAB应用 (21)3.1数和算术的表示方法 (21)3.2向量与矩阵运算 (21)3.2.1 通过语句和函数产生 (21)3.2.2 矩阵操作 (22)3.3矩阵的基本运算 (22)3.3.1 矩阵乘法 (22)3.3.2 矩阵除法 (23)3.4MATLAB编程 (23)3.4.1 关系运算 (23)3.4.2 控制流 (25)第4章卷积码的设计与仿真 (27)4.1TD-SCDMA系统 (27)4.1.1 系统简介 (27)4.1.2 仿真通信系统模型 (27)4.2卷积编码设计 (28)4.3编解码程序实现 (29)4.3.1 卷积码编解码设计 (29)4.3.2 卷积码编解码程序设计 (32)4.4卷积码实现 (34)4.4.1 (2,1)卷积码的仿真研究 (34)4.4.2 (3,1)卷积码的仿真研究 (36)4.5卷积码误码率 (38)第5章结论 (41)5.1总结 (41)5.2展望 (41)参考文献 (43)致谢 (45)第1章绪论1.1课题研究的背景和来源纠错编码己有五十几年历史,早在1948年,香农(Shannon)在他的开创性论文“通信的数学理论”中,首次阐明了在有扰信道中实现可靠通信的方法,提出了著名的有扰信道编码定理,奠定了纠错码的基石。
基于MATLAB对卷积码的性能分析【摘要】本文对比了在加性高斯白噪声(AWGN)信道下经BPSK调制后的数据不编码与添加卷积编码后接收到的信道输出的误码性能,并通过对比对卷积码性能进行分析。
采用MATLAB自编函数对[2,1,8]卷积码以及维特比译码进行仿真,且对其性能进行分析。
由于卷积码有性能floor,编码增益随信噪比降低而体现不明显。
仿真结果表明:当信噪比等于-1dB时,一个序列通过加性高斯白噪声信道后接收到的信道输出误比特率大于10-1,且该序列运用[2,1,8]卷积码编码,维特比译码(硬判决)后所得的序列误比特率升高。
当信噪比为2dB时,一个序列通过加性高斯白噪声信道后接收到的信道输出误比特率约为4*10-2,且该序列运用[2,1,8]卷积码编码,维特比译码后所得的序列误比特率小于10-3,误码率远低于不编码时的误码率。
因此卷积码适用于信道输出误码率比较低时候。
【关键词】维特比译码;卷积码;误比特率;马尔科夫性1.引言卷积码的编码器是由一个有k位输入、n位输出,且具有m位移位寄存器构成的有限状态的有记忆系统,通常称它为时序网络。
[1]编码器的整体约束长度为v,是所有k个移位寄存器的长度之和。
具有这样的编码器的卷积码称作[n,k,v]卷积码。
对于一个(n,1,v)编码器,约束长度v等于存储级数m。
卷积码是由k个信息比特编码成n(n>k)比特的码组,编码出的n比特码组值不仅与当前码字中的k个信息比特值有关,而且与其前面v个码组中的v*k个信息比特值有关。
卷积码有三种译码方式:序列译码、门限译码和概率译码。
其中,概率译码根据最大似然译码原理在所有可能路径中求取与接收路径最相似的一条路径,具有最佳的纠错性能,[2]维特比译码是概率译码中极重要的一种方式。
序列译码和门限译码则不一定能找出与接收路径最相似的一条路径。
不同于维特比译码,门限译码与序列译码所需的计算量是可变的且对于给定信息分组的最终判决仅仅基于(m+1)个接收分组,而不是基于整个接收序列。
误码率matlab
误码率(Bit Error Rate,简称BER)是衡量数字通信系统性
能的重要指标之一。
在MATLAB中,我们可以使用各种方法来计算和
分析误码率。
一种常见的方法是使用通信系统工具箱(Communications System Toolbox)中提供的函数来进行误码率分析。
首先,我们需要生成一个适当的信号来模拟数字通信系统。
可
以使用随机数生成函数来创建数字信号,然后将其调制为模拟信号。
接下来,我们可以加入信道模型,例如高斯噪声信道,以模拟实际
通信环境中的噪声影响。
然后,我们可以使用接收端的解调器对接
收到的信号进行解调,并与发送端的原始信号进行比较,以计算误
码率。
在MATLAB中,可以使用通信系统工具箱中的函数如awgn(添
加高斯噪声)、modulate(调制)、demodulate(解调)等来实现
上述步骤。
一旦接收到解调后的信号,我们可以使用比特比特比函
数(biterr)来计算误码率。
除了这种基本方法外,MATLAB还提供了许多其他用于误码率分
析的工具和函数。
例如,可以使用误码率曲线(BER curve)来可视
化不同信噪比下的误码率表现,以便更直观地了解系统性能。
此外,还可以利用MATLAB的并行计算功能来加速大规模误码率仿真的计算
过程。
总之,MATLAB提供了丰富的工具和函数来进行误码率分析,可
以根据具体的通信系统模型和需求选择合适的方法进行计算和分析。
希望这些信息能够帮助你更好地理解在MATLAB中进行误码率分析的
方法。
使用MATLAB进行卷积运算的常见错误及解决方法引言:卷积运算是数字信号处理中常用的一种操作,广泛应用于图像处理、音频处理、通信等领域。
而MATLAB作为一款强大的数学软件,也提供了方便快捷的卷积函数供我们使用。
然而,在实际操作中,由于对卷积运算的理解不够深入或者对MATLAB函数的使用不够熟悉,很容易犯一些常见的错误。
本文将针对使用MATLAB进行卷积运算的常见错误进行介绍,并给出相应的解决方法。
一、错误一:输入信号维度不匹配在进行卷积运算时,输入信号的维度必须相匹配。
一般情况下,MATLAB中的卷积函数conv()要求输入的两个信号长度相等或者至少有一个信号的长度大于另一个信号的长度,即两个信号的维度要满足M>=N(M和N分别为两个信号的长度)。
如果输入信号的维度不匹配,就会产生错误或得到错误的结果。
解决方法:确保要用于卷积运算的两个信号的维度匹配。
可以通过使用MATLAB函数reshape()或者resize()来重新调整信号的维度,使其满足卷积运算的要求。
二、错误二:边界效应处理不当在卷积运算中,边界效应是一个常见的问题。
默认情况下,MATLAB中的卷积函数conv()会采用边界补零(zero padding)的方式处理输入信号的边界,这可能会导致卷积结果出现不符合预期的边界效应。
解决方法:可以通过使用MATLAB函数padarray()来指定合适的填充方式,并对输入信号进行合适的边界处理。
常用的填充方式有:1. 边界复制(replicate):将信号边界的元素复制到填充位置。
2. 对称填充(symmetric):将信号的边界元素按对称方式填充到填充位置。
3. 循环填充(circular):将信号进行循环补充。
三、错误三:卷积核颠倒在进行卷积运算时,常常需要将卷积核(也称为滤波器)进行颠倒操作。
这是因为卷积运算中,卷积核是沿着输入信号进行滑动的,颠倒操作可以保证卷积核与输入信号的顺序一致,得到正确的卷积结果。
卷积码解码的误码率matlab卷积码是一种常用的编码技术,用于在通信系统中提高数据传输的可靠性。
解码卷积码是一个重要的任务,其中一个评估指标是误码率(Bit Error Rate,简称BER),它表示解码后的数据与原始数据之间的差异。
在MATLAB中,可以使用通信工具箱(Communications Toolbox)来进行卷积码的解码和误码率的计算。
下面是一个基本的步骤:1. 定义卷积码参数,包括码率(rate)、生成多项式(polynomials)等。
2. 创建卷积编码器和解码器,使用comm.ConvolutionalEncoder和comm.ViterbiDecoder函数创建卷积编码器和解码器对象。
3. 生成随机数据,使用randi函数生成需要编码的随机数据。
4. 编码数据,使用卷积编码器对象对数据进行编码。
5. 添加信道噪声,可以使用AWGN信道(Additive White Gaussian Noise)模拟信道噪声。
使用comm.AWGNChannel函数添加噪声。
6. 解码数据,使用卷积解码器对象对接收到的数据进行解码。
7. 计算误码率,比较解码后的数据与原始数据之间的差异,计算误码率。
下面是一个简单的MATLAB代码示例:matlab.% 定义卷积码参数。
rate = 1/2; % 码率为1/2。
constraintLength = 7; % 约束长度为7。
polynomials = [171 133]; % 生成多项式。
% 创建卷积编码器和解码器。
encoder = comm.ConvolutionalEncoder('TerminationMethod', 'Truncated');encoder.PuncturePatternSource = 'Property';encoder.PuncturePattern = [1;1;1;0;1;0;1];decoder = comm.ViterbiDecoder('TerminationMethod','Truncated');decoder.PuncturePatternSource = 'Property';decoder.PuncturePattern = [1;1;0;1;0;1;1];% 生成随机数据。
卷积码编译码的Matlab仿真及其性能研究作者:吴亚婷来源:《电脑知识与技术》2010年第04期摘要:提出了一种(2,1,7)卷积编码及其维特比(Viterbi)译码的软件实现方案,在Matlab环境中应用软件技术实现了(2,1,7)卷积码的Viterbi译码器功能。
测试证明,该Viterbi译码算法在低信噪比下的误码率仍能达到10-6。
关键词:卷积编码;维特比译码;Matlab中图分类号:TP314文献标识码:A文章编号:1009-3044(2010)04-0878-02The Simulation and Capability Study of Convolutional Code Encoding and DecodingWU Ya-ting(School of Computer Science and Information, Guizhou University, Guiyang 550025, China)Abstract: A software scheme of (2,1,7) convolutional coding and Viterbi decoding technology is presented,which implements Viterbi decoder function of (2,1,7) convolutional code in theMatlab.According to the test,the BER(Bit Error Rate)of Viterbi algorithm can still reach 10-6 in the low SNR( Signal-to-Noise Ratio).Key words: convolutional coding; viterbi decoding; matlab卷积码是由Elias于1955年提出的。
卷积码在编码过程中,将一个码组中r个监督码与信息元的相关性从本码组扩展到以前若干段时刻的码组,在译码时不仅从此时刻收到的码组中提取译码信息,而且还可从与监督码相关的各码组中提取有用的译码信息。
本科生毕业论文(设计)题目:MATLAB 实现卷积码编译码专业代码:作者姓名:学号:单位:指导教师:年代日聊城大学本科毕业论文(设计)目录序言-----------------------------------------------------11 .纠错码基本理论----------------------------------------2纠错码基本理论-----------------------------------------------2纠错码观点-------------------------------------------------2基来源理和性能参数-----------------------------------------2几种常用的纠错码---------------------------------------------62 .卷积码的基本理论--------------------------------------8卷积码介绍---------------------------------------------------8卷积码的差错控制原理-----------------------------------8卷积码编码原理----------------------------------------------10卷积码分析表示法--------------------------------------10卷积码图形表示法--------------------------------------11卷积码译码原理----------------------------------------------15卷积码三种译码方式------------------------------------15V ITERBI译码原理----------------------------------------163.卷积码编译码及MATLAB仿真----------------------------18M概括--------------------------------------------------18ATLABM ATLAB的特色------------------------------------------19M工具箱和内容------------------------------------19ATLAB卷积码编码及仿真--------------------------------------------20编码程序----------------------------------------------20信道传输过程仿真--------------------------------------------21维特比译码程序及仿真----------------------------------------22维特比译码算法分析------------------------------------23V ITERBI译码程序---------------------------------------25VITERBI 译码仿真-----------------------------------28 MATLAB信噪比对卷积码译码性能的影响--------------------------282聊城大学本科毕业论文(设计)码率对卷积码译码性能的影响----------------------------30拘束长度对卷积码误码性能的影响------------------------31回溯长度对卷积码误码性能的影响------------------------32裁决方式对卷积码误码性能的影响------------------------324.结论及展望------------------------------------------34结论--------------------------------------------------------34展望--------------------------------------------------------355.结束语-----------------------------------------------36参照文件------------------------------------------------37道谢----------------------------------------------------38附录----------------------------------------------------393聊城大学本科毕业论文(设计)纲要在数字通讯系统中,往常采纳差错控制编码来提升系统的靠谱性。
一、引言误码率信噪比曲线(BER-SNR curve)是衡量数字通信系统性能的重要指标,也是评估调制解调器设计的关键参数之一。
Matlab作为一款强大的数学软件,提供了丰富的工具和函数来进行误码率信噪比曲线的仿真和分析。
本文将使用Matlab来分析、绘制误码率信噪比曲线,并简要介绍实现的方法和步骤。
二、误码率信噪比曲线的定义在数字通信系统中,误码率是衡量信号传输质量的重要指标,它指的是接收端在正确码字和错误码字之间作出错误选择的概率。
信噪比则是指信号传输中信号和噪声功率的比值,通常以分贝(dB)为单位表示。
误码率信噪比曲线即为在不同信噪比条件下,误码率的变化曲线,通常以对数坐标下的曲线形式呈现。
三、Matlab实现误码率信噪比曲线1.准备信号在Matlab中生成或加载待传输的数字信号,可以使用随机数生成函数或者读取实际信号文件。
2.添加噪声接下来,在生成的信号中添加高斯噪声,模拟信道传输过程中的干扰。
可以使用Matlab提供的awgn函数来实现对信号的添加噪声操作。
3.解调和检测对添加了噪声的信号进行解调和检测,得到接收端的比特流数据。
4.计算误码率将接收到的数据与发送端的比特流数据进行对比,计算误码率,即接收端错误选择码字的概率。
5.绘制误码率信噪比曲线在不同信噪比的条件下,重复以上步骤,得到一系列误码率数据点,并利用Matlab的绘图函数绘制误码率信噪比曲线。
四、Matlab代码示例以下是一个简单的Matlab代码示例,用于实现误码率信噪比曲线的仿真和绘制:```生成随机数字信号data = randi([0,1],1,1000);发送端modSignal = qammod(data, 16);添加高斯噪声snr = 0:2:20;for i = 1:length(snr)rxSignal = awgn(modSignal, snr(i), 'measured');接收端demodData = qamdemod(rxSignal, 16);计算误码率errorRate(i) = biterr(data, demodData)/length(data);end绘制误码率信噪比曲线semilogy(snr, errorRate);xlabel('信噪比(dB)');ylabel('误码率');title('误码率信噪比曲线');```五、结论通过Matlab的强大工具和函数库,我们可以方便地仿真和分析数字通信系统的误码率信噪比曲线。
matlab 卷积码码率
卷积码(Convolutional Code)是一种用于错误纠正的编码技术,广泛应用于通信系统中。
在MATLAB中,可以使用`convenc`函数来生成卷积码。
卷积码的码率(Code Rate)是指输入数据比特数与输出数据比特数之间的比率。
一般来说,码率越高,纠错能力越强,但传输效率越低。
在MATLAB中,可以通过设置`convenc`函数的参数来指定卷积码的码率。
例如,以下代码生成一个码率为1/2的卷积码:```matlab
% 生成一个码率为1/2的卷积码
c = convenc(data, 2);
```
其中,`data`是输入数据,`2`表示码率为1/2。
需要注意的是,卷积码的码率并不是一个固定的值,而是一个范围。
这是因为卷积码在编码过程中会引入冗余比特,这些冗余比特的数量取决于具体的编码参数。
因此,在实际应用中,需要根据具体需求选择合适的编码参数来获得最佳的纠错性能和传输效率。
数据传输系统误码率测试器的MATLAB实现及性能分析学生姓名:xx 指导老师:ss摘要本课程设计主要运用MATLAB集成环境下的Simulink仿真平台设计进行数据传输系统误码率测试器的仿真。
在本次课程设计中先根据9级m序列发生器的结构,从Simulink工具箱中找所需元件,对输入的随机数据信号与其模2和计算以加密,合理设置好参数,送入含噪信道,在接收端与相同序列进行模2和以解密,改变信道误码率大小,测试发送信号与接收信号的误码率大小,其中可以通过不断的修改优化得到需要信号,最后通过对输出波形的分析得出仿真是否成功。
关键词Simulink;数据系统;m序列;误码率1引言本次课程设计主要运用MATLAB软件,在Simulink平台下建立仿真模型。
实现数据传输系统的的误码率计算的过程,通过比较发送信号与接收信号之间产生的误码率大小,分析比较,改变参数设置,观察波形变化及误码率大小的变化,并对其进行分析总结。
1.1课程设计的目的通信原理是通信工程专业的一门骨干的专业课,是通信工程专业后续专业课的基础。
掌握通信原理课程的知识可使学生打下一个坚实的专业基础,可提高处理通信系统问题能力和素质。
由于通信工程专业理论深、实践性强,做好课程设计,对学生掌握本专业的知识、提高其基本能力是非常重要的。
通信课程设计的目的是为了学生加深对所学的通信原理知识理解,培养学生专业素质,提高利用通信原理知识处理通信系统问题的能力,为今后的专业课程的学习、毕业设计和工作打下良好的基础。
使学生能比较扎实地掌握本专业的基础知识和基本理论,掌握数字通信系统及有关设备的分析、开发等基本技能,受到必要工程训练和初步的科学研究方法和实践训练,增强分析和解决问题的能力,了解本通信专业的新发展。
1.2课程设计的基本任务和要求本次课程设计的基本任务:(1)使学生通过专业课程设计掌握通信中常用的信号处理方法,能够分析简单通信系统的性能。
(2)使学生掌握通信电路的设计方法,能够进行设计简单的通信电路系统。
%%16QAM%%等效基带调制clc;clear all;close all;%%关闭所有窗口,比如之前画的图nsymbol = 10000;%%每种信噪比下符号数的发送符号数,10^6个数errornumber = zeros(1,10);errorratio = zeros(1,10);data = randi([0,1],1,4*nsymbol);%%产生1行,4*nsymbol列均匀分布的随机数data_mod1 = zeros(1,nsymbol);%%各参量初始化data_mod2 = zeros(1,nsymbol);data_demod1 = zeros(1,nsymbol);data_demod2 = zeros(1,nsymbol);data_demod3 = zeros(1,nsymbol);data_demod4 = zeros(1,nsymbol);s_receive1 = zeros(1,nsymbol);s_receive2 = zeros(1,nsymbol);for i = 1:nsymbol %%格雷码调制到星座图的映射if data(4*i-3)==0 && data(4*i-2)==0data_mod1(i) = 3;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==0 && data(4*i-2)==1data_mod1(i) = 1;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==1 && data(4*i-2)==1data_mod1(i) = -1;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==1 && data(4*i-2)==0data_mod1(i) = -3;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endendendSNR_dB = 1:10;%%%信噪比dB形式SNR = 10.^(SNR_dB/10);%%信噪比转化为线性值for loop= 1:10sigma = sqrt(5/SNR(loop));s_receive1 = data_mod1 + sigma * randn(1,length(data_mod1));s_receive2 = data_mod2 + sigma * randn(1,length(data_mod2));%%??for k = 1:nsymbolif s_receive1(k)>2data_demod1(k) = 0;data_demod2(k) = 0;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;endelseif s_receive1(k)>0 && s_receive1(k)<2 data_demod1(k) = 0;data_demod2(k) = 1;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 &&s_receive2(k)<0 data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endelseif s_receive1(k)<0 && s_receive1(k)>-2 data_demod1(k) = 1;data_demod2(k) = 1;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0 data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endelseif s_receive1(k)<-2data_demod1(k) = 1;data_demod2(k) = 0;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endendif (data_demod1(k) ~= data(k*4-3)) || (data_demod2(k) ~= data(k*4-2))||(data_demod3(k) ~= data(k*4-1)) || (data_demod4(k) ~= data(k*4))errornumber(loop) = errornumber(loop) + 1;endenderrorratio(loop) = errornumber(loop)/nsymbol;endt = 0.75*erfc(sqrt(3*SNR/30));ser_theory = 1-(1-t).^2;%理论误码率,注意Q函数和误差函数的对应关系semilogy(SNR_dB,errorratio,'-k*',SNR_dB,ser_theory,'-ro');title('16QAM信号在AWGN信道下的性能(格雷码)');xlabel('信噪比/dB');ylabel('误码率');legend('误码率','理论误码率');grid on;%%坐标线。