Bonjour à tous!
je suis en étudiant en master de microélectronique et je dois réaliser un projet portant sur les filtres à particules.
L'ennui est que je n'y connais pas grand chose.
Le but final de ce projet serait de réussir à effectuer de la détection de mouvements sous matlab puis de l'implanter sur FPGA (en vhdl).
La programmation ne me pose pas vraiment de problèmes mais l'aspect mathématiques est très fort et j'ai du mal à comprendre le principe de ces filtres.
Un professeur m'a passé un bout de code qui filtre un signal sinusoïdal qui est préalablement bruité et depuis c'est débrouille toi! J'essaye mais si vous pouviez m'aider ce serait sympa. Voici le code:
J'ai bien compris la partie dite de prédiction qui compare un signal aléatoire à notre signal sinusoïdal.Code:function projet k2 = 1:100; x = sin(2*pi*1/100.*k2); % vrais valeurs subplot(2,2,1) plot(k2,x) b1= 0.1*randn(k2,1); x1= b1 + x; subplot(2,2,2) plot(k2,x1) N = 200; % 200 parts % init part X = zeros(N,1) ; % init autour de zero poids = zeros(N,1); Xest=zeros(k2,1); lambda = 10 ; for k=1:100; % Prediction b= 0.1*randn(N,1); X= X + b ; % observation (distance / vraie valeur) for p = 1:N d = sqrt((X(p) - x1(k))^2) ; poids(p) = exp(-lambda*d); end poids = poids ./(sum(poids(:))); Xest(k) = poids'*X; X = resample(X,poids); end plot(b) subplot(2,2,3); plot(k2,Xest); %%%%%%%%%%%%%%%%%%% function newPart=resample(Part,w) % Part : particules % w : poinds associe aux particules w=w./sum(w); wcum=cumsum(w); alea=rand(size(w)); wcum=wcum./wcum(end); d=0.*w; newPart=0.*Part; for i=1:size(w) z=find(alea(i)<wcum); ind(i)=z(1); newPart(i,:)=Part(ind(i),:); end
Par contre la fonction resample reste obscure...
Ce que j'essaye de faire en ce moment est acquérir une image, la bruiter, puis la filtrer avec l'algorithme précédent mais j'ai du mal à l'adapter (normal vu que je n'ai pas compris exactement ce qu'il fait!)
Merci d'avoir pris le temps de me lire. En espérant que quelqu'un puisse m'aider
-----