• 大小: 5KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: Matlab
  • 标签: OFDM  QAM  

资源简介

本文完成OFDM通信系统在16QAM下的仿真工作,给出了前两百点发送和接收到的消息对比,并计算误比特率

资源截图

代码片段和文件信息

clear;
clc;
subcarr=64; %子载波个数
sym_c=10;   %每个子载波含有的OFDM符号数
bit_sym=4;  %每个符号含有的比特数,16QAM调制
IFFT_n=64;  %IFFT点数
r=1/10;     %保护间隔和OFDM数据的比例;
SNR=20;     %信噪比 dB
%产生信号
sum=subcarr*sym_c*bit_sym;%总比特数量64*10*4=2560bits
signal=rand(1sum)<0.5;   %初始信号
%16QAM调制QAM_sig里面存放的是调制后的信号,数目为sumQ
sumQ=sum/4;
imagine=sqrt(-1);                          %产生虚数单位 j
QAM=[-3-3*imagine-1-3*imagine3-3*imagine1-3*imagine-3-1*imagine-1-1*imagine3-1*imagine1-1*imagine-3+3*imagine-1+3*imagine3+3*imagine1+3*imagine-3+1*imagine-1+1*imagine3+1*imagine1+1*imagine];   %创建QAM 映射表
SIGNAL=zeros(1sumQ);      %计算并存放调制前的十进制数据
QAM_sig=zeros(1sumQ);    %存放调制后的QAM信号
y_receive_bit=zeros(1sum);%存放解调后的比特符号
for n=1:sumQ
 SIGNAL(n)=signal(4*n-3)*8+signal(4*n-2)*4+signal(4*n-1)*2+signal(4*n); %将二进制换算成十进制,存放调制前的十进制数据
end
for i=1:sumQ
    if SIGNAL(i)==0
        QAM_sig(i)=QAM(1);
    elseif SIGNAL(i)==1
        QAM_sig(i)=QAM(2);
    elseif SIGNAL(i)==2
        QAM_sig(i)=QAM(3);
    elseif SIGNAL(i)==3
        QAM_sig(i)=QAM(4);
    elseif SIGNAL(i)==4
        QAM_sig(i)=QAM(5);
    elseif SIGNAL(i)==5
        QAM_sig(i)=QAM(6);
    elseif SIGNAL(i)==6
        QAM_sig(i)=QAM(7);           
    elseif SIGNAL(i)==7
        QAM_sig(i)=QAM(8);   
    elseif SIGNAL(i)==8
        QAM_sig(i)=QAM(9);   
    elseif SIGNAL(i)==9
        QAM_sig(i)=QAM(10);   
    elseif SIGNAL(i)==10
        QAM_sig(i)=QAM(11);   
    elseif SIGNAL(i)==11
        QAM_sig(i)=QAM(12);
    elseif SIGNAL(i)==12
        QAM_sig(i)=QAM(13);   
    elseif SIGNAL(i)==13
        QAM_sig(i)=QAM(14);   
    elseif SIGNAL(i)==14
        QAM_sig(i)=QAM(15);
    elseif SIGNAL(i)==15
        QAM_sig(i)=QAM(16);   
    end
end                     
%串/并转换      
%计算第i个载波上面的信号to_par(i,:)
colume=sumQ/subcarr;%符号数除以子载波数,得出每个子载波运送的符号数
for i=1:subcarr  % carr载波个数
    for j=1:colume  
        to_par(ij)=QAM_sig(i+subcarr*(j-1));%填充矩阵的元素
                                             %子载波数作为矩阵行数,单个子载波运送的符号数作为矩阵列数
                                             %subcarr-by-colume,64行x10列的矩阵
    end
end
%colume=sumQ/subcarr;
% % to_par=reshape(QAM_sigsubcarrcolume);
%每个子载波上进行 IFFT变换  (调制后的QAM信号进行IFFT)
for j=1:colume
      y(:j)=ifft(to_par(:j));  %64点IFFT
end
% % y=ifft(to_par);
yr=real(y);   %实部
yi=imag(y);   %虚部
%yi=(y-yr)*sqrt(-1)*(-1);
%加入保护间隔
CP_len=r*colume;  %保护间隔长度
yr=[yr(:colume-CP_len+1:colume)yr];%实部:将

评论

共有 条评论