📄 noofdm.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); %产生比特信源
source2=reshape(source,Frame*fftlen*Mc,1);
%trans=qpsk_mod(source2);
sourc = reshape(source2,Mc,Frame*fftlen);
for k=1:fftlen*Frame
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);
%ifftout1=sqrt(fftlen)*ifft(trans2);
%ifftout2=[(ifftout1(fftlen-GI+1:fftlen,:)),
% ifftout1];
%ifftout3=reshape(ifftout2,Frame*(fftlen+GI),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];
%chanout=conv(ifftout3,chan); %时域卷积,即相乘再相加,等效为多径
chanout=conv(trans,chan);
%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(trans))+sqrt(sigma2(ii))*randn(length(trans),1)*(1+j);
%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);
%receiver3=receiver2(GI+1:fftlen+GI,:);
%receiver4=(1/sqrt(fftlen))*fft(receiver3);
%receiver5=reshape(receiver4,Frame*fftlen,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).*conj(H))./(abs(H).^2); %由于多径信道,line47时域卷积等效为频域相乘,所以在频域的QPSK解调前,需除掉信道chan的频谱,还原信号频谱
%end
for k=1:fftlen*Frame
demod(1,k)=(real(receiver1(k,1))>0);
demod(2,k)=(imag(receiver1(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=berawgn(EbN0dB,'psk',4,'nodiff');
%semilogy(EbN0dB,berthe,'-*');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -