您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Matlab实现OFDM调制
Matlab实现OFDM调制一、实验目的1、进一步加深对matlab的了解和使用,熟练掌握matlab的相关库函数。2、学习OFDM调制的原理,通过实验加深对其理解。3、学会用matlab实现BPSK调制和QPSK调制。二、实验原理OFDM调制原理:OFDM——OFDM(OrthogonalFrequencyDivisionMultiplexing)即正交频分复用技术,实际上OFDM是MCMMulti-CarrierModulation,多载波调制的一种。其主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰ICI。每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上的可以看成平坦性衰落,从而可以消除符号间干扰。而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。在向B3G/4G演进的过程中,OFDM是关键的技术之一,可以结合分集,时空编码,干扰和信道间干扰抑制以及智能天线技术,最大限度的提高了系统性能。包括以下类型:V-OFDM,W-OFDM,F-OFDM,MIMO-OFDM,多带-OFDM。三、实验内容实验要求:(1)不加噪声时,调制出来的信号与原信号进行对比。(2)加噪声时的误码率曲线图。1、调制原理框图解调的原理框图sourceModOFDM调制CP调制信号用randint产生512乘以100的信号源BPSK(QPSK)的数字调制512点的IFFT调制添加长度为10的循环前缀加噪声调制信号OFDM解调去CPBPSK(QPSK)解调解调信号bit2、BPSK调制:f(0)=1,f(1)=-1代码:original=randint(1,512*100,2);%源为0和1的随机序列,为1行51200列;用512个子载波,做100次bpsk=(-1).^original;%BPSK调制,将源中的0替换为-1,生成1行51200列的1和-1序列m=1;ioriginal=zeros(1,512*100);%生成零矩阵,定义变量初值ofdm=zeros(100,512);iofdm=zeros(100,512);iiofdm=zeros(1,512*100);cp=zeros(100,512+10);cpsend=zeros(1,(512+10)*100);icp=zeros(100,512);ibpsk=zeros(1,512*100);whilem~=101ofdm(m,:)=bpsk(((m-1)*512+1):(m*512));%将bpsk矩阵转化为100行512列的矩阵ofdmofdm(m,:)=ifft(ofdm(m,:),512);%OFDM调制,返回512点的逆向DFTcp(m,1:10)=ofdm(m,503:512);%添加长度为10的循环前缀,cp(m,11:end)=ofdm(m,:);%生成矩阵cp为100*(512+10)cpsend(((m-1)*(512+10)+1):(m*(512+10)))=cp(m,:);%cpspend为1*((512+10)*100)m=m+1;endcp1=cpsend;%没有添加噪声是调制生成的矩阵snr=-2:1:5;%信噪比ber=zeros(1,length(snr));light=1;fort=-2:1:5m=1;%解调whilem~=101icp(m,:)=cpsend(((m-1)*512+m*10+1):(m*(512+10)));%去前缀10iofdm(m,:)=fft(icp(m,:),512);%将icp做返回512点的DFTiiofdm(((m-1)*512+1):(m*512))=iofdm(m,:);%iiofdm为1*(512*100)m=m+1;endforn=1:(512*100)real_iiofdm=real(iiofdm(n));image_iiofdm=imag(iiofdm(n));distance1=sqrt((real_iiofdm+1)^2+image_iiofdm^2);%根据距离来判断是0还是1distance0=sqrt((real_iiofdm-1)^2+image_iiofdm^2);ifdistance1=distance0ibpsk(n)=0;elseibpsk(n)=1;endendioriginal=ibpsk;%计算误码率flag=(original==ioriginal);%相等时flag为1,不相等时flag为0error=numel(find(flag==0));%统计0的个数ber(light)=error/51200;%计算误码率light=light+1;endsemilogy(snr,ber)BPSK调制的误码率曲线图:3、QPSK调制:f(00)=(1+i)/sqrt(2),f(01)=(-1+i)/sqrt(2),f(10)=(-1-i)/sqrt(2),f(11)=(1-i)/sqrt(2)。代码:source=randint(1,512*100,2);sqpsk=source;qpsk=zeros(1,512*50);m=1;n=1;whilem~=(512*100+1)ifsqpsk(1,m:(m+1))==[0,0]qpsk(1,n)=1/sqrt(2)*(1+i);elseifsqpsk(1,m:(m+1))==[0,1]qpsk(1,n)=1/sqrt(2)*(-1+i);elseifsqpsk(1,m:(m+1))==[1,0]qpsk(1,n)=1/sqrt(2)*(-1-i);elseqpsk(1,n)=1/sqrt(2)*(1-i);endm=m+2;n=n+1;endm=1;ssource=zeros(1,512*100);ofdm=zeros(50,512);oofdm=zeros(50,512);ooofdm=zeros(1,512*50);cp=zeros(50,512+10);cpsend=zeros(1,(512+10)*50);ccp=zeros(50,512);qqpsk=zeros(1,512*100);form=1:50ofdm(m,:)=qpsk(((m-1)*512+1):(m*512));ofdm(m,:)=ifft(ofdm(m,:),512);cp(m,1:10)=ofdm(m,503:512);cp(m,11:end)=ofdm(m,:);cpsend(((m-1)*(512+10)+1):(m*(512+10)))=cp(m,:);endcp1=cpsend;snr=-2:1:5;ber=zeros(1,length(snr));as=1;fort=-2:1:5cpsend=awgn(cp1,t,'measured');m=1;form=1:50ccp(m,:)=cpsend(((m-1)*512+m*10+1):(m*(512+10)));oofdm(m,:)=fft(ccp(m,:),512);ooofdm(((m-1)*512+1):(m*512))=oofdm(m,:);ends=1;form=1:(512*50)real_ooofdm=real(ooofdm(m));image_ooofdm=imag(ooofdm(m));distance0=sqrt((real_ooofdm-1)^2+(image_ooofdm-1)^2);distance1=sqrt((real_ooofdm+1)^2+(image_ooofdm-1)^2);distance2=sqrt((real_ooofdm+1)^2+(image_ooofdm+1)^2);distance3=sqrt((real_ooofdm-1)^2+(image_ooofdm+1)^2);bb(1,1:4)=[distance0,distance1,distance2,distance3];aa(1,1)=min(bb);ifaa(1,1)==distance0qqpsk(1,s:(s+1))=[0,0];elseifaa(1,1)==distance1qqpsk(1,s:(s+1))=[0,1];elseifaa(1,1)==distance2qqpsk(1,s:(s+1))=[1,0];elseaa(1,1)==distance3qqpsk(1,s:(s+1))=[1,1];ends=s+2;endssource=qqpsk;flag=(source==ssource);error=numel(find(flag==0));ber(as)=error/51200;as=as+1;endsemilogy(snr,ber);QPSK调制的误码率曲线图:
本文标题:Matlab实现OFDM调制
链接地址:https://www.777doc.com/doc-5387163 .html