📄 cdma2.m
字号:
%解相关检测%
clear all
A=1
for q=0:25
%m序列生成
a1=zeros(63,7);
b1=zeros(7,1);
c1=zeros(1,63);
b1=[0 0 0 0 0 1 0];
a1(1,6)=1;
for i=1:63,
b1(1,7)=b1(1,6);
b1(1,6)=b1(1,5);
b1(1,5)=b1(1,4);
b1(1,4)=b1(1,3);
b1(1,3)=b1(1,2);
b1(1,2)=b1(1,1);
b1(1,1)=xor(b1(1,1),b1(1,7));
for j=1:7,
a1(i,j)=b1(1,j);
end
end
for k=1:63,
if (a1(k,7)==0),
c1(1,k)=1;
else
c1(1,k)=-1;
end
end
a2=zeros(63,7);
b2=zeros(7,1);
c2=zeros(1,63);
b2=[0 0 0 0 0 1 0];
a2(1,6)=1;
for i=1:63,
b2(1,7)=b2(1,6);
b2(1,6)=b2(1,5);
b2(1,5)=b2(1,4);
b2(1,4)=b2(1,3);
b2(1,3)=b2(1,2);
b2(1,2)=b2(1,1);
b2(1,1)=xor(b2(1,6),b2(1,7));
for j=1:7,
a2(i,j)=b2(1,j);
end
end
for k=1:63,
if (a2(k,7)==0),
c2(1,k)=1;
else
c2(1,k)=-1;
end
end
%产生输入随机数和高斯白噪声,1,-1序列
x1=randn(1000,1);
x2=randn(1000,1);
for i=1:1000,
if x1(i,1)<0,
x1(i,1)=-1;
else
x1(i,1)=1;
end
end
for i=1:1000,
if x2(i,1)<0,
x2(i,1)=-1;
else
x2(i,1)=1;
end
end
r=0;
for i=1:63,
r=r+c1(1,i)*c2(1,i);
end
r=r/63;
R=[1,r;r,1];
%做乘积运算
z1=zeros(1000,1);
z2=zeros(1000,1);
for i=1:1000,
noise=normrnd(0,q,63,1);
z1(i,1)=c1*noise/63;
z2(i,1)=c2*noise/63;
end
yy1=zeros(1000,1);
yy2=zeros(1000,1);
y1=A*x1+2*A*r*x2+z1;
y2=2*A*x2+r*x1+z2;
W=[A,0;2*A,0];
for i=1:1000
Y(1,i)=y1(i,1);
Y(2,i)=y2(i,1);
end
YY=inv(R)*Y;
for i=1:2
for j=1:1000
if YY(i,j)<0
YY(i,j)=-1;
else
YY(i,j)=1;
end
end
end
yy1=YY(1,:);
yy2=YY(2,:);
n1=yy1-x1';
n2=yy2-x2';
biterr1=zeros(1,1);
biterr2=zeros(1,1);
for i=1:1000
if n1(i)==0
biterr1=biterr1;
else
biterr1=biterr1+1;
end
if n2(i)==0
biterr2=biterr2;
else
biterr2=biterr2+1;
end
end
err1(q+1)=biterr1/1000;
err2(q+1)=biterr2/1000;
SINR1(q+1)=A/(2*A+q);
SINR2(q+1)=2*A/(A+q);
end
end
semilogy(err1,SINR1,'*m')
hold on
grid on
semilogy(err2,SINR2,'vb')
legend('用户1','用户2')
xlabel('SINR')
ylabel('误码率')
title('解相关检测')
hold off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -