1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| clear,clc
Frame=1000;
N=1000;
SNR_DB=0:4:40;
SNR=10.^(SNR_DB/10);
VAR=1./SNR;
bpsk1=[-1,1];
bpsk2=[-i,i];
for m=1:length(SNR)
snr=SNR(m);
var=VAR(m);
errors(m)=0;
s1(1)=1;
s2(1)=1;
for k=1:N
h1=(randn(1,1)+i*randn(1,1));
h2=(randn(1,1)+i*randn(1,1));
c1=randint(1,(Frame-1));
c2=randint(1,(Frame-1));
c1_mod=bpsk1(c1+1);
c2_mod=bpsk2(c2+1);
nr=sqrt(var)*(randn(1,Frame)+i*randn(1,Frame));
yr(1)=h1*s1(1)+h2*s2(1)+nr(1);
for n=2:Frame
s1(n)=s1(n-1)*c1_mod(n-1);
s2(n)=s2(n-1)*c2_mod(n-1);
yr(n)=h1*s1(n)+h2*s2(n)+nr(n);
end
a_demod1=sqrt((mean(yr*yr'))/Frame);
a_demod=1/a_demod1;
n1=sqrt(var)*(randn(1,Frame)+i*randn(1,Frame));
y1=a_demod*h1*conj(yr)+n1;
for n=2:Frame
y1_demod(n)=conj(c1_mod(n-1))*y1(n-1)-y1(n);
c_mod(n-1)=(c1_mod(n-1)-c2_mod(n-1))*conj(c1_mod(n-1)-c2_mod(n-1));
end
u_det=y1*y1'/Frame-y1_demod*y1_demod'/(Frame*mean(c_mod));
if u_det>0
u_demod=sqrt(u_det);
else
u_demod=0;
end
for n=2:Frame
y1_det(1)=y1(1)-u_demod*conj(s1(1));
y1_det(n)=y1(n)-u_demod*conj(s1(n));
for x=1:2
c2_max(x)=real(y1_det(n)*conj(y1_det(n-1))*bpsk2(x));
end
b=find(c2_max==max(c2_max));
c2_demod(n-1)=bpsk2(b);
if imag(c2_demod(n-1))<0
c2_det(n-1)=0;
else
c2_det(n-1)=1;
end
errors(m)=errors(m)+(c2_det(n-1)~=c2(n-1));
end
end
ber(m)=errors(m)/(Frame*N)
end
semilogy(SNR_DB,ber,'r');
legend('ANC');
grid on; |
Partager