kalman滤波在不同信噪比时的误码率matlab仿真程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-20-15-10-50510152000.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
Kalman滤波器在matlab仿真程序下的不同信噪比时的误码率:
%multiuser_dectect.m
clc;
clear all;
hold on
BER_sum=zeros(1,13);%设定求和误码率的零矩阵;
BER_ave=zeros(1,13); %设定平均误码率的零矩阵;
for m=1:10;%m的长度为1到10 间隔为1;
snr_in_db=-20:3:16;%定义信噪比的长度为-20到16 间隔为3;snr_in_db是信噪比用db表示
for i=1:length(snr_in_db);%i的长度为1到信噪比的长度
BER(i)= Kalman_S1(snr_in_db(i));%卡尔曼的误码率函数;
end
BER_sum=BER_sum+BER;%误码率求和的算法
end;
BER_ave=0.1* BER_sum ; %误码率平均值的算法
semilogy( snr_in_db,BER_ave,'rd-');%y轴维数坐标图定义横坐标为信噪比,纵坐标为误码率;
%Kalman_S1.m
%Kalman algorithm
%synchronous CDMA同步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),sqr t(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb)];
K=length(A);
step=1000;%阶跃响应指令迭代1000次
N=31;%扩频增益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);