由以上发送部分框图不难看出发送部分具体过程如下:首先,由随机码产生器产生二进制随即序列,接着通过信号映射器映射成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] 下一页
本文关键字:暂无联系方式通信技术,电子学习 - 基础知识 - 通信技术
上一篇:软件无线电技术综述