• 大小: 89KB
    文件类型: .zip
    金币: 2
    下载: 2 次
    发布日期: 2021-06-06
  • 语言: Matlab
  • 标签: matlab  ofdm  多径  

资源简介

多径信道下 简单OFDM matlab仿真 移动通信课程作业,瑞利3径信道

资源截图

代码片段和文件信息

clear all;
close all;
clc;
%---------------- 参数设置部分----------------%
Nsp=52;             %系统子载波数(不包括直流载波)
Nfft=64;            % FFT 长度
Ncp=16;             % 循环前缀长度
Ns=Nfft+Ncp;        % 1个完整OFDM符号长度
noc=53;             % 包含直流载波的总的子载波数
Nd=6;               % 每帧包含的OFDM符号数(不包括训练符号)
M1=4;               % QPSK调制
sr=250000;          % OFDM符号速率
SNR=20;          % 信噪比
ts=1/sr/Ns;                    % OFDM符号抽样时间间隔
t=0:ts:(Ns*(Nd+1)-1)*ts;       % 抽样时刻
fd=100;                        % 最大多普勒频移

%----------------三径信道的参数----------------%
h=rayleigh(fdt);                   % 生成单径Rayleigh衰落信道
h1=sqrt(1/2)*h;                     % 第一径的功率是总功率的1/2
h2=sqrt(1/3)*h;                     % 第二径的功率是总功率的1/3
h3=sqrt(1/6)*h;                     % 第三径的功率是总功率的1/6
h2=[zeros(14) h2(1:end-4)];        % 第二径延时4个点
h3=[zeros(18) h2(1:end-8)];        % 第三径延时8个点


%-----------------产生训练序列-----------------%
%-训练符号频域数据采用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);                            % 1X64全零矩阵
Preamble1(2:27)=Preamble(27:end);                   % 交织
Preamble1(39:end)=Preamble(1:26);
preamble1=ifft(Preamble1);                          % 训练符号时域数据
preamble1=[preamble1(Nfft-Ncp+1:end) preamble1];    % 加入16个点的循环前缀

 %-------------------发射机部分-------------------%
 msg1=randsrc(NspNd[0:M1-1]);         % QPSK信息数据(52X6的矩阵)
 
 data1=qammod(msg1M1)/sqrt(2);         % QPSK调制并归一化
 
 data2=zeros(NfftNd);                  % 根据FFT要求,对数据重排(64X6的矩阵)
 
 data2(2:27:)=data1(27:end:);
 data2(39:end:)=data1(1:26:);
 
 data2=ifft(data2);                          % IFFT变换
 
 data2=[data2(Nfft-Ncp+1:end:);data2];      % 加入循环前缀
 
 spow1=norm(data2‘fro‘).^2/(Nsp*Nd);        % 计算符号能量
 
 %下面进行的是加入导频的工作,加入导频后,每一帧含有7个符号,每个符号中由于
 %加入了循环前缀,因此含有80个点
 data3=zeros(Ns(Nd+1));                % 加入训练符号(80X7的矩阵)

data3(:1)=preamble1.‘; % 在每一帧的开头加入导频序列
data3(:2:(Nd+1))=data2(:1:Nd);
% 在导频序列之后加入6个符号构成一帧
 
 data3=reshape(data31Ns*(Nd+1));      % 并串变换(1X560的矩阵)
 
 data31=zeros(1length(data3));
 data32=zeros(1length(data3));
 data31(5:end)=data3(1:end-4);               % 第二径接收到的符号
 data32(9:end)=data3(1:end-8);               % 第三径接收到的符号
 
 sigma1=sqrt(1/2*spow1/log2(M1)*10.^(-SNR/10)); % 根据SNR计算噪声标准差
 
 dd1=data3(1:Ns*(Nd+1)); %取出第一径每一帧的数据
 dd2=data31(1:Ns*(Nd+1));%取出第二径每一帧的数据
 dd3=data32(1:Ns*(Nd+1));%取出第三径每一帧的数据
 
 hh1=h1(1:Ns*(Nd+1));    % 当前帧的3径信道参数
 hh2=h2(1:Ns*(Nd+1));
 hh3=h3(1:Ns*(Nd+1));
 
 % 信号通过3径衰落信道,并加入高斯白噪声
 r1=hh1.*dd1+hh2.*dd2+hh3.*dd3+sigma1*(randn(1length(dd1))+j*randn(1length(dd1)));
 
 %-------------------接收机部分-------------------%
 r1=reshape(r1NsNd+1);             % 串并变换(80X7的矩阵)
 
 r1=r1(Ncp+1:end:);                 % 移除循环前缀
 
 R1=fft(r1);                         % fft运算
 
 R1=[R1(39:end:);R1(2:27:)];       % 数据重排(解交织)
 
 HH1=(Preamble.‘)./R1(:1);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-06-15 15:34  代码\
     文件      705654  2018-06-15 15:34  代码\1.bmp
     文件      705654  2018-06-15 15:34  代码\2.bmp
     文件      705654  2018-06-15 15:34  代码\3.bmp
     文件        4461  2018-06-15 15:33  代码\OFDM.m
     文件        1009  2017-05-11 10:07  代码\rayleigh.m
     文件          91  2018-06-15 15:36  代码\说明.txt

评论

共有 条评论