📄 ofdm_test.m
字号:
%%%%% QPSK 仿真实例 %%%%%%%%%%%%
clc;
clear all;
EbN0dB=3:3:33;%设定信噪比
Frame=4; %OFDM帧长
errLimit=500;
fftlen1=128; %载波数
Gi=8; %保护间隔长度
fftlen2=fftlen1+Gi;
M=4; %QAM调制阶数
Mc=log2(M); %带宽效率
Es=2;
alpha0=1;
alpha1=1;
alpha2=1;
for ii=1:length(EbN0dB)
errCount=0;
totalN=0;
N0=Es/(Mc*10^(EbN0dB(ii)/10));
while errCount<errLimit
source=randint(fftlen1*Mc,Frame);
trans=qpsk_mod(source);
ofdm_sym=sqrt(fftlen1)*ifft(trans);
ofdm_sym_gi=[ofdm_sym(fftlen1-Gi+1:fftlen1,:)
ofdm_sym]; %Add CP
ofdm_symtochannel=reshape(ofdm_sym_gi,Frame*length(ofdm_sym_gi),1);
% Ray0=sqrt((sqrt(0.5)*randn)^2+(sqrt(0.5)*randn)^2);
% Ray1=sqrt((sqrt(0.5)*randn)^2+(sqrt(0.5)*randn)^2);
% Ray2=sqrt((sqrt(0.5)*randn)^2+(sqrt(0.5)*randn)^2);
Ray0=sqrt(0.5)*(randn+j*randn);
Ray1=sqrt(0.5)*(randn+j*randn);
Ray2=sqrt(0.5)*(randn+j*randn);
h=[Ray0*alpha0
Ray1*alpha1
0
0
Ray2*alpha2];
%h=[Ray0*alpha0];
%ofdm_syminchannel=conv(ofdm_symtochannel,h);
% path1=ofdm_symtochannel.*h(1,1);
% path2=[zeros(1,1)
% ofdm_symtochannel(2:end,1).*h(2,1)];
% path3=[zeros(2,1)
% ofdm_symtochannel(3:end,1).*h(3,1)];
ofdm_syminchannel=conv(ofdm_symtochannel,h);
H=fft([h
zeros(fftlen1-length(h),1)]);
receiver=ofdm_syminchannel(1:length(ofdm_symtochannel),1)+sqrt(N0/2)*(randn(Frame*fftlen2,1)+j*randn(Frame*fftlen2,1));% Add noise
ofdm_symfromchannel=reshape(receiver,fftlen2,Frame);
ofdm_sym_degi=ofdm_symfromchannel(Gi+1:fftlen2,:);
ofdm_sym_fft=(1/sqrt(fftlen1))*fft(ofdm_sym_degi);
for k=1:Frame
tempfft=ofdm_sym_fft(:,k);
ofdm_sym_to_demod(:,k)=tempfft./H;%.*conj(H)./(abs(H).^2);
end
demodata=qpsk_demod(ofdm_sym_to_demod);
temp=sum(sum(abs(source-demodata)));
errCount=errCount+temp;
totalN=totalN+fftlen1*Mc*Frame;
end
ber(ii)=errCount/totalN;
end
ber
semilogy(EbN0dB,ber,'-o');
grid on;
hold on;
berth=berfading(EbN0dB,'psk',4,1);
semilogy(EbN0dB,berth,'-*');
berth3=berfading(EbN0dB,'psk',4,3);
semilogy(EbN0dB,berth3,'-@');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -