tic
%参数设置
Nsp=52; %子载波数
Nfft=64; %FFT长度
Ncp=16; %循环前缀长度
Ns=Nfft+Ncp; %一帧OFDM数据长度
noc=53; %包含直流载波的子载波数
Nd=6; %一个数据包所包含的帧数
M1=4; %QPSK调制
M2=16; %16QAM调制
sr=2500; %码元速率
EbNo=0:2:30; %归一化信噪比
Nfrm=10000; %数据包数目
ts=1/sr/Ns; %码元抽样时间间隔
t=0:ts:(Ns*(Nd+1)*Nfrm-1)*ts; %抽样时刻
fd=100; %最大多普勒频移
h=rayleigh(fd,t); %生成单径Rayleigh衰落信道
h1=sqrt(2/3)*h; %生成2径衰落信道
h2=sqrt(1/3)*rayleigh(fd,t);
h2=[zeros(1,4) h2(1:end-4)];
%长训练符号频域数据
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]); %16QAM信息数据
data1=pskmod(msg1,M1,pi/4); %QPSK调制
data2=qammod(msg2,M2)/sqrt(10); %16QAM调制
data3=zeros(Nfft,Nd*Nfrm); %数据重排
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 index=1:Nfrm
data5(:,(index-1)*(Nd+1)+1)=preamble1.';
data5(:,(index-1)*(Nd+1)+2:index*(Nd+1))=data3(:,(index-1)*Nd+1:index*Nd);
data6(:,(index-1)*(Nd+1)+1)=preamble1.';
data6(:,(index-1)*(Nd+1)+2:index*(Nd+1))=data4(:,(index-1)*Nd+1:index*Nd);
end
clear data3 data4
data5=reshape(data5,1,Ns*(Nd+1)*Nfrm); %串并变换
data6=reshape(data6,1,Ns*(Nd+1)*Nfrm);
data51=zeros(1,length(data5));
data61=zeros(1,length(data6));
data51(5:end)=data5(1:end-4);
data61(5:end)=data6(1:end-4);
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));
dd3=data51((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1));
dd4=data61((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1));
hh=h((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1)); %当前数据包的单径信道参数
hh1=h1((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1)); %当前数据包的2径信道参数
hh2=h2((indx-1)*Ns*(Nd+1)+1:indx*Ns*(Nd+1));
%信号通过单径衰落信道,并加入高斯白噪声
r1=hh.*dd1+sigma1*(randn(1,length(dd1))+j*rand(1,length(dd1)));
r2=hh.*dd2+sigma1*(randn(1,length(dd2))+j*rand(1,length(dd2)));
%信号通过2径衰落信道,并加入高斯白噪声
r11=hh1.*dd1+hh2.*dd3+sigma1*(randn(1,length(dd1))+j*rand(1,length(dd1)));
r21=hh1.*dd2+hh2.*dd4+sigma1*(randn(1,length(dd2))+j*rand(1,length(dd2)));
r1=reshape(r1,Ns,Nd+1); %并串变换
r2=reshape(r2,Ns,Nd+1);
r11=reshape(r11,Ns,Nd+1);
r21=reshape(r21,Ns,Nd+1);
r1=r1(Ncp+1:end,:); %移除循环前缀
r2=r2(Ncp+1:end,:);
r11=r11(Ncp+1:end,:);
r21=r21(Ncp+1:end,:);
%根据训练符号进行的信道估计
R1=fft(r1); %FFT变换
R2=fft(r2);
R11=fft(r11);
R21=fft(r21);
R1=[R1(39:end,:);R1(2:27,:)]; %数据重排
R2=[R2(39:end,:);R2(2:27,:)];
R11=[R11(39:end,:);R11(2:27,:)];
R21=[R21(39:end,:);R21(2:27,:)];
HH1=(Preamble.')./R1(:,1); %信道估计
HH2=(Preamble.')./R2(:,1);
HH11=(Preamble.')./R11(:,1);
HH21=(Preamble.')./R21(:,1);
HH1=HH1*ones(1,Nd);
HH2=HH2*ones(1,Nd);
HH11=HH11*ones(1,Nd);
HH21=HH21*ones(1,Nd);
x1=R1(:,2:end).*HH1; %信道补偿
x2=R2(:,2:end).*HH2;
x3=R11(:,2:end).*HH11;
x4=R21(:,2:end).*HH21;
x1=pskdemod(x1,M1,pi/4); %数据解调
x2=qamdemod(x2.*sqrt(10),M2);
x3=pskdemod(x3,M1,pi/4);
x4=qamdemod(x4.*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));
[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); %2径信道的误比特率
ber4(ii)=sum(neb4)/(Nsp*log2(M2)*Nd*Nfrm);
end
semilogy(EbNo,ber1,'-ro',EbNo,ber3,'-rv',EbNo,ber2,'-r*',EbNo,ber4,'-rd')
grid on
title('OFDM系统误比特率性能')
legend('QPSK单径信道','QPSK2径信道','16-QAM单径信道','16-QAM2径信道')
xlabel('信噪比(EbNo)')
ylabel('误比特率')
toc
没有合适的资源?快使用搜索试试~ 我知道了~
OFDM基于IEEE 802.11a仿真.zip
共2个文件
m:2个
需积分: 0 0 下载量 53 浏览量
2024-07-10
21:55:24
上传
评论
收藏 3KB ZIP 举报
温馨提示
假设OFDM 系统物理层采用802.11a系统物理层参数,其中,1个长训练符号与 6 个OFDM 数据符号构成1帧,信道为单径Rayleigh 衰落信道,其最大多普勒频移为100Hz, 信噪比 EbNo 的范围为0~30dB, 仿真该系统采用QPSK 和16-QAM 调制时,接收机端采用 理想信道估计和利用训练符号进行信道估计时的误比特率性能。 IEEE 802.11a中使用53个子载波(其中在k=0 处,即直流子载波上不传送符号,为空 符号0),IFFT 算法基于64点,把53个子载波分别映射到相应的子载波上,编号低端和编 号高端分别有6个和5个空符号,即k=-32,…,-27,27,…,31。 这样映射是为了保证系统的 子载波频谱集中。在进行IFFT 运算时,把子载波1~26映射到相同标号的IFFT 的输入端, 而子载波-26~-1被映射到标号为38~63的IFFT 输入端;其余的IFFT 输入端口,即27~ 37,以及端口0都输入0值 子载波采用4种调制方式,分别为 BPSK、QPSK、16QAM 和64QAM。
资源推荐
资源详情
资源评论
收起资源包目录
OFDM基于IEEE 802.11a仿真.zip (2个子文件)
新建文件夹
OFDM4.m 6KB
OFDM5.m 2KB
共 2 条
- 1
资源评论
小惊喜啊
- 粉丝: 43
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功