⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kalman_s1.m

📁 我整理的基于卡曼滤波的盲多用户检测程序
💻 M
字号:
%Kalman_S1.m
%Kalman algorithm
%synchronous CDMA
%channel: White Gaussis Noise

function [p] = Kalman_S1(snr_in_dB)
SNR=10^(snr_in_dB/10);   %信噪比由dB形式转化 
sgma=1;                  % noise standard deviation is fixed 定义方差
Eb=sgma^2*SNR;
A=[sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb)];   
K=length(A);
step=1000;
N=31;
%**************************************************************************
S1=[1 1 1 1 1 -1 -1 -1 1 1 -1 1 1 1 -1 1 -1 1 -1 -1 -1 -1 1 -1 -1 1 -1 1 1 -1 -1];%a(n)=a(2)+a(-1)
S2=[1 -1 -1 -1 -1 1 -1 1 1 -1 1 -1 1 -1 -1 -1 1 1 1 -1 1 1 1 1 1 -1 -1 1 -1 -1 1];%a(n)=a(3)+a(2)+a(1)+a(-1)
for i=1:N
    SS(i,:)=(S1~=[S2(i:N),S2(1:i-1)]);
end
SS=SS*2-1;
S=SS(1:K,:);%K*N

C(1,:)=SS(1,:);
C(2:N,:)=rand(N-1,N)*2-1;
for i=2:N
    rou=C(i,:)*C(1:i-1,:).'./dot(C(1:i-1,:),C(1:i-1,:),2).';
   C(i,:)=C(i,:)-rou*C(1:i-1,:);
end
for i=1:N
   C(i,:)=C(i,:)/sqrt(dot(C(i,:),C(i,:)));
end

C_null=C(2:N,:);
%********************************************

    b=zeros(K,step);
    b=sign(rand(K,step)-0.5); 
    noiseN_step=randn(N,step);  % Noise
    noiseN_step=sqrt(10./SNR)*noiseN_step;
    for i=1:K
        Ab(i,:)=A(i)*b(i,:);
    end
    yN_step=(Ab.'*S).';
    yN_step=yN_step+noiseN_step;
%******************************
KK=eye(N-1);
w=zeros(N-1,1);
c=zeros(N,1);

%Kalman multiuser detection
for i=1:step
    d=C_null*yN_step(:,i);
    g=KK*d*(d'*KK*d+1)^(-1);
    KK=KK-g*d'*KK;
    yy=S(1,:)*yN_step(:,i);
    w=w+g*(yy-d'*w);
    c=S(1,:).'-C_null.'*w;
    
    y(i)=sign(real(c.'*yN_step(:,i))); 
end

p= length(find(y - b(1,:)))/length(y);


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -