• 大小: 251KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: Matlab
  • 标签: OFDM  

资源简介

使用matlab仿真简化的基于OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术的802.11a系统及参数说明。

资源截图

代码片段和文件信息

%IEEE 802.11a系统的仿真
clear all 
%%%参数设置部分%%%

Nsp = 52; %系统子载波数,(不包括直流载波)
Nfft = 64; %FFT长度
Ncp = 16; %循环前缀长度
Ns = Nfft+Ncp; %一个完整OFDM符号长度
noc = 53; %包含直流载波的总的子载波数
Nd = 6; %每帧包含的OFDM符号数(不包括训练符号)
M1 = 4; %QPSK调制
M2 = 16; %16-QAM调制
sr = 250000; %OFDM符号速率
EbN0 = 0:2:30; %归一化信噪比
Nfrm = 10000; %每种信噪比下的仿真帧数
ts = 1/sr/Ns; %OFDM符号抽样时间间隔
t = 0:ts:(Ns*(Nd+1)*Nfrm-1)*ts; %抽样时刻
fd = 100; %最大多普勒频移
h = rayleigh(fdt); %生成单径Rayleigh衰落信道

%训练符号频域数据,采用802.11a中的长训练符号数据
Preamble=[1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 ... 
    1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 1 1 1 1]; 
Preamble1=zeros(1Nfft); 
Preamble1(2:27)=Preamble(27:end); %训练符号重排后的数据??? 
Preamble1(39:end)=Preamble(1:26); 
preamble1=ifft(Preamble1); %训练符合时域数据??? 
preamble1=[preamble1(Nfft-Ncp+1:end) preamble1]; %加入循环前缀
 
%%%仿真循环%%%
for ii=1:length(EbN0) 
     
    %%%发射机部分%%%
    msg1=randsrc(NspNd*Nfrm[0:M1-1]); %QPSK信息数据?? 
    msg2=randsrc(NspNd*Nfrm[0:M2-1]); %16-QAM信息数据?? 
    data1=pskmod(msg1M1pi/4); %QPSK调制?? 
    data2=qammod(msg2M2)/sqrt(10); %16-QAM调制并归一化
 
    data3=zeros(NfftNd*Nfrm); %根据FFT要求,对数据重排?????????? 
    data4=zeros(NfftNd*Nfrm); 
 
    data3(2:27:)=data1(27:end:); %重排后的数据
    data3(39:end:)=data1(1:26:); 
 
    data4(2:27:)=data2(27:end:); %重排后的数据
    data4(39:end:)=data2(1:26:); 
         
    clear data1 data2; %清除不需要的临时变量? 
 
    data3=ifft(data3); %IFFT变换
    data4=ifft(data4); 
 
    data3=[data3(Nfft-Ncp+1:end:);data3]; %加入循环前缀
    data4=[data4(Nfft-Ncp+1:end:);data4]; 
 
    spow1=norm(data3‘fro‘).^2/(Nsp*Nd*Nfrm); %计算数据符号能量??????????? 
    spow2=norm(data4‘fro‘).^2/(Nsp*Nd*Nfrm); 
         
    data5=zeros(Ns(Nd+1)*Nfrm); %加入训练符号??? 
    data6=data5; 
    for indx=1:Nfrm 
        data5(:(indx-1)*(Nd+1)+1)=preamble1.‘; 
        data5(:(indx-1)*(Nd+1)+2:indx*(Nd+1))=data3(:(indx-1)*Nd+1:indx*Nd); 
             
        data6(:(indx-1)*(Nd+1)+1)=preamble1.‘; 
        data6(:(indx-1)*(Nd+1)+2:indx*(Nd+1))=data4(:(indx-1)*Nd+1:indx*Nd); 
    end 
         
    clear data3 data4 
         
    data5=reshape(data51Ns*(Nd+1)*Nfrm); %并串变换  
    data6=reshape(data61Ns*(Nd+1)*Nfrm); 
       
    sigma1=sqrt(1/2*spow1/log2(M1)*10.^(-EbN0(ii)/10)); %根据EbN0计算噪声标准差????
    sigma2=sqrt(1/2*spow2/log2(M2)*10.^(-EbN0(ii)/10)); 
         
         
    for indx=1:Nfrm 
        dd1=data5((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1)); %当前帧的发射数据????? 
        dd2=data6((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1)); 
           
        hh=h((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1)); %当前帧对应的信道参数??  
         
        %信号通过单径Rayleigh衰落信道,并加入高斯白噪声???????????????? 
        r1=hh.*dd1+sigma1*(randn(1length(dd1))+j*randn(1length(dd1)));    
        r2=hh.*dd2+sigma2*(randn(1length(dd2))+j*randn(1length(dd2))); 
             
        r1=reshape(r1NsNd+1); %串并变换
        r2=reshape(r2NsNd+1); 
 
        r1=r1(Ncp+1:end:); %移除循环前缀
        r2=r2(Ncp+1:end:);  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-04-09 13:13  Matlab仿真IEEE 802.11a系统\
     文件        5352  2020-04-09 12:50  Matlab仿真IEEE 802.11a系统\OFDM_802.11a.m
     文件         479  2020-04-09 13:06  Matlab仿真IEEE 802.11a系统\rayleigh.m
     文件       32891  2020-04-09 13:05  Matlab仿真IEEE 802.11a系统\Simulation results.png
     文件      228126  2020-04-09 13:11  Matlab仿真IEEE 802.11a系统\System parameters.png

评论

共有 条评论