www.pudn.com > algorithmcmashi.rar > algorithmcmashi.m
clear
% parameters
Pd=500; % length of signal
M=2;
% 产生gold码
fbconnection1=[0 1 0 0 1];
fbconnection2=[0 1 1 1 1];
goldseq=gold_seq(fbconnection1,fbconnection2);
N=2^length(fbconnection1)-1; %码长度
Lc=31;
ind2=find(goldseq==0);
goldseq(ind2)=-1;
%gold码归一化
goldseq=(1/sqrt(31))*goldseq;
x1 = randint(Pd, 1, M);
x2 = randint(Pd, 1, M);
x3 = randint(Pd, 1, M);
% psk调制
s1 = pskmod(x1, M); % s1: 目标信号
s2 = pskmod(x2, M); % s2: 干扰
s3 = pskmod(x3, M); % s3: 干扰
SIR = 0; % SIR: 信扰比
s2 = s2./(10^(SIR/20));
s3 = s3./(10^(SIR/20));
%s=[s1 s2 s3];
% 扩频序列
c1 = goldseq(1, :)';
c2 = goldseq(2, :)';
c3 = goldseq(3, :)';
%t1=goldseq(1,:)'*s(1,:);
%ti=goldseq(1,:)'*s(i,:);
%t1=[t1;ti];
%s=t1;
% 扩频
kuo1= s1 * c1';
kuo2 = s2 * c2';
kuo3 = s3 * c3';
f1 = kuo1(1, :)'; % f1, fi as provisional variables
for i = 2:Pd
fi = kuo1(i, :)';
f1 = [f1; fi];
end
kuo1 = f1;
f1 = kuo2(1,:)';
for i = 2:Pd
fi = kuo2(i,:)';
f1 = [f1; fi];
end
kuo2 = f1;
f1 = kuo3(1, :)';
for i = 2:Pd
fi = kuo3(i,:)';
f1 = [f1; fi];
end
kuo3 = f1;
si = [kuo1, kuo2, kuo3]; % si: 信号矩阵
fc = 10^9; % carrier frequency
wl = 3*10^8/fc; % carrier wavelength
d = wl/2; % distance between neighbouring sensors is half the carrier wavelength
K = 4; % number of sensors
w = [0.1 0.1 0.1 0.1 ]'; % inital weight
alpha = 0.9; % forgetting factor
delta = 0.95;
u=0.001;
Q = eye(K,K);
theta = [10,-30,45];
k = [0:K-1]';
A = exp(-j*2*pi*d*k*sin(theta*pi/180)/wl);
%r = r1+A2*r2+A3*r3+A4*r4+A5*r5+A6*r6;
SNR = 0;
p = 1;
for ak = 1:50
% RLS Algorithm
for i = 1:500%改了次数
q = 1 + (i - 1) * N;
o = i * N;
temp1 = si(q:o, :); % 取一段信号temp1为31*3
r = A * temp1';%r为4*31
x = awgn(r, SNR, 'measured'); % 加信道x为4*31
%x(i) = x(i) * c1;
%s2 = s2 * c2;
%s3 = s3 * c3;
y = x * c1;%y为4*1
c = w' * y;
h = p * c;
g = h / (alpha + (c' * h));
p = 1 / alpha * (p - (g * h'));
t = x(:, 1);
Q = 1 / delta * (Q - (Q * t * t' * Q) ./ (delta + t' * Q * t));
e = Q * y - w * c;
e1= c -s1(i);
ti(i) = e1' * e1;
if ti>10ti(i-1)
w = w + e * g';
% end
% t=x(:,N);
%g=e(31);
%kn=P*t./(alpha+t'*P*t);
% P=1/alpha*(P-P*t*t'*P./(alpha+t'*P*t));
%w=w+kn*g;
%w=w+u*x*e';
%temp1=temp1';
%e1=y-temp1(1,:);%定义误差
% 计算误差的平方
single=A(:,1)*s1(i);%为4*1
%nois1=A(:,2)*s2(i);%为4*1
%nois2=A(:,3)*s3(i);%为4*1
noise=y-single;
n = w'*noise*noise'*w;
SINR(i)=(w'*single*single'*w)/n;
end
T(ak, :) = ti;
end
sum = zeros(1,500);
for i = 1:50
sum = sum + T(i, :);
end
averg = sum / 50;
figure;
semilogy([1:500], abs(averg), '-r');%gailecishu
%legend('');
xlabel('迭代次数'); ylabel('误差的平方');
title(' RLS学习曲线(50次平均)');
%grid on;
%plot([1:N], abs(averg))
figure
fai = [-90:90];
a = exp(-j * 2 * pi * d * k * sin(fai * pi / 180) / wl);
f = w' * a;
F = 10 * log10((abs(f) .^ 2));
plot(fai, F)
xlabel('空间角度'); ylabel('幅度(db)');
title('方向图 ');
figure;
i=1:500;%gailecishu
plot(i,10*log10(SINR));
xlabel('迭代次数');ylabel('信干比SNIR(dB)');