📄 ofdmnew0.m
字号:
%1536,无纠错码,三种信道
%数据调制采用QPSK
clear;
clc;
%***********************参数设置部分***************************
SNR=10; %信噪比,单位dB
fl=128; %设置FFT长度(FFTlength)
Ns=6; %设置一个帧结构中OFDM信号的个数
para=128; %设置并行传输的子载波个数
sr=250000; %设置符号速率(symbolrate)
bt=sr.*2; %设置每个子载波的比特率(bitrate)
gl=32; %设置保护时隙的长度(guardlength)
%************************发送端部分****************************
signal=randint(1,para*Ns*2); %产生0、1随机数列,符号个数为para*2*Ns(子信道个数*调制水平*每个子信道中有用符号个数)
for i=1:para
for j=1:Ns*2
sigpara(i,j)=signal((i-1)*Ns*2+j); %串并转换,将随机产生的二进制矩阵变换为行数为para,列数为2*Ns的矩阵
end
end
%进行QPSK调制,将数据分为两个通道
for j=1:Ns
ich(:,j)=sigpara(:,2*j-1);
qch(:,j)=sigpara(:,2*j);
end
kmod=1./sqrt(2);
ich1=ich.*kmod;
qch1=qch.*kmod;
x=ich1+qch1.*sqrt(-1);
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%插入保护间隔
ich3=[ich2(fl-gl+1:fl,:);ich2];
qch3=[qch2(fl-gl+1:fl,:);qch2];
%并串转换
ich4=reshape(ich3,1,(fl+gl)*Ns);
qch4=reshape(qch3,1,(fl+gl)*Ns);
%形成复数发射数据
Trdata=ich4+qch4.*sqrt(-1);
%*************************信道*********************
%Redata=Trdata; %无噪信道的理想情况
%加性白高斯信道
Redata=awgn(Trdata,SNR,'measured');
%*************************信道(瑞利信道)*********************
%c = Rayleighchan;
%y=filter(c,Trdata);
%Redata = awgn(y,SNR,'measured');
%*************************信道(莱斯信道)*********************
%c=ricianchan;
%y=filter(c,Trdata);
%Redata = awgn(y,SNR,'measured');
%*************************接收端部分*******************************
%移去保护时隙
idata=real(Redata);
qdata=imag(Redata);
idata1=reshape(idata,fl+gl,Ns);
qdata1=reshape(qdata,fl+gl,Ns);
idata2=idata1(gl+1:gl+fl,:);
qdata2=qdata1(gl+1:gl+fl,:);
%FFT
Rex=idata2+qdata2*sqrt(-1);
ry=fft(Rex);
ReI=real(ry)/kmod;
ReQ=imag(ry)/kmod;
%QPSK逆映射
for j=1:Ns
Repara(:,2*j-1)=ReI(:,j);
Repara(:,2*j)=ReQ(:,j);
end
[a,b]=size(Repara);
%符号抽样判决
for i=1:a
for j=1:b
if Repara(i,j)>0.5
Resig1(i,j)=1;
else
Resig1(i,j)=0;
end
end
end
for i=1:para
for j=1:Ns*2
Resig((i-1)*Ns*2+j)=Resig1(i,j); %并串转换,将行数为para,列数为2*Ns的矩阵变为行数为1,列数为para*Ns*2的矩阵
end
end
%***************************结果*********************************************
[num ratio]=symerr(signal,Resig) %误码率比较,num表示错误码元个数,ratio表示错误码元比率
%***************************绘图*********************************
subplot(211)
stem(Resig(1:20));
grid;
subplot(212)
stem(signal(1:20));
grid;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -