clc;clear all;close all;
num=50000;
for (SNR=0:10)
bpsk=randsrc(1,num,[1,-1]);%产生BPSK基带信号
snr=1/(10^(SNR/10));
noise=sqrt(snr/2)*(randn(1,4*num));
sf=[1,-1,1,-1];%Walsh码
b_k=kron(bpsk,sf);%利用函数进行扩频,扩频后BPSK基带信号每个元素对应4个元素
receive=b_k+noise;%含噪声的接收信号
m=1;
for i=1:4:length(b_k)-3 %进行解扩处理
b_kr(i:i+3)=sf.*receive(i:i+3);
b_jkt(m)=sum(b_kr(i:i+3));%将每4四序列相加,方便解调判决
m=m+1;
end
pe(SNR+1)=0;
for(i=1:num) %信号判决,大于0判为1,小于0判为-1,恢复出原始信号
if (b_jkt(i)>=0)
b_jk(i)=1;
else b_jk(i)=-1;
end
end
pe(SNR+1)=(sum(abs((b_jk-bpsk)/2)))/num;%计算误码率
peb(SNR+1)=0.5*erfc(sqrt(10^(SNR/10)));
end
r=0:10;
semilogy(r,peb,'b-v',r+6,pe,'m-x');%对y取底为10对数
grid on;legend('理论误码率曲线','仿真误码率曲线');