二元调制最佳接收机的 MATLAB 仿真程序
%bicomsim.m
close all
clear all
%P0 = 0.5;
%P1 = 0.5;
%fs = N/Tb
N = 10;
L = 1000;
k0 = 2;
Th1 = 0;
A = 1;
rand('state',sum(100*clock));
for db = -5:15,
r = 10^(db/10);
sigma = 0.5*A*sqrt(N)/10^(db/20);
i0 = db+6;
Pe0PSK(i0) = 0.5*erfc(sqrt(r));
Pe0ASKa(i0) = 0.5*erfc(sqrt(r/2));
Pe0ASKb(i0) = 0.5*erfc(sqrt(r/4));
Pe0FSK(i0) = Pe0ASKa(i0);
Th = 0.5*0.5*A^2*N;%2ASK
count = 0;
j=1:L;
for
for
i=1:N,
NN(i) = sigma*randn(1,1);
s0(i) = 0;
s1(i) = A*sin(2*pi*k0*i/N);
x0(i) = s0(i) + NN(i);
x1(i) = s1(i) + NN(i);
%N(m, sigma)
end
summ0 = 0;
for
i=1:N,
summ0 = summ0 + x0(i)*s1(i);
end
summa = summ0;
summa > Th,
if
count = count + 1;
end
summ0 = 0;
i=1:N,
for
summ0 = summ0 + x1(i)*s1(i);
end
summb = summ0;
if
summb < Th,
count = count + 1;
end
end
PeASK(i0) = 0.5*count/L;
Th = 0; %2PSK
count = 0;
j=1:L;
for
for
i=1:N,
NN(i) = sigma*randn(1,1);
s0(i) = A*sin(2*pi*k0*i/N); Th = 0;
s1(i) = -A*sin(2*pi*k0*i/N); %2PSK
x0(i) = s0(i) + NN(i);
x1(i) = s1(i) + NN(i);
end
summ0 = sum(x0.*s0);
summ1 = sum(x0.*s1);
summa = summ0 - summ1;
sma(j) = summa;
if
summa < Th,
count = count + 1;
end
summ0 = sum(x1.*s0);
summ1 = sum(x1.*s1);
summb = summ0 - summ1;
smb(j) = summb;
if s ummb > Th,
count = count + 1;
end
end
PePSK(i0) = 0.5*count/L;
Th = 0.5*0.5*A^2*N; %2FSK
count = 0;
j=1:L;
for
for
i=1:N,
NN(i) = sigma*randn(1,1);
s0(i) = A*sin(2*pi*k0*i/N); Th = 0;
s1(i) = A*sin(2*pi*(k0+1)*i/N);
x0(i) = s0(i) + NN(i);
x1(i) = s1(i) + NN(i);
end
summ0 = sum(x0.*s0);
summ1 = sum(x0.*s1);
summa = summ0 - summ1;
sma(j) = summa;
if summa < Th,
count = count + 1;
end
summ0 = sum(x1.*s0);
summ1 = sum(x1.*s1);
summb = summ0 - summ1;
smb(j) = summb;
summb > Th,
if
count = count + 1;
end
end
PeFSK(i0) = 0.5*count/L;
end
i=1:21;
i2=i-6;
semilogy(i2,Pe0PSK,'b',i2,Pe0ASKb,'b',i2,Pe0FSK,'b');
hold on
semilogy(i2,PePSK,'r*',i2,PeASK,'ro',i2,PeFSK,'r+')
axis([-5 15 1.0e-06 1.0e0])