您当前的位置:五五电子网电子知识电子学习基础知识通信技术频分复用(OFDM)系统的原理 正文
频分复用(OFDM)系统的原理

频分复用(OFDM)系统的原理

点击数:7878 次   录入时间:05-01 06:50:51   整理:http://www.55dianzi.com   通信技术
第三章 OFDM系统的仿真设计
要求在MATLAB平台上完成了OFDM系统仿真程序的设计。
3.1 OFDM的MATLAB仿真
3.1.1 MATLAB语言简介
从事科学研究和工程应用的人可能都注意到并为之所困扰,当我们在计算涉及矩阵运算或画图时,采用FORTRAN, C及C++语言等计算机语言进行程序设计是一项很麻烦的工作。不仅需要对所利用的有关算法有深刻的了解,还需要熟练掌握所有语言的语法和编程技巧。例如对矩阵求逆这样的一种运算,首先要选择一个较好的求逆算法然后利用FORTRAN或C语言等高级语言编程来逐步的实现此算法,经过了艰巨烦琐的调试工作终于实现算法达到目的后,我们会发现,所编制的百余条甚至几百条语句仅仅是完成了一个矩阵的求逆工作,我们不免为自己的工作效率大发感叹。并不复杂的计算任务,用计算机来实现竟是如此的烦恼,面对手头要完成的研究任务,也许会产生畏惧之感。MATLAB正是为免除无数类似上述的尴尬局面而产生的。在1980年前后,美国的Cleve Moler博士在New Mexico大学讲授线性代数课程时,发现应用其他高级语言编程极为不便,便构思并开发了MATLAB(MATrix LABoratory,矩阵实验室),它是集命令,翻译,科学计算于一身的一套交互式软件系统,经过在该大学进行了几次的试用之后,于1484年推出了该软件的正式版本。在MATLAB下,矩阵的运算变得异常的容易,后来的版本中又增添了丰富多彩的图形图象处理及多媒体功能,使得MATLAB的应用范围越来越广泛,Moler博士等一批数学家与软件专家组建了名为MathWorks的软件开发公司,专门扩展并改进MATLAB。 1990年MathWorks软件公司为MATLAB提供了新的控制系统模型图形输入与仿真工具,并定名为SIMULAB,该工具很快在控制界得到了广泛的使用。
与 C, C ++,FO RTRAN,PA SCAL和BASIC这类高级程序设计语言相比,MATLAB
不但在数学语言的表达与解释方面表现出人机交互的高度一致,而且具有作为优秀高技术计算环境所不可缺少的如下特征:
(1) 高质量,高可靠的数值计算能力。
(2) 基于向量,数组和矩阵的高级程序设计语言。
(3) 高级图形和可视化数据处理能力。
(4) 广泛解决各学科专业领域内复杂问题的能力。
(5) 拥有一个强大的非线性系统仿真工具箱一SIMULINK。
(6) 支持科学和工程计算标准的开放式,可扩充结构。
(7) 跨平台兼容。MATLAB程序直接可以映射为DSP芯片可接受的代码,大大提高了现代电子通信设备的研发速率。
目前 MATLAB已经成为国际上最为流行的软件之一,它除了传统的交互式编程之外,还提供了丰富可靠的矩阵运算、图形绘制、数据处理、图象处理、方便的Windows编程等便利工具,出现了各种以MATLAB为基础的实用工具箱,广泛地应用于自动控制、图象信号处理、生物医学工程、语音处理、雷达工程、信号分析、振动理论、时序分析与建模、化学统计学、优化设计等领域,并表现出一般高级语言难以比拟的优势。
较为常见的MATLAB工具箱主要包括:控制系统工具(controlsystemstoolbox)、系统辨识Z具箱(systEMI dentificationto olbox).鲁棒控制-T具箱(robustco ntroltoolbox),多变量频率设计工(multivariablefrequencydesigntoolbox)、分析与综合工具箱(analysISAn dsy nthesisto olbox)、神经网络1具箱(neuralne tworkto olbox)、最优化工具箱(optimizationtoolbox)、信号处理工具箱(signalpr ocessingto olbox)、模糊推理系统工具箱(fuzzyin ferencesy stemt oolbox)、小波分析工具箱〔waveletto olbox)、通信工具箱(communication toolbox)
MATLAB/Simulink属于一种通用的科学计算和系统仿真语言。在MATLAB/Simulink下,从数学模型到计算机仿真模型的转换非常容易。MATLAB/Simulink提供了三种方法【14】:
(1)M文件编程实现的方法:根据数学模型所建立的方程和数据参数,通过编程实现方程的表示和数值求解。其特点是灵活性好,数学关系显式地表达在程序语句中,但是仿真的直观性方面稍显欠缺,通常在仿真计算完毕之后才能看到结果。
(2)Simulink方法:可以根据数学模型建立对应的系统方框图,通过所见即所得的方式连接模块,然后选择求解方式和精度,运行仿真。其特点是直观性好,可以在仿真过程中实时的修改系统模块的参数。并能够实时的显示当前的仿真结果。而本人采用的是M文件编程实现的方法,具体情况见下。
3.1.2 正交频分复用(OFDM)仿真系统说明
我们在通过MATLAB语言进行OFDM系统仿真时,是将OFDM系统分为发送和接收两大部分来进行的,然后再通过信道模型将这两部分连接起来。程序的编程过程是按模块化来进行的,各子模块分别完成发送和接收中的一部分特定功能。最后再分别按发射机中的调制顺序和接收机中的解调顺序进行组合。各子模块在功能上相互独立,只是通过相应的接口进行连接,这样进行编程的好处在于各模块功能明确,在一定意义上相互独立,各个模块并不需要了解其他模块的具体实现过程,而只通过接口与其他模块发生联系,从而易于编程和修改,如对其中一个模块进行改动,并不需要对其他所有模块也进行大的改动,这非常符合国际上所达成共识的程序设计标准–结构化程序设计,即要求各个模块之间耦合性越弱越好,内聚性愈强愈好。下面将分别具体示出OFDM系统发送部分的结构图和接收部分的结构图:
1.发送部分的结构图如图3.1所示。
图 3.1 OFDM发送部分系统框图

由以上发送部分框图不难看出发送部分具体过程如下:首先,由随机码产生器产生二进制随即序列,接着通过信号映射器映射成I,Q,两路信号,这两路信号经过导频处理和傅利叶反变换(IFFT)变化来调制原始信号,OFDM系统可以采用的调制方式有BPSK,QAM,16-QAM,64-QAM多种调制方式,这里采用的是QAM调制方式,具体情况见以下程序。为了消除由于多径传播造成的ICI,一种有效的方法便是将原来宽度为T的OFDM符号进行周期扩展,用扩展信号来填充保护间隔,而且保护间隔的长度应大于无线信道的时延扩展,这样一个符号的多径分量才不会对下一个符号造成干扰。而保护间隔内的信号就称为循环前缀。所以调制后的信号要经过加入保护时隙和加入训练符号才能送入信道中去进行传送。
同理,由下面所示的接收部分系统图不难发现:在接收端,首先将接收符号开始的一定宽度的部分丢弃,然后将剩余的部分进行傅利叶变换(FFT),然后进行解调。
2.接收部分的结构图如图3.2所示。

图 3.2 OFDM接收部分系统框图

3.1.3 仿真程序说明
为了更好地说明以上OFDM系统原理的具体实现过程,以便使读者更好地了解OFDM系统的仿真实现方法。下面将整个仿真程序分为发送和接收两部分来分别进行说明。

1.发送部分程序说明
发送部分的程序设计流程图如图3.3所示。

图3.3发送部分程序设计流程图
发送部分仿真程序中需要说明的地方有:
(1) 参数初始化程序
仿真程序中需要初始化的参数如下:
采样频率:20MHz
包含数据的子载波数目:52个
包含数据的子载波的位置:[7:32 34:59]
包含用户数据的子载波数目:48个
导频子载波数目:4个
包含用户数据的子载波的位置:[7:11 13:25 27:32 34:39 41:53 55:59]
导频子载波的位置:[12 26 40 54]
生成导频时不同导频子载波需要乘的系数:[1:1:1:-1]
频域表示的短训练符号:
{0,0,1+j,0,0,0,-1-j,0,0,0,1+j,0,0,0,-1-j,0,0,0,-1-j,0,0,0,1+j,0,0,0, 0,0,0,0,-1-j,0,0,0,-1-j,0,0,0,1+j, 0,0,0,1+j,0,0,0,1+j,0,0,0,1+j,0,0}
频域表示的长训练符号:{1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,0,1,-1,-1,1,1,-1,1,-1,1,-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,1,1,1,1}
产生导频的序列:{1,1,1,1,-1,-1,-1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,1,1,-1,1,1,-1,1,1,1,1,1,1,-1,1,1,1,-1,1,1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1,-1,-1,1,1,1,1,1,-1,-1,1,1,-1,-1,1,-1,1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,1,1,1,-1,1,-1,1,-1,1,-1,-1,-1,-1,-1,1,-1,1,1,-1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,-1,-1}
以上参数是在程序设计过程中就已经预先设定好的参数,这部分参数不需要在仿真过程中进行设定或改动。还有一部分参数需要在仿真程序运行前在图形界面GUI中进行手动设定,这些参数包括:需要信号源产生倍号的长度(以8 Bytes为单位,因为6个字节刚好对应OFDM中包含用户数据的子载波的数目)、信号调制方式(BPSK, QPSK,16-QAM, 64-QAM)、产生信道模型中的信噪比SNR。手动设定这些参数的目的是为了使仿真系统更为灵活,更容易满足仿真和测试的需要。
(2) 信号源产生器程序
在发送部分仿真程序中,我们产生发送信号的方法是按照设定好的所需信号的长度,调用随机函数randn ()来产生。产生后的信号一方面发给接下去的模块,另一方面进行保存用于与接收机接收解调后的信号进行比较分析。
具体程序如下:
out = rand(1,baseband_out_length);
baseband_out1 = round(out) ;
baseband_out2 = floor(out*2) ;
baseband_out3 = ceil(out*2)-1 ;
baseband_out4 = randint(1,baseband_out_length);
% 四种生成发送的二进制序列的方法,任取一种产生要发送的二进制序列
if (baseband_out1 == baseband_out2 & baseband_out1 == baseband_out3 )
FPrintf(’Transmission Sequence Generated \n \n’);
baseband_out = baseband_out1 ;
else
fprintf(’Check Code!!!!!!!!!!!!!!!!!!!!! \n \n’);
end
% 验证四种生成发送的二进制序列的方法
convert_matrix = reshape(baseband_out,bits_per_symbol,length(baseband_out)/bits_per_symbol) ;

上一页  [1] [2] [3] [4] [5] [6]  下一页


本文关键字:暂无联系方式通信技术电子学习 - 基础知识 - 通信技术

《频分复用(OFDM)系统的原理》相关文章>>>