• 591.50 KB
  • 2022-04-22 13:31:55 发布

OFDM系统进行仿真实验毕业论文.doc

  • 30页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'OFDM系统进行仿真实验毕业论文目录1引言22OFDM系统简介32.1OFDM的发展历史32.2OFDM系统框架模型32.3OFDM系统发射接收的原理43OFDM系统的几个关键技术63.1OFDM峰平比研究63.2OFDM系统同步分析73.3信道估计73.4其他84仿真实验开发94.1OFDM系统的优缺点94.2对比系统QAM的选取104.3仿真实验的设计114.4其他问题115仿真结果125.1OFDM系统发射接收的仿真125.2QAM系统发射接收的仿真145.3其他166结论20致谢21参考文献22附录23 1引言四年的大学生活很快就到了最后一个学年了,在上半学期,我就迫不及待的开始了我的毕业设计。在我看来,毕业设计是一次新的学习机会。出于这种想法,之前一直在学习交换路由方面知识的我选择了通信方面的另一大领域:无线通信,并选择了无线通信方面较为前沿的OFDM技术。我最初的目标只是单纯的想要实现一个“OFDM系统的仿真”。但随着不断的查看资料和对OFDM系统的理解不断深入,我开始对自己毕设的目标有了一个明确的定位,那就是对OFDM系统进行仿真,并用与其他系统进行对比的方法让OFDM系统的优点形象化。 2OFDM系统简介2.1OFDM的发展历史正交频分复用(OFDM)是一种特殊的多载波传输方案,它可以被看作是一种调制技术,也可以被看作是一种复用技术。选择OFDM的一个主要原因在于该系统能够很好地对抗频率选择性衰弱或窄带干扰。OFDM最早起源于20世纪50年代中期,在60年代就已经形成了并行数据传输和频分复用的概念。1970年1月首次公开发表了有关OFDM的专利。在20世纪60年代,OFDM技术就已经应用到多种高频军事系统中,其中包括KINEPLEX、ANDEFT、KNTHRYN等。但是直到80年代中期,随着欧洲在数字音频广播(DAB)方案中采用OFDM,该方法才开始受到关注并得到广泛的应用。之后,OFDM在数字音频广播(DAB)、数字视频广播(DVB)、基于IEEE802.11标准的无线本地局域网(WLAN)以及有线电话网上基于现有铜双绞线的非对称高比特率数字用户线技术(例如ADSL)中得到了广泛的应用。其中大都利用了OFDM可以有效地消除信号多径传播所造成符号间干扰(ISI)的这一特征。此外,OFDM还易于结合空时编码、分集、干扰(包括ISI和ICI)抑制以及智能天线等技术,最大限度地提高物理层信息传输的可靠性。如果再结合自适应调制、自适应编码以及动态子载波分配、动态比特分配算法等技术,可以使其性能进一步得到优化。图2.1OFDM系统在各方面的应用2.2OFDM系统框架模型 OFDM系统的的系统框图网上有很多不同的版本,但基本上是大同小异。这里我选取其中一个简单的结构图,如下图所示。图2.2OFDM系统框架图经过编码的数据会经过串行转并行,FFT变换,插入循环前缀后再采用无线数字通信的方法发射出去,而接收端的过程与发射端类似,只是过程反过来而已2.3OFDM系统发射接受的原理在严格的OFDM系统中,串并行转换前一般还有一个星座映射的过程,即将输入的串行数据先做一次调制再经有FFT分配到各个子信道中,调制的方法有BPSK、QPSK、QAM等。OFDM中的星座映射,其实只是一个数值代换的过程。比如输入为“00”,输出就是“-1+1i”。它为原来单一的串行数据引入了虚部,使其变成了复数。这样一方面可以进行复数的FFT变换,另外,进行星座映射后,为原来的数据引入了冗余度。因为从原来的一串数,现在变成了由实部和虚部组成的两串数。引入冗余度的意义在于以牺牲效率的方式降低误码率。通过牺牲效率来换取可靠性在通信上是一种非常经典的思想。星座映射后的串并行转换是为了下一步的傅立叶变换做准备的。傅立叶变换这一步,在发射端进行的是傅立叶反变换(IFFT),在接收端进行的是傅立叶变换(FFT)。傅立叶变换的作用在于将本来没有关联的串行数据一段一段的产生互相间的关联性,这样,如果有一个数据在传输中发生了错误,就会影响到和它关联的其他数据。之后就是个人认为OFDM中比较重要的一个部分:插入循环前缀。 尽管OFDM通过串并变换已经将数据分散到了n个子载波,速率已经降低到了n分之一,但是为了最大限度地消除符号间的干扰(ISI),还需要在每个OFDM符号之间插入保护前缀,这样做可以更好地对抗多径效率产生的时间延迟的影响。正因为这个作用,OFDM才会被广泛的被采用。插入循环前缀本身非常简单,就是把每个OFDM符号的最后一部分提到符号前,使整个符号加长即可。如下图所示。图2.3插入循环前缀接收过程就是发射过程反过来就行了,我就不再重复了。 3OFDM系统的几个关键技术3.1OFDM峰平比研究假设x(t)代表一个OFDM符号的波形,则该符号的PAPR(峰平比)的定义为上式中分子表示x(t)的最大瞬时功率,分母表示x(t)的平均功率。一般来说,OFDM信号的PAPR值起伏很大,尤其当IDFT输入端数据同相时,其输出就会产生很大的峰值。OFDM符号峰平比的这种特性,导致对A/D、D/A变换器、对功率放大器(HPA)等要求很高。它要求HPA的线性动态范围很大,这就要求我们必须采用昂贵的线性放大器。但由于峰值出现也是随机的,因此这就意味着线性放大器必定不能一直工作在最佳状态(最高效状态),从而导致功率利用率不高。如果不采用线性放大器,就需要较大的回退量,这样也会导致功率利用率降低。这就对OFDM在功率较小的终端上应用造成了很大的困难。在对OFDM信号进行放大时,如果放大器线性不好,那么除了产生交调干扰外,如果回退量不够,还会产生带内非线性失真,并导致频谱扩展,产生很大的带外功率,从而导致相邻信道的干扰。因此,采用适用的减少PAPR的技术对OFDM系统很重要。有前面的分析不难发现减小峰平比可以从以下几个方面:(1)限幅。就是当PAPR值超过某个值后,对OFDM波形进行限幅。(2)改进HPA的性能,使之线性动态范围增大。(3)设法减小PAPR取较大值的概率。(4)借鉴PCM中的非均匀量化的思想,可以采用信号压缩扩展技术对OFDM符号的波形进行变换,使得变换后大的信号被压缩,小的信号相对增强,从而减小变换后信号的PAPR值,在接收端只需做相应的反变换即可。(5)采用一定的自适应预失真技术,来弥补HPA的非线性失真。(6)可以通过分组编码来减小PAPR。先阶段较为流行的扰码技术有SLM(SelectedMapping)法和PTS(PartialTransmitSequences)法。而分组编码法现在较受人欢迎的是前向纠错码,这是一种PAPR较小且具有比较不错的纠错能力的分组码。 3.2OFDM系统同步分析OFDM符号由夺得子载波叠加构成,各个子载波之间利用正交性来区分,因此确保这种正交性对于OFDM系统来说是至关重要的,因此它对载波同步的要求也就相对较严格。在OFDM系统中存在如下几个方面的同步:样值同步、相位的同步、符号定时同步和载波频率同步。其中,OFDM系统对载波频率同步最为敏感。这是因为在OFDM系统中,载波频率的不同步,除了会产生相位噪声,导致接收端信噪比下降外,还使子载波间的正交性被破坏,产生子信道间干扰,因此在对接收信号进行DFT解调前,必须要估计出频率偏差,并进行补偿。产生载波频率偏差的原因主要是由于振荡器产生的载波频率不稳定,以及多普勒频移。如果频率偏差是子载波间隔的n(n为整数)倍,虽然子载波之间仍然能够保持正交,但是频率采样值已经偏移了n个子载波的位置,造成映射在OFDM频谱内的数据符号的误码率高达0.5。现在同步的算法一般有以下几类:(1)利用导频实现载波同步的方法。这种方法一般把载波同步分为两个过程:利用循环前缀进行频率跟踪(跟踪模式),和利用插入的导频进行频率捕获(捕获模式)。关于这个方法详细可见参考文献[6]。(2)极大似然方法联合实现符号定时同步和载波同步的方法。这种算法是对符号时间和载波频率偏移的联合极大似然(ML)估计。在循环前缀中包含的冗余信息使得这种估计不需要额外的导频。在接收端,借助接收端已知的导频信号通过最大化平均对数似然函数可以得到符号时钟和频率偏移估计。在传送的OFDM信号中的冗余也提供了同步化的机会。关键是OFDM数字信号已经包含了足够用来同步的信息。联合极大似然估计的算法利用了插入在OFDM符号前的循环前缀,因此减少了对导频的需要。这个方法的详细推导可见参考文献[13]。(3)符号时间偏移估计算法。符号时间偏移估计算法是现在比较成熟的另一种算法,但它的局限性在于它只考虑了符号的时间偏移。这是新算法的另一理论基础,做简要介绍,详细推导见[14]。3.3信道估计OFDM信号 在衰弱信道中传输时,其幅度会发生衰弱,相位会发生偏移。在接收端就需要有一个参考信号(包含信道特性),才能正确的恢复出原来的发送信号。为解决这个参考信号的问题,有两种方法:一种是采用相干检测,另一种是采用差分检测。前者需要对参考信号的幅度和相位进行估计(也就是需要做信道估计),然后用估计得到的信道信息进行均衡,从而消除或减小信道对信号造成的失真。在差分检测中,不使用绝对的幅度和相位值,而是发送相邻信号幅度或者相位的差值。因此,可以不要绝对的参考信号,也就是无需做信道估计。信道估计的详细算法可见[2]。3.4其他除了上述这些关键性技术,交织编码技术、多址接入法等技术在OFDM技术体系中也有着非常重要的地位。由于时间关系,我对以上技术并没有深入的研究,在此就不展开讨论了。 4仿真实验开发4.1OFDM系统的优缺点提起仿真,我们首先想起的是MATLAB和Simulink。我的选择也是简单易用的MATLAB。由于我的课题并不是简单的对OFDM系统进行仿真,而是试图开发一个可供他人清楚的了解OFDM系统优缺点的实验系统。所以在设计仿真具体方向之前,先对OFDM系统的优缺点梳理一遍,以求确定具体的仿真内容。经过对大量资料的翻阅和对OFDM系统了解的深入,我对OFDM系统的优点总结如下:(1)把高速数据通过串并转换,使得每个子载波上的数据符号持续长度相对增加,从而可以有效地减小无线信道的时间弥散所带来的ISI,这样就减小了接收机内均衡的复杂度,有时甚至可以不采用均衡器,仅通过采用插入循环前缀的方法消除ISI的不利影响。(2)OFDM系统由于各个子载波之间存在正交性,允许子信道的频谱相互重叠,因此与常规的频分复用系统相比,OFDM系统可以最大限度的利用频谱资源。(3)各个子信道中的这种正交调制与解调可以采用IDFT和DFT方法来实现,这样对于N很大的系统中,可以通过快速傅立叶变换(FFT)来实现。(4)无线数据业务一般存在非对称性,即下行链路中传输的数据量要远远大于上行链路中的数据传输量,如网页浏览、下载等。另外,在大蜂窝环境下,移动终端的传输速率要远远小于功率较大的基站。这种现象希望物理层能支持非对称的高速数据传输。OFDM系统可以很容易地通过使用不同数量的子信道来实现这个上下行链路的不对称性。(5)由于无线信道存在频率选择性,不可能所有的子载波都同时处于比较深的衰弱情况中,因此OFDM系统可以通过动态比特分配和动态子信道分配的方法,充分利用信噪比较高的子信道,从而提高系统性能。(6)OFDM系统可以容易的与其他多种接入方法相结合使用,构成OFDMA系统,其中包括多载波码分多址MC-CDMA、跳频OFDM以及OFDM-TDMA等等,使得多个用户可以同时利用OFDM技术进行信息的传递。 (7)OFDM系统可以在某中程度上抵抗窄带干扰。因为窄带干扰只能影响一小部分的子载波。而现在OFDM系统最主要的缺点在于:(1)易受频率偏差的影响。由于子信道的频谱相互覆盖,这就对它们之间的正交性提出了严格的要求。然而由于无线信道存在时变性,在传输过程中会出现无线信号的频率偏移,例如多普勒频移,或者由于发射机载波频率与接收机本地震荡器之间存在的频率偏差,都会使得OFDM系统子载波之间的正交性遭到破坏,从而导致子信道间的信号互相干扰(ICI)。(2)存在较高的峰平比(PAPR)。在前面3.1已经提过OFDM系统PAPR值过大的现象。这对发射机的内放大器提出了很高的要求,极大的限制了OFDM系统的使用范围。以上缺点是阻碍OFDM系统在无线领域大规模使用的主要原因。4.2对比系统QAM的选取在4.1部分我分析了OFDM系统的优缺点所在。其中支持FFT变换、支持非对称性、可以与多种接入方法结合等优点在仿真中较难具体的体现。所以,我决定用OFDM系统和QAM系统进行对比,以体现OFDM系统的高频带利用率和强悍的抗干扰能力。这里简单介绍一下QAM调制技术。QAM是一种矢量调制,将输入比特先映射(一般采用格雷码)到一个复平面(星座)上,形成复数调制符号,然后将符号的I、Q分量(对应复平面的实部和虚部,也就是水平和垂直方向)采用幅度调制,分别对应调制在相互正交(时域正交)的两个载波(coswt和sinwt)上。这样与幅度调制(AM)相比,其频谱利用率将提高1倍。QAM是幅度、相位联合调制的技术,它同时利用了载波的幅度和相位来传递信息比特,因此在最小距离相同的条件下可实现更高的频带利用率,目前QAM最高已达到1024-QAM(1024个样点)。样点数目越多,其传输效率越高,这里为了简单起见,也为了让对比效果更加明显,选取的是具有16个样点的16-QAM信号,每个样点表示一种矢量状态,16-QAM有16态,每4位二进制数规定了16态中的一态,16-QAM中规定了16种载波和相位的组合,16-QAM的每个符号和周期传送4比特。 4.3仿真实验的设计不考虑那些复杂的理论,OFDM的调制过程就相当于一个函数y1=f1(x1)。其中x代表输入的数据,f代表调制的过程,y代表输出的数据。同理,QAM的调制过程也就相当y2=f2(x2)。这样,如果x1和x2相同,那么对y1和y2的比较可以明显的体现出OFDM系统比QAM系统强大的抗干扰能力。我的设计主要就在于对比相同输入条件下OFDM系统和QAM系统的不同输出,以及两个传输系统在通过多径衰弱信道前后频域上的不同表现。另外,OFDM系统与QAM系统的不同还在于QAM变得是phase和amplitude,频率不变。而OFDM系统和FSK一样变得是频率,phase和amplitude不变。4.4其他问题作为一个仿真实验,如果要投入实用就必须制作一个MATLAB的图形界面作为平台。由于能力有限,我对于图形界面的编写没有获得成功,这让我深感遗憾。或许在以后的学习生活中我将继续学习图形界面的编写,以其制作一个完美的OFDM实验平台,为我的毕业设计画下完美的句号。 5仿真结果5.1OFDM系统发射接收的仿真如上文中的设计,这里我让OFDM系统的输入数据和QAM系统的输入数据相同,如下图所示:图5.1OFDM系统的输入数据在发送端经过OFDM系统的调制后,进入多径信道的数据如下图所示:图5.2OFDM系统发送信号 在经过信道中的一系列干扰后,在接收端得到的接受数据看下图:图5.3OFDM系统接收信号然后经过接收端OFDM解调后,最终得到的输出数据如下图:图5.4OFDM系统输出数据 由以上4幅图已经可以看出OFDM系统良好的抗干扰能力。图5.2和图5.3的对比说明了OFDM信号在信道传输前后的差距并不是很大。而图5.1和图5.4的类似更是说明了系统的误码率比较小。但由于没有和其他传输系统进行对比,我们暂时并不能下定论说OFDM系统的抗干扰能力比别的系统强。接下来,我们来看QAM系统的表现。5.2QAM系统发射接收的仿真我们让QAM系统的输入信号与OFDM系统的输入信号相同:图5.5QAM系统的输入数据在发送端经过QAM系统的调制之后,进入信道前的数据如下图所示:图5.6QAM系统发送信号 在经过信道后,接收端接收到的数据如下图:图5.7QAM系统接收信号最终解调后,QAM系统的输出数据如下图:图5.8QAM系统输出数据 我们来对比图5.5的输入数据和图5.8的输出数据,可以明显的看到有很大的差异。同时,由于图5.1OFDM系统的输入数据和图5.5QAM系统的输入数据完全相同,所以图5.4和图5.8的对比很有信服力的说明了OFDM系统远比QAM系统优越的抗干扰能力。5.3其他除了纯粹的输入输出上的对比,下面是信道模型、数据经过OFDM调制或QAM调制在频域上的显示以及16-QAM调制信号的星座图等其他实验结果图:图5.9信道模型 图5.10频域表示的QAM调制的发送数据图5.11频域上表示的QAM调制的接收数据 图5.12频域上表示的OFDM调制的发送数据图5.13频域上表示的OFDM调制的接收数据 图5.1416-QAM调制信号的星座图以上图片从频域上说明了OFDM的优越性。由图5.10、图5.11、图5.12、图5.13,可见QAM系统和OFDM系统中原数据在经过多径衰弱信道后都造成了扭曲,对比图5.10和图5.11的差异量和图5.12和图5.13的差异量,可以看出QAM系统中的扭曲要比OFDM系统中的扭曲明显的多。图5.14是16-QAM调制信号的星座图,类似于其他数字调制方式,QAM发射的信号集可以用星座图方便地表示,星座图上每一个星座点对应发射信号集中的那一点。星座点经常采用水平和垂直方向等间距的正方网格配置,当然也有其他的配置方式。数字通信中数据常采用二进制数表示,这种情况下星座点的个数一般是2的幂。 六结论本毕业设计就是利用MATLAB将OFDM系统与QAM系统一起仿真,然后在相同输入条件下对两个系统在信道传输前后的表现以及最终输出上进行对比。这已经能够很明显的表现出OFDM系统的一些优点,最主要的体现在多径衰弱信道的抗干扰能力上。然而作为一个实验设计,我的这个设计的缺点还是很明显:没有图形界面,这样就无法投入实用,只能供研究学习使用,我将在今后继续学习利用MATLAB进行图形界面的编写,以期能在不久的将来弥补这个遗憾。 致谢应该说,OFDM系统的实现对于一个以前没有接触过相关知识的我来说是相当有难度的。这里非常感谢我的指导老师,周洋老师。在他的耐心解答下,我才能对OFDM技术的知识更加了解。同时,在他的指导下,我知道了很多相关资料的书籍和论坛,这也为我以后的学习生活也提供了很好的帮助。同时,非常感谢葉花╃萌在外文翻译问题上对我的帮助,以及求学论坛上的各位对我的某些疑问的解答。 参考文献[1]王立宁、乐光新、詹菲.MATLAB与通信仿真.第一版.人民邮电出版社.2000[2]谭泽富、聂祥飞、王海宝.OFDM关键技术及应用.第一版.西南交通大学出版社.2005.5[3]路而红、申苹.虚拟电子实验室.第一版.人民邮电出版社.2005.5[4]石博强、赵金.MATLAB数学计算与工程分析范例教程.第一版.中国铁道出版社.2005.5[5]张家玮、盛敏、刘勤.移动通信基础.第一版.电子工业出版社.2005.10[6]佟学俭、罗涛.OFDM移动通信技术原理与应用.第一版.人民邮电出版社.2003[7]楼顺天,李博菡.基于MATLAB的系统分析与设计-信号处理.西安电子科技大学出版社.2000[8]纪红.基于OFDM的高速无线Internet若干关键技术的研究.北京邮电大学博士论文2002[9]胡光锐.数字信号处理-理论、算法与实现.清华大学出版社.1977[10]DesignandSimulationofOrthogonalFrequencyDivisionMultiplexing(OFDM)Signaling-FinalReport.Studyby:AlanC.BrooksStephenJ.Hoelzer.2001.5[11]TPollet,MBladelandMMoeneclaey.BERsensitivityofOFDMsystemstocarrierfrequencyoffsetandWienerphasenoise.IEEETrans.Commun.1995,43(2/3/4):191-193.[12]V.KJonesandGregoryG.Raleigh,ChannelEstimationForWirelessOFDMSystems,GLOBECOM98,1998,vol.2,980-985.[13]Jan-JaapvandeBeek,MagnusSandellandPerOlaB.rjesson,“MLEstimationofTimeandFrequencyOffsetinOFDMSystems,”IEEETrans.onSignalProcessing,vol.45,pp.1800-1805,July1997.[14]LandstromD,WilsomSKanddeBeekJ-J,BorjessonPO,“SymbolTimeOffsetEstimationinCoherentOFDMSystems,”IEEETrans.Commun,pp.545-549,April2002. 附录:部分MATLAB代码%a_run_demo.msetupQAMOFDMAnalysis%QAM.m%QAM.mcomparesOFDM(multicarrier)tomulti-levelQAM(singlecarrier)%whentheytransmitthesame#ofbitsinagiventimeperiodread%readdataforQAM-doesnotaffectOFDMdata_in_pol=bin2pol(data_in);%Convertsbinarydatatopolardata%checktoseeifnum_carriersisapowerof2is_pow_2=num_carriers;temp_do_QAM=0;ifis_pow_2~=2whiletemp_do_QAM==0temp_do_QAM=rem(is_pow_2,2);is_pow_2=is_pow_2/2;ifis_pow_2==2temp_do_QAM=-99;%itisapowerof2->candoQAMendendelsetemp_do_QAM=-99;%2isapowerof2endiftemp_do_QAM~=-99do_QAM=0;%don"tdoitifit"snotpossibledisp(""),disp("ERROR:CannotrunQAMbecausenum_carriersisnotvalid.")disp("Pleasesee"setup.m"fordetails.")endifdo_QAM==1tic%StartstopwatchtocalculatehowlongQAMsimulationtakesdisp(""),disp("------------------------------------------------------------")disp("QAMsimulation"),disp("Transmitting")%Padwithzerossodatacanbedividedevenlydata_length=length(data_in_pol);r=rem(data_length,num_carriers);ifr~=0fori=1:num_carriers-rdata_in_pol(data_length+i)=0;%padinputwithzerostocompletelastdataset end%speedimprovepossibleenddata_length=length(data_in_pol);%updateafterpaddingnum_OFDM_symbols=ceil(data_length/(2*num_carriers));%numQAMsymbolsthatrepresentequalamountofdatatooneOFDMsymbolnum_QAM_symbols=num_carriers/2;%numsamplesperQAMsymbolnum_symbol_samples=fft_size/num_QAM_symbols;%convertpolardata[-1,1]to4leveldata[-3,-1,1,3]data_in_4=zeros(1,data_length/2);fori=1:2:data_lengthdata_in_4(i-(i-1)/2)=data_in_pol(i)*2+data_in_pol(i+1);end%definesamplepointsbetween0and2*pits=linspace(0,2*pi*QAM_periods,num_symbol_samples+1);%Generate16-QAMdata%totallengthof16-QAMtransmissiontx_length=num_OFDM_symbols*num_QAM_symbols*num_symbol_samples;QAM_tx_data=zeros(1,tx_length);fori=1:2:data_length/2fork=1:num_symbol_samplesQAM_tx_data(k+((i-1)/2)*num_symbol_samples)=data_in_4(i)*cos(ts(k))+data_in_4(i+1)*sin(ts(k));endend%DochannelsimulationonQAMdataxmit=QAM_tx_data;%chuses"xmit"dataandreturns"recv"chQAM_rx_data=recv;%saveQAMdataafterchannelclearrecv%remove"recv"soitwon"tinterferewithOFDMclearxmit%remove"xmit"soitwon"tinterferewithOFDMdisp("Receiving")%RecoverBinarydata(DecodeQAM)cos_temp=zeros(1,num_symbol_samples);%sin_temp=cos_temp;%xxx=zeros(1,data_length/4);%Initializetozerosforspeedyyy=xxx;%QAM_data_out_4=zeros(1,data_length/2);%fori=1:2:data_length/2%"cheating"fork=1:num_symbol_samples%multiplybycarrierstoproducehighfrequencytermandoriginaldatacos_temp(k)=QAM_rx_data(k+((i-1)/2)*num_symbol_samples)*cos(ts(k));sin_temp(k)=QAM_rx_data(k+((i-1)/2)*num_symbol_samples)*sin(ts(k));end%LPFanddecide-wewilldoverysimpleLPFbyaveraging xxx(1+(i-1)/2)=mean(cos_temp);yyy(1+(i-1)/2)=mean(sin_temp);%ReconstructdatainserialformQAM_data_out_4(i)=xxx(1+(i-1)/2);QAM_data_out_4(i+1)=yyy(1+(i-1)/2);end%Makedecisionbetween[-3,-1,1,3]fori=1:data_length/2ifQAM_data_out_4(i)>=1,QAM_data_out_4(i)=3;elseifQAM_data_out_4(i)>=0,QAM_data_out_4(i)=1;elseifQAM_data_out_4(i)>=-1,QAM_data_out_4(i)=-1;elseQAM_data_out_4(i)=-3;endend%Convert4leveldata[-3,-1,1,3]backtopolardata[-1,1]QAM_data_out_pol=zeros(1,data_length);%"cheating"fori=1:2:data_lengthswitchQAM_data_out_4(1+(i-1)/2)case-3QAM_data_out_pol(i)=-1;QAM_data_out_pol(i+1)=-1;case-1QAM_data_out_pol(i)=-1;QAM_data_out_pol(i+1)=1;case1QAM_data_out_pol(i)=1;QAM_data_out_pol(i+1)=-1;case3QAM_data_out_pol(i)=1;QAM_data_out_pol(i+1)=1;otherwisedisp("Errordetectedinswitchstatment-Thisshouldnotbehappening.");endendQAM_data_out=pol2bin(QAM_data_out_pol);%convertbacktobinary%StopstopwatchtocalculatehowlongQAMsimulationtakesQAM_simulation_time=toc;ifQAM_simulation_time>60disp(strcat("TimeforQAMsimulation=",num2str(QAM_simulation_time/60),"minutes."));elsedisp(strcat("TimeforQAMsimulation=",num2str(QAM_simulation_time),"seconds."));end end%OFDM.m%RunOFDMsimulationtic%StartstopwatchtocalculatehowlongQAMsimulationtakesdisp(""),disp("------------------------------------------------------------")disp("OFDMSimulation")txchrx%StopstopwatchtocalculatehowlongQAMsimulationtakesOFDM_simulation_time=toc;ifOFDM_simulation_time>60disp(strcat("TimeforOFDMsimulation=",num2str(OFDM_simulation_time/60),"minutes."));elsedisp(strcat("TimeforOFDMsimulation=",num2str(OFDM_simulation_time),"seconds."));end%analysis.m%Analysisdisp(""),disp("------------------------------------------------------------")disp("PreparingAnalysis")figure(1),clfif(input_type==1)&(test_input_type==1)subplot(221),stem(data_in),title("OFDMBinaryInputData");subplot(223),stem(output),title("OFDMRecoveredBinaryData")elsesubplot(221),plot(data_samples),title("OFDMSymbolInputData");subplot(223),plot(output_samples),title("OFDMRecoveredSymbols");endsubplot(222),plot(xmit),title("TransmittedOFDM");subplot(224),plot(recv),title("ReceivedOFDM");%dig_x_axis=(1:length(QAM_tx_data))/length(QAM_tx_data);%figure(4),clf,subplot(212)%freq_data=abs(fft(QAM_rx_data));%L=length(freq_data)/2;dig_x_axis=(1:length(xmit))/length(xmit);figure(2),clfifchannel_on==1num=[1,zeros(1,d1-1),a1,zeros(1,d2-d1-1),a2]; den=[1];[H,W]=freqz(num,den,512);mag=20*log10(abs(H));phase=angle(H)*180/pi;subplot(313)freq_data=abs(fft(recv));L=length(freq_data)/2;plot(dig_x_axis(1:L),freq_data(1:L))xlabel("FFTofReceivedOFDM")axis_temp=axis;subplot(311),freq_data=abs(fft(xmit));plot(dig_x_axis(1:L),freq_data(1:L)),axis(axis_temp)title("FFTofTransmittedOFDM")subplot(312)plot(W/(2*pi),mag),ylabel("ChannelMagnitudeResponse")elsesubplot(212)freq_data=abs(fft(recv));L=length(freq_data)/2;plot(dig_x_axis(1:L),freq_data(1:L))xlabel("FFTofReceivedOFDM")axis_temp=axis;subplot(211),freq_data=abs(fft(xmit));plot(dig_x_axis(1:L),freq_data(1:L)),axis(axis_temp)title("FFTofTransmittedOFDM")end%iffile_input_type==4%figure(5)%subplot(211)%image(data_in);%colormap(map);%subplot(212)%image(output);%colormap(map);%endifdo_QAM==1%analyzeifQAMwasdonefigure(3),clfif(input_type==1)&(test_input_type==1)subplot(221),stem(data_in),title("QAMBinaryInputData");subplot(223),stem(QAM_data_out),title("QAMRecoveredBinaryData")else subplot(221),plot(data_samples),title("QAMSymbolInputData");subplot(223),plot(QAM_output_samples),title("QAMRecoveredSymbols");endsubplot(222),plot(QAM_tx_data),title("TransmittedQAM");subplot(224),plot(QAM_rx_data),title("ReceivedQAM");dig_x_axis=(1:length(QAM_tx_data))/length(QAM_tx_data);figure(4),clfifchannel_on==1subplot(313)freq_data=abs(fft(QAM_rx_data));L=length(freq_data)/2;plot(dig_x_axis(1:L),freq_data(1:L))xlabel("FFTofReceivedQAM")axis_temp=axis;subplot(311),freq_data=abs(fft(QAM_tx_data));plot(dig_x_axis(1:L),freq_data(1:L)),axis(axis_temp)title("FFTofTransmittedQAM")subplot(312)plot(W/(2*pi),mag)ylabel("ChannelMagnitudeResponse")elsesubplot(212)freq_data=abs(fft(QAM_rx_data));L=length(freq_data)/2;plot(dig_x_axis(1:L),freq_data(1:L))title("FFTofReceivedQAM")axis_temp=axis;subplot(211),freq_data=abs(fft(QAM_tx_data));plot(dig_x_axis(1:L),freq_data(1:L)),axis(axis_temp)title("FFTofTransmittedQAM")end%PlotstheQAMReceivedSignalConstellationfigure(5),clf,plot(xxx,yyy,"ro"),gridon,axis([-2.52.5-2.52.5]),holdon%%Overlayplotoftransmittedconstellation%x_const=[-1.5-0.50.51.5-1.5-0.50.51.5-1.5-0.50.51.5-1.5-0.50.51.5];%y_const=[-1.5-1.5-1.5-1.5-0.5-0.5-0.5-0.50.50.50.50.51.51.51.51.5];%plot(x_const,y_const,"b*")%Overlayofconstellationboundarysx1=[-2-2];x2=[-1-1];x3=[00];x4=[11];x5=[22];x6=[-2 2];y1=[-2-2];y2=[-1-1];y3=[00];y4=[11];y5=[22];y6=[-22];plot(x1,y6),plot(x2,y6),plot(x3,y6),plot(x4,y6),plot(x5,y6)plot(x6,y1),plot(x6,y2),plot(x6,y3),plot(x6,y4),plot(x6,y5)holdofftitle("16-QAMReceivedSignalConstellationandDecisionBoundarys")binary_err_bits_QAM=0;fori=1:length(data_in)err=abs(data_in(i)-QAM_data_out(i));iferr>0binary_err_bits_QAM=binary_err_bits_QAM+1;endendBER_QAM=100*binary_err_bits_QAM/data_length;endfigure(6),clfifchannel_on==1subplot(211),plot(W/(2*pi),mag),title("ChannelMagnitudeResponse")xlabel("DigitalFrequency"),ylabel("MagnitudeindB")subplot(212),plot(W/(2*pi),phase),title("ChannelPhaseResponse")xlabel("DigitalFrequency"),ylabel("PhaseinDegrees")elsetitle("Channelisturnedoff-Nofrequencyresponsetoplot")end%Compareoutputtoinputandcounterrorsbinary_err_bits_OFDM=0;fori=1:length(data_in)err=abs(data_in(i)-output(i));iferr>0binary_err_bits_OFDM=binary_err_bits_OFDM+1;endendBER_OFDM=100*binary_err_bits_OFDM/data_length;disp(strcat("OFDM:BER=",num2str(BER_OFDM,3),"%"))disp(strcat("Numberoferrorbits=",num2str(binary_err_bits_OFDM)))if(do_QAM==1)disp(strcat("QAM:BER=",num2str(BER_QAM,3),"%"))disp(strcat("Numberoferrorbits=",num2str(binary_err_bits_QAM)))end%Displaytextfilebeforeandaftermodulationif(input_type==2)&(file_input_type==2)original_text_file=char(data_samples")ifdo_QAM==1 editQAM_text_out.txtendeditOFDM_text_out.txtend%Listentosoundsif(input_type==2)&(file_input_type==3)do_again="1";while(~(isempty(do_again)))disp("")disp("Pressanykeytoheartheoriginalsound"),%pausesound(data_samples,11025)disp("PressanykeytohearthesoundafterOFDMtransmission"),%pausesound(output_samples,11025)ifdo_QAM==1disp("PressanykeytohearthesoundafterQAMtransmission"),%pausesound(QAM_output_samples,11025)enddo_again="";do_again=input("Enter"1"tohearthesoundsagainorpress"Return"toend","s");endend'