Interference suppression in DSSS(Direct sequence spread spectrum) using kalman filter
2 次查看(过去 30 天)
显示 更早的评论
I have written this code for interference suppression in direct sequence spread spectrum using the kalman filter.
please guide me what is the problem in my code that how can i get the desire result.
clc
clear all
close all
% Generating the bit pattern with each bit 8 samples long
b=round(rand(1,2000));
pattern=[];
for k=1:200
if b(1,k)==0
sig=zeros(1,10);
else
sig=ones(1,10);
end
pattern=[pattern sig];
pattern1=pattern';
len=length(pattern1);
end
plot(pattern1);
axis([-1 2020 -.5 1.5]);
title('\bf\it Original Bit Sequence1');
%%%Generating pseudorandom binary sequence
%%
seq = ltePRBS(1,len)';
seq(1:len);
len1=length(seq);
figure
stairs(seq);
axis([-1 2000 -0.5 1.5]);
title('Pseodu random pattern');
%Multiplaying the pseudo sequence and massage signal
bbs=zeros(1,2000);
for i=1:len
bbs(:,i)= pattern1(i).*seq(i);
end
figure
stairs(bbs,'linewidth', 2);axis([-1 2000 -.5 1.5]);
title('Pseodu random pattern*bit sequence');
% Generating noise
noise1=sqrt(0.1)*randn(1,2000);
figure
plot(noise1);
axis([-1 2020 -1.5 1.5]);
title('Noise');
%Generating the interference
phi1=1.98;
phi2=-0.9801;
samples = 2000;
e = randn(1,samples); % e(k)=white gaussian noise with variance 0.01
v = var(e); % check variance
v_target = 0.01;
amp = sqrt(v_target/v); % compute amplitude factor correction to get target variance
e = e*amp;
v = var(e) % now we have the correct variance
% init I
I(1) = e(1); % ....i(-1),i(-2)......<0 are equal to zero
I(2) = phi1*I(1)+ 0 +e(2);
% main loop
for k=3:samples
I(k) = phi1*I(k-1)+phi2*I(k-2)+e(k);
end
figure
plot(I)
title('correlated interference');
%adding noise interference and pseudo sequence to get the resultant signal
z=noise1+bbs+I;
figure
plot(z)
title('desired signal');
%%
%APPLY THE CONDITION
phi=[1.98 -0.9801
1 0];
sig_u=0.01;
Q=[sig_u 0
0 sig_u];
M(:,:,1)=2000*eye(2);% M[-1,-1]
H(:,:,1)=[1 0];
sig_w=0.1; % variance
%I_post(:,1)=[0;0]; %I[-1|-1]
I_post=zeros(2,2000);% h[n|n]
I_pre=zeros(2,2000); %h[n|n-1]
M=zeros(2,2,2000); %M[n|n]
M_pre=zeros(2,2,2000);
K = zeros(2,1,2000);
for k=1:2000
if (z(k)-I(k)+1).^2>=(z(k)-I(k)-1).^2;
bbs(k)=1;
elseif (z(k)-I(k)+1).^2<(z(k)-I(k)-1).^2;
bbs(k)=-1;
else
bbs(k)=0;
end
I_post(:,k)=z(k)-bbs(k);
%apply the kalman fiter
I_pre(:,k)=phi*I_post(:,k);
M_pre(:,:,k)=phi*M(:,:,1)*phi'+Q;
%apply thekalman gain
K(:,:,k)=((M_pre(:,:,k)*H')/((sig_w)+H*M_pre(:,:,k)*H')).^1;
%Minimam correctin MSE
I_post(:,k)=I_pre(:,k)+K(:,:,k)*(z(:,k)-H*I_pre(:,k));
%Minimam correction
M(:,:,k)=(eye(2)-K(:,:,k)*H)*M_pre(:,:,k);
end
figure
plot(bbs)
axis([-1 2000 -1.5 1.5]);
title('subtrated sequence');
SINR=zeros(1,2000);
SINR1=zeros(1,2000);
SINR2=zeros(1,2000);
for k1=1:1000
SINR(:,k1)=sum(bbs(k1)^2)/sum(mode(z(k1)-bbs(k1)^2));
del(:,k1)=z(k1)-H*I_post(:,k1);
%output SINR
SINR1(:,k1)=sum(bbs(k1)^2)/sum(mode(del(k1)-bbs(k1)^2));
%SINR improvement
SINR2(:,k1)=sum(mode(z(k1)-bbs(k1)^2))/sum(mode(del(k1)-bbs(k1)^2));
end
figure
t=20*log10(SINR);
hold on
t1=20*log10(SINR2);
hold off
%plot(t,t1)
plot(t,t1)
%axis([-20 -5 10 60]);
how can i get the result in fig given below by using above code.please guide me.
0 个评论
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Digital Filter Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!