%test
clear
b_err=[];
for SNR=10:10:30
n_bit_err=0;
for t=1:20
%扩频调制
Rb=100000;%100kb/s
Rc=Rb*15;%1.5Mb/s 码元速率
Fc=2e9;%3M/s 载频
W=Rc;%带宽
Fs=Rc*10;
SpB=Fs/Rb;
N=1000;
x=floor(rand(1,N)*2); % 信号产生
%-----------扩频-------------------%
x_1=x*2-1;
%PN=floor(rand(1,15)*2);
PN=[1 0 0 1 1,0 1 1 1 0,1 0 0 0 1];
PN_1=PN*2-1;
[PN_2,x_2]=meshgrid(PN_1,x_1);
x_spread=x_2.*PN_2;
[h ,w]=size(x_spread);
x_t=reshape(x_spread',h*w,1);%chips
sample=1:Fs/Rc;
[sample1 x_tl]=meshgrid(sample,x_t);%对x_t进行采样得到的采样点
x_tls=reshape(x_tl',1,h*w*Fs/Rc);%采样点的序列
t=1/Fs:1/Fs:1/Rb*N;
%modulate
tc=1/Fs:1/Fs:1/Rc;
ftc=cos(2*pi*Fc*tc);
[ftc_1 x_t4]=meshgrid(ftc,x_t);
xt_modu=ftc_1.*x_tl;
xt_modu_l=reshape(xt_modu',1,h*w*Fs/Rc);
[F_m f_m]=gen_spectrum(xt_modu_l,Fs,Fc);%调制后的频谱
[F_l,f_l]=gen_spectrum(x_tls,Fs,Fc);%低通信号的频谱
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%plot(f_m,F_m);
%chnnel
slt=x_tl;
%chnnel fadeing
[h w]=size(slt);
c_real=randn(h,3)*0.5;%乘的系数就是方差;chnnel1 chnnel2 chnnel3
c_img=randn(h,3)*0.5;
c_abs=sqrt(c_real.^2+c_img.^2);
c_ang=atan(c_img./c_real);
%chnnel1
c1_abs=c_abs(:,1);
c1_abs=hor_copy(c1_abs,Fs/Rc);
c1_ang=c_ang(:,1)+1/W;
c1_ang=hor_copy(c1_ang,Fs/Rc);
t1=1/Fs:1/Fs:1/Rc;
t1=ver_copy(t1,h);
fm_ch1=slt.*c1_abs.*cos(2*pi*Fc*t1-c1_ang);%chnnel1 signal output
fm_ch1_l=reshape(fm_ch1',1,h*Fs/Rc);
[F_c1,f_c1]=gen_spectrum(fm_ch1_l,Fs,Fc);
%chnnel2
c2_abs=c_abs(:,2);
c2_abs=hor_copy(c2_abs,Fs/Rc);
c2_ang=c_ang(:,2)+2/W;
c2_ang=hor_copy(c2_ang,Fs/Rc);
t2=1/Fs:1/Fs:1/Rc;
t2=ver_copy(t2,h);
fm_ch2=slt.*c2_abs.*cos(2*pi*Fc*t2-c2_ang);
fm_ch2_l=reshape(fm_ch2',1,h*Fs/Rc);
[F_c2,f_c2]=gen_spectrum(fm_ch2_l,Fs,Fc);
%chnnel3
c3_abs=c_abs(:,3);
c3_abs=hor_copy(c3_abs,Fs/Rc);
c3_ang=c_ang(:,3)+3/W;
c3_ang=hor_copy(c3_ang,Fs/Rc);
t3=1/Fs:1/Fs:1/Rc;
t3=ver_copy(t3,h);
fm_ch3=slt.*c3_abs.*cos(2*pi*Fc*t3-c3_ang);
fm_ch3_l=reshape(fm_ch3',1,h*Fs/Rc);
[F_c3,f_c3]=gen_spectrum(fm_ch3_l,Fs,Fc);
%sum
fm_ch=fm_ch1+fm_ch2+fm_ch3;%每行表示每个chip
fm_ch_plot=reshape(fm_ch',1,h*Fs/Rc);
[F_c,f_c]=gen_spectrum(fm_ch_plot,Fs,Fc);
%%%%%%%%%%%%%%%%%%%%%%%添加噪声
Es=sum(fm_ch_plot.^2);
%SNR=0;
En=(Es/(SpB*N))/(10^((SNR-10*log10(0.5*Fs/Rb))/10));
Noise_mesh=randn(size(fm_ch)).*sqrt(En);
%Noise_mesh=zeros(size(fm_ch));
fm_ch_noised=fm_ch+Noise_mesh;
fm_ch_noised_plot=reshape(fm_ch_noised',1,h*Fs/Rc);
[F_c_noised,f_c_noised]=gen_spectrum(fm_ch_noised_plot,Fs,Fc);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
figure(2);
subplot(2,2,1);
edge=0:0.1:5;
hist(reshape(c_abs,1,h*3),edge);
title('信道衰减的直方图');
subplot(2,2,2);
plot(t(1:2*SpB),fm_ch1_l(1:2*SpB));
title('通过信道1后的信号波形');
xlabel('t');
subplot(2,2,3);
plot(t(1:2*SpB),fm_ch_plot(1:2*SpB));
title('三条信道叠加后的信号波形');
subplot(2,2,4);
plot(f_c,F_c);
title('三条信道叠加后的频谱');
xlabel('Hz');
%
figure(3)
subplot(1,2,1);
plot(t(1:2*SpB),fm_ch_noised_plot(1:2*SpB));
title('带有噪声的叠加信号');
xlabel('t');
subplot(1,2,2);
plot(f_c_noised,F_c_noised);
title('加噪后的频谱');
%rake receiver
%fm_rec=fm_ch;%signal on the chnnels
fm_rec=fm_ch_noised;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[h w]=size(fm_rec);
%chnnel1
cr1_abs=c_abs(:,1);
cr1_abs=hor_copy(cr1_abs,Fs/Rc);
cr1_ang=c_ang(:,1)+1/W;
cr1_ang=hor_copy(cr1_ang,Fs/Rc);
tr1=1/Fs:1/Fs:1/Rc;
tr1=ver_copy(tr1,h);
fm_ch1_s1=1.*cr1_abs.*cos(2*pi*Fc*t1-cr1_ang);%relayted to signal 1
fm_ch1_s2=-1.*cr1_abs.*cos(2*pi*Fc*t1-cr1_ang);%relayted to signal -1
sum_ch1_s1=fm_ch1_s1.*fm_rec;
sum_ch1_s2=fm_ch1_s2.*fm_rec;
sum_ch1_s1=sum(sum_ch1_s1');
sum_ch1_s2=sum(sum_ch1_s2');
%chnnel2
cr2_abs=c_abs(:,2);
cr2_abs=hor_copy(cr2_abs,Fs/Rc);
cr2_ang=c_ang(:,2)+2/W;
cr2_ang=hor_copy(cr2_ang,Fs/Rc);
tr2=1/Fs:1/Fs:1/Rc;
tr2=ver_copy(tr2,h);
fm_ch2_s1=1.*cr2_abs.*cos(2*pi*Fc*t1-cr2_ang);%relayted to signal 1
fm_ch2_s2=-1.*cr2_abs.*cos(2*pi*Fc*t1-cr2_ang);%relayted to signal -1
sum_ch2_s1=fm_ch2_s1.*fm_rec;
sum_ch2_s2=fm_ch2_s2.*fm_rec;
sum_ch2_s1=sum(sum_ch2_s1');
sum_ch2_s2=sum(sum_ch2_s2');
%chnnel3
cr3_abs=c_abs(:,3);
cr3_abs=hor_copy(cr3_abs,Fs/Rc);
cr3_ang=c_ang(:,3)+3/W;
cr3_ang=hor_copy(cr3_ang,Fs/Rc);
tr3=1/Fs:1/Fs:1/Rc;
tr3=ver_copy(tr3,h);
fm_ch3_s1=1.*cr3_abs.*cos(2*pi*Fc*t1-cr3_ang);%relayted to signal 1
fm_ch3_s2=-1.*cr3_abs.*cos(2*pi*Fc*t1-cr3_ang);%relayted to signal -1
sum_ch3_s1=fm_ch3_s1.*fm_rec;
sum_ch3_s2=fm_ch3_s2.*fm_rec;
sum_ch3_s1=sum(sum_ch3_s1');
sum_ch3_s2=sum(sum_ch3_s2');
%sum
Um1=sum_ch1_s1+sum_ch2_s1+sum_ch3_s1;
Um2=sum_ch1_s2+sum_ch2_s2+sum_ch3_s2;
%判决
signal_recive=double(Um1>Um2);
signal_trans=(x_t'+1)./2;
%
x_chip_recive=reshape(signal_recive,15,N);
PN_mesh=hor_copy(PN',N);
PN_mesh_t=hor_copy(1-PN',N);
d1=sum(x_chip_recive~=PN_mesh);
d2=sum(x_chip_recive~=PN_mesh_t);
x_r=double(d1<d2);
% figure;plot(x);hold on;plot(x_r)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n_bit=sum(x_r~=x);
n_bit_err=n_bit_err+n_bit;
figure
subplot(2, 3, 1);
stairs((x(1:32)), 'Color', 'b');
ylim([-1.5, 1.5]);
title('信号源序列', 'Color', 'k');
xlabel('数据长度');
ylabel('幅度');
subplot(2, 3, 2);
plot((x_t(1:32*length(PN))), 'b'); title('经过扩频的基带信号'); xlabel('时间'); ylabel('幅度');
subplot(2, 3, 3);
plot(f_m,F_m, f_l,F_l); title('扩频前后信号的频谱'); xlabel('频率'); ylabel('幅度');
subplot(2, 3, 4);
stairs((Um1(1:32*length(PN))), 'r'); title(['接收信号,信噪比:', num2str(SNR), ' dB']); xlabel('时间'); ylabel('幅度');
subplot(2, 3, 5);
stairs((x_r(1:32)), 'r'); title(['经过Rake接收机的波形,信噪比:', num2str(SNR),' dB']); xlabel('时间'); ylabel('幅度');
subplot(2, 3, 6);
stairs((x(1:32)), 'b'); hold on;
stairs((x_r(1:32)), 'r'); title(['对比原始基带信号和Rake接收机的波形,信噪比:', num2str(SNR), ' dB']); xlabel('时间'); ylabel('幅度'); legend('原始信号', 'Rake输出');
end
E_bit=n_bit_err/(N*20)
b_err=[b_err E_bit];
end