📄 ofdm.m
字号:
clc;
clear all;
EbN0dB=1:3:30;%设定信噪比
errLimit=1000;%设定每个信噪比下循环终止统计错误数
fftlen=128;
GI=32;%保护间隔
Mc=2;
Frame=4;
%每次循环仿真矢量长度
for ii=1:length(EbN0dB)
errCount=0;
totalN=0;
sigma2(ii)=1/(2*(10^(EbN0dB(ii)/10)));%AWGN信道噪声方差与信噪比的关系
alpha1=0.6;%多径信道
alpha2=0.2;
alpha3=0.2;
while errCount<errLimit
source=randint(fftlen*Mc,Frame); %产生比特信源,256*4矩阵
source2=reshape(source,Frame*fftlen*Mc,1);%根据source构成1024*1的矩阵
%trans=qpsk_mod(source2);
sourc = reshape(source2,Mc,Frame*fftlen);%2*512矩阵
for k=1:fftlen*Frame %1:512
if [sourc(1,k),sourc(2,k)]==[0 0]
trans(k,1) = -1-i;
elseif [sourc(1,k),sourc(2,k)]==[0 1]
trans(k,1) = -1+i;
elseif [sourc(1,k),sourc(2,k)]==[1 0]
trans(k,1) = 1-i;
elseif [sourc(1,k),sourc(2,k)]==[1 1]
trans(k,1) = 1+i;
end
end
trans2=reshape(trans,fftlen,Frame);%128*4
ifftout1=sqrt(fftlen)*ifft(trans2);%IFFT
ifftout2=[(ifftout1(fftlen-GI+1:fftlen,:)),ifftout1];%加保护间隔
ifftout3=reshape(ifftout2,Frame*(fftlen+GI),1);%(128+32)*4,1
%%%%%%%%%%%%%%%%%%%%%%%%%%% Channel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
R1=sqrt(0.5)*(randn(1,1)+j*randn(1,1));
R2=sqrt(0.5)*(randn(1,1)+j*randn(1,1));
R3=sqrt(0.5)*(randn(1,1)+j*randn(1,1));
chan=[alpha1*R1
0
alpha2*R2
0
alpha3*R3];%共构成5条多径信道
chanout=conv(ifftout3,chan); %时域卷积,即相乘再相加,等效为多径y=h*x
%ray1=alpha1*R1*ifftout3;
%ray2=[0
% alpha2*R2*ifftout3(1:length(ifftout3)-1,1)];
%ray3=[0
% 0
% alpha2*R2*ifftout3(1:length(ifftout3)-2,1)];
receiver1= chanout(1:length(ifftout3))+sqrt(sigma2(ii))*randn(length(ifftout3),1)*(1+j); %加信道噪声,如果是衰落信道,信号模型为y=k*x+n
%receiver1= ray1+ray2+ray3+sqrt(sigma2(ii))*randn(length(ifftout3),1)*(1+j);
%%%%%%%%%%%%%%%%%%%%%%%%%%% Receiver %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
receiver2=reshape(receiver1,fftlen+GI,Frame);%128+32,4
receiver3=receiver2(GI+1:fftlen+GI,:);%去保护间隔
receiver4=(1/sqrt(fftlen))*fft(receiver3);%FFT变换
receiver5=reshape(receiver4,Frame*fftlen,1);%512*1
H=fft([chan,
zeros(fftlen-length(chan),1)]);
for L=1:Frame
receiver6((L-1)*fftlen+1:L*fftlen,1)=(receiver5((L-1)*fftlen+1:L*fftlen,1))./(H); %由于多径信道,line47时域卷积等效为频域相乘,所以在频域的QPSK解调前,需除掉信道chan的频谱,还原信号频谱
end
for k=1:fftlen*Frame
demod(1,k)=(real(receiver6(k,1))>0);
demod(2,k)=(imag(receiver6(k,1))>0);
end
demodata=reshape(demod,Frame*fftlen*Mc,1);
source2=reshape(source,Frame*fftlen*Mc,1);
temp=sum(abs(source2-demodata));
errCount=errCount+temp;
totalN=totalN+Frame*fftlen*Mc;
end
ber(ii)=errCount/totalN;
end
%仿真性能曲线
semilogy(EbN0dB,ber,'-o');
hold on;
grid on;
%理论性能曲线
berthe=berfading(EbN0dB,'psk',4,1);
semilogy(EbN0dB,berthe,'-*');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -