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)');