clear;
clc;
%% 参数设置
Nfft = 64;
carries = 52;
% Nps = 14; % 导频间隔
Cpilot = 4; % 导频子载波个数
Cdata = carries - Cpilot; % 数据子载波个数
Ipilot = [-21 -7 7 21] + Nfft/2; % 导频子载波位置
Idata = [-26:-22 -20:-8 -6:-1 1:6 8:20 22:26] + Nfft/2; % 数据子载波位置 0为直流子载波
Ncp = Nfft / 4; % 保护间隔长度
Nsym_cp = Nfft + Ncp; % 80
Nframe = 100; % 每帧符号数
Nts = 2; % 每帧训练符号符号数
Nsym = Nframe - Nts; % 每帧数据符号数
Nbpsc2 = 2; % QPSK 每个子载波编码比特 导频
Nbpsc4 = 4; % 16QAM 每个子载波编码比特 数据
SNR = 30; % 信噪比
%% 导频
pilot = [1 1 1 -1];
%% 生成信号
Ndata = Cdata * Nsym * Nbpsc4; % 随机信号总比特数
data=randi([0,1],1,Ndata);
% plot(data);
%% 信号使用16QAM调制
MODdata = MOD_QAM(data);
plot(MODdata, '*');
axis([-5 5 -5 5]);
MODdata_REAL = real(MODdata);
MODdata_IMAG = imag(MODdata);
%% 串并转换
PARAdata = reshape(MODdata, Nsym, Cdata);
%% 子载波映射
MAPcarries = zeros(Nsym,Nfft);
% 导频子载波映射
for m = 1:Cpilot
for n = 1:Nsym
MAPcarries(n, Ipilot(m)) = pilot(m);
end
end
% 数据子载波映射
for n = 1:Cdata
MAPcarries(:, Idata(n)) = PARAdata(:, n);
end
%% 对每个符号进行传输
RX_PARAdata = [];
for sym = 1:Nsym
%% IFFT
IFFTcarries= IFFT_MOD(MAPcarries(sym, :), Nfft);
% plot(0:Nfft-1,abs(IFFTcarries));
%% 添加循环前缀
cp = IFFTcarries(Nfft-Ncp+1:Nfft);
CPcarries = [cp, IFFTcarries];
% plot(0:Nsym_cp-1,abs(CPcarries));
% %% 并串转换
% SERIdata = reshape(CPcarries, 1, Nsym*Nsym_cp);
%
% %% 生成长训练符号
% Lts = [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 0 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]; % [1x53] 调制因子
% TScarrier = zeros(1, Nfft); % [1x64]
% TScarrier(6:58) = Lts; % [1x64] % 一个频域训练符号
% IFFT_TScarrier = ifft(TScarrier, Nfft); % [1x64] 一个时域训练符号
% ts = [IFFT_TScarrier(Nfft-Nts*Ncp+1:Nfft) IFFT_TScarrier IFFT_TScarrier]; % [1x160] 时域训练符号 2CP 2TS
% plot(0:Nts*Nsym_cp-1,abs(ts));
%
% %% 添加训练符号
% stream = [ts SERIdata];
% Lstream = length(stream);
% plot(0:Lstream-1,abs(stream));
%% 信道
OFDMsym = CPcarries;
channel = [(randn+1j*randn) (randn+1j*randn)/2]; % 2抽头信道
FFTchannel = FFT_MOD(channel, Nfft); % 频域
Lchannel = length(FFTchannel); % 信道长度
PdBchannel = 10*log10(abs(FFTchannel.*conj(FFTchannel))); % 信道功率
RXstream = conv(OFDMsym, channel); % 接收信号
RX_AWGNstream = awgn(RXstream, SNR, 'measured'); % 添加高斯噪声
%% 去CP
RXdata = RX_AWGNstream(Ncp+1:Nsym_cp);
%% FFT
RX_FFTdata = FFT_MOD(RXdata, Nfft);
%% LS信道估计
H_LS = LS_CE(RX_FFTdata, pilot, Ipilot, Nfft, Cpilot); % 使用三次样条插值
%% 信道补偿
RX_LSdata = RX_FFTdata./H_LS;
%% 串并转换
RX_PARAdata = [RX_PARAdata; RX_LSdata];
end
%% 子载波解映射
DEMAPcarries = zeros(Nsym, Cdata);
for b = 1:Cdata
DEMAPcarries(:, b) = RX_PARAdata(:, Idata(b));
end
%% 并串转换
RX_SERIdata = reshape(DEMAPcarries, 1, Cdata*Nsym);
%% QAM解调
DEMODdata = DEMOD_QAM(RX_SERIdata);
x = DEMODdata + data;
m = length(find(x == 1));
z = m/960;
%% 绘图分析
plot(DEMAPcarries, 'r*');
axis(2*[-1 1 -1 1]);
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计:基于802.11a的OFDM的Matlab仿真,实现信道估计和同步源码 毕业设计:基于802.11a的OFDM的Matlab仿真,实现信道估计和同步源码 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!!
资源推荐
资源详情
资源评论
收起资源包目录
基于802.11a的OFDM的Matlab仿真,实现信道估计和同步.zip (9个子文件)
project
DEMOD_QPSK.m 1KB
InterPLT.m 968B
FFT_MOD.m 225B
MOD_QAM.m 2KB
MAIN.m 3KB
IFFT_MOD.m 184B
LS_CE.m 667B
DEMOD_QAM.m 1KB
MOD_QPSK.m 409B
共 9 条
- 1
资源评论
白话机器学习
- 粉丝: 8185
- 资源: 7687
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功