西安邮电大学通信与信息工程学院专业课程设计B报告专业班级:学生姓名:学号(班内序号):2014年04月11日——————————————————————————装订线—————————————————————————————————报告份数:1设计总成绩:-1-题目:基于IEEE802.11a链路仿真一、设计目的:1、熟练掌握通信原理的基本知识;2、熟练运用数字信号处理课程的基本知识;3、熟练掌握无线编码与调制过程;4、了解OFDM技术原理;5、熟练运用matlab工具;二、设计原理:802.11a物理层标准及OFDM技术1.PPDU帧结构图1为PPDU的帧格式,包括OFDMPLCP前导码、OFDMPLCP头、PSDU、尾比特和填充比特。PLCP报头包括:信号段的速率位(RATE)、长度位(LENGTH)、保留比特、奇偶检验比特以及服务(SERVICE)字段。从调制角度看,长度、速率、预留比特和奇偶比特(加上6个‘0’尾比特)组成了一个独立的OFDM符号,记为信号(SIGNAL)字段,该字段以可靠的BPSK调制及1/2编码率发送。PLCP报头的SERVICE字段与PSDU(加上6个‘0’尾比特和填充比特)一起,标记为DATA字段,以RATE字段中指示的数据速率进行发送,并且可能组成多个OFDM符号。在接收SIGNAL字段内的尾比特后可立即解码出RATE和LENGTH字段,这两者对于解码出该分组中的DATA是必须的。此外,即使接收方不支持接收的分组中的数据速率,通过从分组中的DATA和LENGTH的内容中推测出分组的持续时间。图1PPDU帧结构-2-2.OFDM的符号结构如图所示,OFDM的前导训练序列包括10个短训练序列、2个长训练序列。前导训练序列用来做系统的同步、信道估计、频偏估计、自适应控制(AGC)等。前导训练序列后面是Signal段,再后面是Data区。图2OFDM的符号结构其中t1-t10表示短训练符号,T1和T2表示长训练符号,总的训练时间为16us。图中的虚线表示边界代表傅里叶逆变换的周期性引起的循环。3.OFDM技术简介OFDM(OrthogonalFrequencyDivisionMultiplexing,正交频分复用)是一种特殊的多载波调制技术,它利用载波间的正交性进一步提高频谱利用率,而且可以抗窄带干扰和抗多径衰落。OFDM通过多个正交的子载波将串行数据并行传输,可以增大码元的宽度,减少单个码元占用的频带,抵抗多径引起的频率选择性衰落,可以有效克服码间串扰,降低系统对均衡技术的要求,非常适合移动场合中的高速传输。图3OFDM系统原理图输入数据信道编码交织串/并变换信号映射插入导频载波解调输出数据信道解码解交织串/并变换载波调制信道估计串/并变换串/并变换定时和频率同步插保护间隔信道逆映射FFT去保护间隔IFFT信道-3-三、设计内容:802.11a链路设计总流程:1、802.11a前导生成原理产生PLCP前导码字段,本字段由10个重复的‘段训练序列’(用于自动增益集中控制、分集选择、定时捕获和接收机粗略频率捕获)和两个重复的‘长训练序列’(用于信道估计和接收机精确频率捕获)组成,前面为保护间隔(GI)。OFDM短训练序列由调制过的12个子载波组成。调制因子s=sqrt(13/6)*[0,0,1+j,0,0,0,-1-j,0,0,0,i+j,0,0,0,-1-j,0,0,0,-1-j,0,0,0,1+j,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,01+j,0,0,0,1+j,0,0,0];将52个子载波中的12个子载波的能量归一化,并进行IFFT傅里叶逆变换,最后进行0.8微秒的矩形时间加窗。OFDM长训练序列由调制过的53个子载波组成。调制因子L=[1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,1,1,1,1];同样进行IFFT傅里叶逆变换,最后进行0.8微秒、幅度为1的矩形时间加窗。2、扰码及解扰码帧同步加扰器使用以下的生成多项式:S(X)=X7+X4+1。为了进行正确有效的解扰,加扰发送数据和解扰接收数据使用同一个扰码器。发送时,加扰器初始状态设置为伪随机非0态。在加扰前,SERVICE字段的7个低有效比特置0,这样在接收端解扰时就可以以7个0被扰后的结果作为收端扰码器的初始状态,从而进行有效正确的解扰。信源扰码交织卷积编码星座映射串并变换OFDM调制增加CP前导D/A信道A/D同步删除CP计算误比特数解扰解交织卷积译码星座逆映射并串变换OFDM解调-4-将移位寄存器4和7中的数据进行异或,再进行左移数据后送给移位寄存器,一般我们默认产生的比特序列大于127,所以对大于127的比特序列和127进行取整且循环取整的次数,这时得到比特序列再和输入的序列进行异或。3、卷积编码和解卷积卷积编码器使用工业标准的生成多项式,g0=133(8),g1=171(8),R=1/2,即都用8进制表示。标记为“A”的比特在从编码器输出时位于比特“B”之前。随机产生一组1行n列的二进制数,利用卷积编码器进行卷积编码。4、交织及解交织交织器中进行两次置换:第一次置换将相邻的编码比特映射到不相邻的子载波上,第二次置换确保相邻编码比特被交替映射到星座的高有效位和低有效位比特,因而避免了可靠性比特的长期存在。实现逆过程的交织器也由两步置换完成。当交织的程度越深,突发性错误越强,信道译码器的性能将由此得到提升。5、星座映射及逆映射BPSK利用数字信号来控制载波的相位,具有较好的抗噪性能和较高的频谱利用率。BPSK解调时,必须有与此同频同相的同步载波。调制方式输入比特I路输出Q路输出BPSK输入比特b00-10110四、设计流程:-5-前导生成流程扰码生成流程开始结束去掉子载波序列7连0中的1个将52个子载波中的12个子载波能量归一化得到调制因子S将调制因子S进行傅里叶逆变换得到短训练序列short将short重复10次再加窗得到short——strpreamble=【short_str,long_str】取long中64个点的33—64个,再将64个点重复2次,之后加窗得到long——str将调制因子L进行傅里叶变换得到长训练序列long去掉子载波序列中唯一1个0得到调制因子L-6-卷积编码生成流程NN开始初始化加扰器,设置为全1状态将移位寄存器4和7中的数据进行异或,结果送给移位寄存器1左移数据,即=,=,…输出移位寄存器1中的数据将移位寄存器1的数据重复到和输入的随机序列长度再和输入的随机序列异或结束开始g0=[1011011]g1=[1111001]将扰码输出的结果和g0卷积后在对2取余得到X1;将扰码输出的结果和g1卷积后在对2取余得到X2;将X1,X2按照X11,X21,X12,X22…的方式读出存放在行矩阵X中Rate=3/4Rate=2/3-7-YY交织生成流程星座映射生成流程将卷积结果中的数据后面补0,重拍成一个48行的矩阵用k表示其行数,k=1:48将k代入公式进行两次置换将矩阵中的数据按照置换后对应的位置重新排列后按行输出开始结束用k表示交织后序列行数,k=1:48将k代入公式进行两次置换将矩阵中的数据按照置换后对应的位置重新排列后按行输出开始结束将X中的数据后补0后重排成一个6列的矩阵并去掉第4,5列将X中的数据后补0后重排成一个4列的矩阵并去掉第4列将X按行输出结束-8-五、设计总结:Matlab学习心得:首先是对matlab有了一个全新的认识,其次是对matlab的更多操作和命令的使用有了更高的掌握。彻底掌握了相关的命令操作和处理方法以及命令窗口和.m文件的不同效果的运用。对同一模块的相关功能和技术指标分析和性能分析非常重要,真正的分析和了解原理是非常重要的。Matlab真的是个非常强大和有用的工具,真正把它学懂学透的话还是需要下非常大的功夫和努力的。前导设计心得:前导码的设计都具有低峰值到平均功率比,这样就能最小化剪辑信号或信号分辨率的问题。在程序设计的时候,对长短序列的加窗理解的不够到位,使得实验一开始就落下了进度。扰码:其实扰码的作用主要就是对随机产生的错误进行纠正,刚开始编写程序的时候我们考虑了小于127的比特序列,其实在实际中我们用到的都是大于127的比特序列。卷积码:卷积码的纠错能力随着N的增大而增大,在编码器复杂程度相同的情况下卷积码的性能优于分组码,卷积编码当前的输出不仅与当前的输入有关,而且与它之前的(V-1)个输入有关。在程序的设计过程中,我较好的利开始输入交织后的数据mod__ini=1mod__inmod_out(i)=-1mod_out(i)=0i=length(mod__in)输出BPSK调试后的数据mod_out结束YN-9-用了matlab中的卷积函数,算是在几个程序设计中效率较高。交织:交织是对突发性的错误进行纠正,交织的程序重点就是对两次比特位位置的置换的正确理解和应用。BPSK调制:通过本次练习,我进一步了解了BPSK调制的过程,理解了无码间串扰的意义。是把模拟信号转换成数据值的方法之一,表现信息键控相移方式的一种。我坦诚的说自己掌握的还是十分有限,但是老师给我们讲解的相关原理方法是十分有效果的,对自己以后的要求需要更高,现在真正掌握的知识皮毛,想取得更大的成绩就得不断地去努力学习。参考文献:附件:(主要程序)总程序function[signal,data,code,data_in]=communication()%SIGNAL序列signal=randint(1,24,2),%随机产生24个二进制数code=convolutional(signal);%卷积编码RE=interweave(code);%交织mod_out=BPSK_t(RE);%BPSK调制mod_ofdm_syms=Add_Pilot(mod_out);%插入导频time_syms=IFFT64(mod_ofdm_syms);%傅里叶变换time_signal=Add_CP(time_syms);%增加CP%DATA序列data=randint(1,24,2),data_out=scramble(data);%加扰data_out=data_out*1;code=convolutional(data_out);RE=interweave(code);mod_out=BPSK_t(RE);mod_ofdm_syms=Add_Pilot(mod_out);time_syms=IFFT64(mod_ofdm_syms);time_data=Add_CP(time_syms);preamble=qd();%生成前导ppdu=[preambletime_signaltime_data];%PPDU帧[freq_tr_syms,freq_data_syms,freq_pilot_syms]=FFT64(ppdu);e=freq_data_syms;signal=e(1:48);data=e(49:96);-10-%SIGNALmod_in=BPSK_jt(signal);record_in=deinterleaver(mod_in);code=deconvolution(record_in),%DATAmod_in=BPSK_jt(data);%BPSK解调record_in=deinterleaver(mod_in);%解交织code=deconvolution(record_in);%解卷积data_in=descramble(code),%解扰前导functionpreamble=qd()b=[1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,1,1,-1,