MATLAB模拟2ASK调制误码率与信噪比关系曲线的程序
%模拟2ASK
% Pe=zeros(1,26);
jishu=1;
forsnr=-10:0.5:15
max = 10000;
s=round(rand(1,max));%长度为max的随机二进制序列 f=100;%载波频率
nsamp = 1000;每个载波的取样点数
tc=0:2*pi/999:2*pi;tc的个数应与nsamp相同
cm=zeros(1,nsamp*max);
cp=zeros(1,nsamp*max);
mod=zeros(1,nsamp*max);
for n=1:max;
if s(n)==0;
m=zeros(1,nsamp);
b=zeros(1,nsamp);
else if s(n)==1;
m=ones(1,nsamp);
b=ones(1,nsamp);
end
end
c = sin(f*tc);
cm((n-1)*nsamp+1:n*nsamp)=m;
cp((n-1)*nsamp+1:n*nsamp)=b;
mod((n-1)*nsamp+1:n*nsamp)=c;
end
tiaoz=cm.*mod;%2ASK调制
t = linspace(0,length(s),length(s)*nsamp);
tz=awgn(tiaoz,snr);%信号tiaoz中加入白噪声,信噪比为SNR=10dB
jiet = 2*mod.*tz; %相干解调
[N,Wn]=buttord(0.2,0.3,1,15);
[b,a]=butter(N,Wn);
dpsk=filter(b,a,jiet);%低通滤波
% 抽样判决,判决门限为0.5
depsk = zeros(1,nsamp*max);
for m = nsamp/2:nsamp:nsamp*max;
ifdpsk(m)
fori = 1:nsamp
depsk((m-500)+i) = 0;
end
else if dpsk(m) >= 0.5;
fori = 1:nsamp
depsk((m-500)+i) = 1; end
end
end
end
wrong=0;
fori=1:length(cp);
ifcp(i)~=depsk(i);
wrong=wrong+1;
end
end
Pe(jishu)=wrong/length(cp); jishu=jishu+1;
end
snr=-10:0.5:15;
semilogy(snr,Pe,'*');
%理论计算
snr=-10:0.1:15;
Pet=0.5*erfc((10.^(snr/10)/4).^0.5); hold on;
semilogy(snr,Pet);
xlabel('SNR/dB');ylabel('P_e'); legend('模拟结果','理论值');