📄 kalman_s1.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 + -