⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm3.m

📁 自己编写的简单易懂的OFDM通信系统仿真程序
💻 M
字号:
%ofdm.m
%仿真实现OFDM传输系统
function[ber]=ofdm(ebn0)
%---------定义参数--------
para=128;     %并行传输的信道数(点数)
fftlen=128;    %FFT长度
noc=128;      %子载波数
nd=6;         %每次循环含有的OFDM 符号数
ml=2;         %调制电平:QPSK(二电平)
TOFDM=160e-6; %一个OFDM符号的时间长度
TCP=32e-6;    %CP时间长度
gilen=32;     %保护间隔(点数)
noe=0;        %误码率
nod=0;        %传输的数据数量

 
%--------------发送部分--------
    %--------------产生数据--------
    seldata=rand(1,para*ml)>0.5;%(均匀分布的随机矩阵函数;para*nd*ml每次产生的数据个数)
   %seldata得到的实际上是右边那个逻辑表达式的结果,rand产生的值如果大于0.5,则seldata为1,如果小于0.5,则seldata为0
   %---------------------串并变换-------------
   paradata=reshape(seldata,para,ml);
   %变换方式:前128bit变为第一列,随后的128bit为第二列,依此类推
   %----------------------QPSK调制-------------
   x=qpskmod(paradata,para,ml);  % 实现QPSK调制,并规一化  
   %调制后信号的实部,虚部图
   xr=real(x);
   xi=imag(x);
   figure(1);
   subplot(2,1,1);plot([1:length(xr)],xr.');
   title('实部图形');
   subplot(2,1,2);plot([1:length(xi)],xi.');
   title('虚部图形');
   
   %-------------IFFT--------------
   y=ifft(x,fftlen) ;
   %------信号频谱图——————
   figure(2);
   plot([1:256],abs(fft(x,256)));
   axis([0 256 0 30]);
   title('信号频谱图');   
   
   %-----------并串转换--------
   paradata1=reshape(y,1,para);
   ich2=real(paradata1);
   qch2=imag(paradata1);
  
   %------------插入保护间隔----------
   [ich3,qch3]=giins(ich2,qch2,para,gilen);
   para1=para+gilen;
   paradata2=ich3+qch3.*i;
   
   %--------------加入加性高斯白噪声--------------
   snr=input('snr=');
   paradata3=awgn(paradata2,snr,'measured');
   %--------------接收部分-------------
   %-----------------移除保护间隔---------------
    ich4=real(paradata3);
   qch4=imag(paradata3);
   [ich5temp,qch5temp]=girem(ich4,qch4,para1,gilen);
   %------------串并转换—————————
   ich5=reshape(ich5temp,para,1);
   qch5=reshape(qch5temp,para,1);
   %----------------FFT----------------
   rx=ich5+qch5.*i;
   ry=fft(rx,para);
   ich6=real(ry);
   qch6=imag(ry);
   %------星座图————————
   figure(3);
   ich6temp=ich6*sqrt(2);
   qch6temp=qch6*sqrt(2);
   plot(ich6temp,qch6temp,'o');
   title('BPSK星座图');
  
   %---------------QPSK解调----------
   [demodata]=qpskdemod(ich6,qch6,para);
   %------------------并串转换-------------
   demodata1=reshape(demodata,1,para*ml);
   %-------------------误比特率(BER)-------------
   %即使的误码和数据
   noe2=sum(abs(demodata1-seldata));
   %将接受解调后的信号与原始信号相比较,累计不一样的
   nod2=length(seldata);   %发送信号总长度
   %累计误码数和总的数据
   noe=noe+noe2;
   %因为是进行了nloop次的循环,所以把每次循环的数据和误码数积累起来
   nod=nod+nod2;
%-------------------输出结果------------------
ber=noe/nod    %总的误码率


   
   
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -