kalman滤波在不同信噪比时的误码率matlab仿真程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档