clc
clear all
N= 10.^4;
bits_per_symbol=2;
%噪声一定
fc=9e8;
lamda = 3e8/fc;
d0=100; sigma=7;
d=780000;n=2;
PL = -20*log10(lamda/(4*pi*d0)) + 10*n*log10(d/d0)+sigma*randn(1);
% BW=10^7; %单位Hz,工作带宽,FDD系统,上下行各10MHz
% NOISE=-174;%噪声谱密度,单位dBm/Hz
% N1=NOISE+10*log10(BW)
% N0 = 10^(N1/10);
N_snr=20; % 每比特信噪比
snr=1; %信噪比间隔
PL_SR=154;
%生成伪随机二进制序列并调制
X=randint(1,N);%产生二进制随即序列(非0即1)
%--------------------------------------------------------
%QPSK调制:(1 1)->pi/4;(0 1)->3*pi/4;(0 0)->-3*pi/4;(1,0)->-pi/4;
s=(X.*2-1)/sqrt(2);
sreal=s(1:2:N);
simage=s(2:2:N);
X1=sreal+j.*simage;
% psudo_bit_sequence=randi([0,M-1],1,N);
% qpsk_sequence= pskmod(psudo_bit_sequence,M);
Signal_offset=X1;
%---------------------------------------------------------------
%Lutz模型
KdB=7;
Fade_percentage=0.3;
Log_sigma_dB=12;
Log_miu_dB=-12.9;
Channel_num=1;
Log_noise_sigma=10^(Log_sigma_dB/10);
Signal_average_level=10^(Log_miu_dB/10);
% Freq_band=10^7; %单位Hz,工作带宽,FDD系统,上下行各10MHz
% Noise_pdf=-174;%噪声谱密度,单位dBm/Hz
% Noise_dB=Noise_pdf+10*log10(Freq_band);
% Noise_power=10^(Noise_dB/10);
% Noise_power=N0;
% Power_tran=10^(Snr/10)*Noise_power/H_star.^2;
Power_tran=2;
for k=1:Channel_num
H_Rayleigh=(randn(1,Channel_num)+1i*randn(1,Channel_num))/sqrt(2);
H_Lognorm=exp(Signal_average_level+randn(1,Channel_num)*Log_noise_sigma);
H_RayLog(k)=H_Rayleigh(k)*H_Lognorm(k);
K=10^(KdB/10);
H_rician(k)=sqrt(K/(K+1))+sqrt(1/(K+1)).*H_Rayleigh(k);
end
if Fade_percentage<=0.5
for k=1:Channel_num
Signal_addnoi_Lutz(k,:)=sqrt(Power_tran)*H_rician(k)*Signal_offset(k,:);%+sqrt(Noise_power)*sqrt(1/2).*(randn(1,length(Signal_offset(k,:)))+1j*randn(1,length(Signal_offset(k,:))));
% Signal_addnoi_rician_power=10*log10(mean(abs(Signal_addnoi_rician(k,:).^2)));
% Signal_addno_Lutz(k,:)=awgn(Signal_addnoi_rician(k,:),Snr,Signal_addnoi_rician_power);
end
else
for k=1:Channel_num
H_RayLog(k)=H_Rayleigh(k)*H_Lognorm(k);
Signal_addnoi_Lutz(k,:)=sqrt(Power_tran)*H_RayLog(k)*Signal_offset(k,:);%+sqrt(Noise_power).*(randn(1,length(Signal_offset(k,:)))+1j*randn(1,length(Signal_offset(k,:))));
% Signal_addnoi_RayLog_power=10*log(mean(abs(Signal_addnoi_RayLog(k,:).^2)));
% Signal_addno_Lutz(k,:)=awgn(Signal_addnoi_RayLog(k,:),Snr,Signal_addnoi_RayLog_power);
end
end
Signal_out1=sqrt(10^(-PL_SR/10))*Signal_addnoi_Lutz;
%---------------------------------------------------------------
%链路损耗和阴影衰落混合模型
for k=1:Channel_num
H_Rayleigh=(randn(1,Channel_num)+1i*randn(1,Channel_num))/sqrt(2);
K=10^(KdB/10);
H_rician(k)=sqrt(K/(K+1))+sqrt(1/(K+1)).*H_Rayleigh(k);
end
for k=1:Channel_num
Signal_addnoi_Lutz2(k,:)=sqrt(Power_tran)*H_rician(k)*Signal_offset(k,:);%+sqrt(Noise_power)*sqrt(1/2).*(randn(1,length(Signal_offset(k,:)))+1j*randn(1,length(Signal_offset(k,:))));
% Signal_addnoi_rician_power=10*log10(mean(abs(Signal_addnoi_rician(k,:).^2)));
% Signal_addno_Lutz(k,:)=awgn(Signal_addnoi_rician(k,:),Snr,Signal_addnoi_rician_power);
end
Signal_out2=sqrt(10^(-PL/10))*Signal_addnoi_Lutz2;
%---------------------------------------------------------------
Tx_data1=Signal_out1;
Tx_data2=Signal_out2;
%----------------------------------------------------------------
%加高斯白噪声
Error_ber=[];%误比特率
Error_ber1=[];
Error_ber2=[];%误比特率
Error_ber3=[];
%Error_ser=[];%误符号率
for snr_db=-10:snr:N_snr
% code_power=0;
% code_power=[norm(Tx_data1)]^2/(length(Tx_data1));%信号的符号功率
% %bit_power=var(Tx_data);
% bit_power=code_power/bits_per_symbol;%比特功率
% noise_power=10*log10((bit_power/(10^(snr_db/10))));%噪声功率
% noise=wgn(1,length(Tx_data1),noise_power,'complex');%产生GAUSS白噪声信号
% Y1=Tx_data1+noise;
% code_power=[norm(Tx_data2)]^2/(length(Tx_data2));%信号的符号功率
% %bit_power=var(Tx_data);
% bit_power=code_power/bits_per_symbol;%比特功率
% noise_power=10*log10((bit_power/(10^(snr_db/10))));%噪声功率
% noise=wgn(1,length(Tx_data2),noise_power,'complex');%产生GAUSS白噪声信号
% Y2=Tx_data2+noise;
Y1=awgn(Tx_data1,10^(snr_db/10),'measured',1234,'linear');
Y2=awgn(Tx_data2,10^(snr_db/10),'measured',1234,'linear');
%-------------------------------------------------------
%QPSK解调
YY1=Y1;
y_real1=sign(real(YY1));
y_image1=sign(imag(YY1));
y_re1=y_real1./sqrt(2);
y_im1=y_image1./sqrt(2);
r10=[];
r11=[];
for k=1:length(y_real1);
r10=[r10,[y_real1(k),y_image1(k)]];
end;
for k=1:length(y_re1);
r11=[r11,[y_re1(k),y_im1(k)]];
end;
XX1(find(r11>0))=1;
YY2=Y2;
y_real2=sign(real(YY2));
y_image2=sign(imag(YY2));
y_re2=y_real2./sqrt(2);
y_im2=y_image2./sqrt(2);
r00=[];
r01=[];
for k=1:length(y_real2);
r00=[r00,[y_real2(k),y_image2(k)]];
end;
for k=1:length(y_re2);
r01=[r01,[y_re2(k),y_im2(k)]];
end;
XX(find(r01>0))=1;
%r01 = pskdemod(Y7,M);
%-------------------------------------------------------------
%计算在不同信噪比下的误比特率并作图
dif_bit1=s-r11;
dif_bit2=s-r01;
ber_snr1=0; %纪录误比特数
ber_snr2=0;
for k=1:N;
if dif_bit1(k)~=0;
ber_snr1=ber_snr1+1;
end
end;
Error_ber1=[Error_ber1,ber_snr1];
for k=1:N;
if dif_bit2(k)~=0;
ber_snr2=ber_snr2+1;
end
end;
Error_ber2=[Error_ber2,ber_snr2];
end
BER1=zeros(1,length(0:snr:N_snr));
BER1=Error_ber1./N;
BER2=zeros(1,length(0:snr:N_snr));
BER2=Error_ber2./N;
%-------------------------------------------------------------
i=-10:snr:N_snr;
semilogy(i,BER1,'-*r');
hold on;
semilogy(i,BER2,'-og');
hold on;
grid on;
xlabel('SNR/dB')
ylabel('BER')
legend('Channel_1','Channel_2');
hold off
D112