clear all
Nsp=52; %系统子载波数(不包括直流载波)
Nfft=64; % FFT 长度
Ncp=16; % 循环前缀长度
Ns=Nfft+Ncp; % 1个完整OFDM符号长度
noc=53; % 包含直流载波的总的子载波数
Nd=6; % 每帧包含的OFDM符号数(不包括训练符号)
M1=4; % QPSK调制
M2=16; % 16-QAM调制
sr=250000; % OFDM符号速率
EbNo=0:2:30; % 归一化信噪比
Nfrm=10000; % 每种信噪比下的仿真帧数
ts=1/sr/Ns; % OFDM符号抽样时间间隔
t=0:ts:(Ns*(Nd+1)*Nfrm-1)*ts; % 抽样时刻
fd=100; % 最大多普勒频移
h=rayleigh(fd,t); % 生成单径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(1,Nfft);
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(EbNo)
%**************************发射机部分 *****************************
msg1=randsrc(Nsp,Nd*Nfrm,[0:M1-1]); % QPSK信息数据
msg2=randsrc(Nsp,Nd*Nfrm,[0:M2-1]); % 16-QAM信息数据
data1=pskmod(msg1,M1,pi/4); % QPSK调制
data2=qammod(msg2,M2)/sqrt(10); % 16-QAM调制并归一化
data3=zeros(Nfft,Nd*Nfrm); % 根据FFT要求,对数据重排
data4=zeros(Nfft,Nd*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(data5,1,Ns*(Nd+1)*Nfrm); % 并串变换
data6=reshape(data6,1,Ns*(Nd+1)*Nfrm);
sigma1=sqrt(1/2*spow1/log2(M1)*10.^(-EbNo(ii)/10)); % 根据EbNo计算噪声标准差
sigma2=sqrt(1/2*spow2/log2(M2)*10.^(-EbNo(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(1,length(dd1))+j*randn(1,length(dd1)));
r2=hh.*dd2+sigma2*(randn(1,length(dd2))+j*randn(1,length(dd2)));
r1=reshape(r1,Ns,Nd+1); % 串并变换
r2=reshape(r2,Ns,Nd+1);
r1=r1(Ncp+1:end,:); % 移除循环前缀
r2=r2(Ncp+1:end,:);
%%%%%%%%%%%%%%% 理想信道估计 %%%%%%%%%%%%%%%%%%%%%%%%%
hh=reshape(hh,Ns,Nd+1); % 信道参数数据重排
hh=hh(Ncp+1:end,:);
x1=r1(:,2:end)./hh(:,2:end); % 理想信估计结果
x2=r2(:,2:end)./hh(:,2:end);
x1=fft(x1); % fft运算
x2=fft(x2);
x1=[x1(39:end,:);x1(2:27,:)]; % 数据重排
x2=[x2(39:end,:);x2(2:27,:)];
x1=pskdemod(x1,M1,pi/4); % 数据解调
x2=qamdemod(x2*sqrt(10),M2);
[neb1(indx),temp]=biterr(x1,msg1(:,(indx-1)*Nd+1:indx*Nd),log2(M1)); % 统计一帧中的错误比特数
[neb2(indx),temp]=biterr(x2,msg2(:,(indx-1)*Nd+1:indx*Nd),log2(M2));
%%%%%%%%%%%%%% 根据训练符号进行的信道估计 %%%%%%%%%%%%%%%%%%%%%%%
R1=fft(r1); % fft运算
R2=fft(r2);
R1=[R1(39:end,:);R1(2:27,:)]; % 数据重排
R2=[R2(39:end,:);R2(2:27,:)];
HH1=(Preamble.')./R1(:,1); % 信道估计
HH2=(Preamble.')./R2(:,1);
HH1=HH1*ones(1,Nd); % 根据信道估计结果进行信道补偿
HH2=HH2*ones(1,Nd);
x3=R1(:,2:end).*HH1;
x4=R2(:,2:end).*HH2;
x3=pskdemod(x3,M1,pi/4); % 数据解调
x4=qamdemod(x4.*sqrt(10),M2);
[neb3(indx),temp]=biterr(x3,msg1(:,(indx-1)*Nd+1:indx*Nd),log2(M1)); % 统计一帧中的错误比特数
[neb4(indx),temp]=biterr(x4,msg2(:,(indx-1)*Nd+1:indx*Nd),log2(M2));
end
ber1(ii)=sum(neb1)/(Nsp*log2(M1)*Nd*Nfrm); % 理想信道估计的误比特率
ber2(ii)=sum(neb2)/(Nsp*log2(M2)*Nd*Nfrm);
ber3(ii)=sum(neb3)/(Nsp*log2(M1)*Nd*Nfrm); % 根据训练符号信道估计的误比特率
ber4(ii)=sum(neb4)/(Nsp*log2(M2)*Nd*Nfrm);
end
r1=hh.*dd1+sigma1(randn(1,length(dd1))+j*randn(1,length(dd1)));
r2=hh.*dd2+sigma2(randn(1,length(dd2))+j*randn(1,length(dd2)));
semilogy(EbNo,ber1,'-ro',EbNo,ber3,'-rv',EbNo,ber2,'-r*',EbNo,ber4,'-rd')
grid on
title('OFDM系统误比特率性能')
legend('QPSK理想信道估计','QPSK训练符号信道估计','16-QAM理想信道估计','16-QAM训练符号信道估计')
xlabel('信噪比(EbNo)')
ylabel('误比特率')
没有合适的资源?快使用搜索试试~ 我知道了~
通信系统仿真实验三至实验十代码和报告
共56个文件
m:43个
docx:8个
mat:2个
需积分: 5 9 下载量 127 浏览量
2022-03-05
16:57:34
上传
评论 3
收藏 6.36MB RAR 举报
温馨提示
实验三 OFDM 系统仿真 实验四 IEEE 802.11a 系统仿真 实验五 直接序列扩频通信系统仿真 实验六 CDMA2000 通信系统仿真 实验七 Aloha 协议仿真 实验八 非持续性载波监听协议仿真 实验九 Alamouti 空时编码仿真 实验十 V-BLAST 结构检测算法仿真
资源详情
资源评论
资源推荐
收起资源包目录
txxtfz.rar (56个子文件)
实验10.docx 1.47MB
e9
Alamouti.m 2KB
ex1.m 2KB
e10
VBLAST_MMSE.m 4KB
VBLAST_ZF.m 4KB
实验9.docx 398KB
e4
4.m 4KB
4-1.m 6KB
实验5.docx 393KB
e5
spreadSpectrum.m 653B
main.m 3KB
hamming_decode.m 2KB
hamming_encode.m 1KB
compare.m 384B
codeJudge.m 475B
overlay.m 849B
arrayCut.m 267B
mixed.m 289B
carrierGen.m 207B
modulate.m 350B
genBipolar.m 223B
unhamming.m 678B
powerCnt.m 105B
deSpreadSpectrum.m 345B
red_bit_cal.m 180B
value2Bipolar.m 329B
tripleGen.m 359B
mixed_encode.m 390B
demodulate.m 962B
hamming.m 591B
bitMultiple.m 572B
walsh.m 289B
thorydisp.m 2KB
mixed_decode.m 390B
multiPathCodeGen.m 352B
testModulate.m 411B
selfCopy.m 448B
arrayGroupSum.m 307B
实验8.docx 309KB
实验3.docx 245KB
e3
ex7.mdl 24KB
OFDM.m 2KB
slprj
sim
varcache
SHIYAN3
varInfo.mat 1024B
tmwinternal
simulink_cache.xml 312B
checksumOfCache.mat 392B
ex7sim.m 699B
e3.m 2KB
SHIYA3.slx 18KB
实验6.docx 2.35MB
e8
main.m 632B
npcsma1.m 6KB
实验4.docx 745KB
实验7.docx 475KB
e7
main.m 626B
aloha.m 5KB
main(1).m 624B
共 56 条
- 1
linux小小萌新
- 粉丝: 9
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0