1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| n = 1.4 ; % valeur de l'interfrange fixe (dépend de la puce)
p = 50 ; % pas de l'acquisition en micromètres
t = input('Rayon du wafer = ') ; % demande la valeur du rayon du wafer et la renvoie
v = input('Vitesse du spindle = ') ; % demande la valeur de la vitesse de rotation du spindle et la renvoie
v = v*2*pi/60 ;
A = v*10^-3/(n*10^-6) ; % calcul de la pente théorique de la courbe fd = f(R) avec fd fréquence doppler associée à un cercle concentrique
disp (['La valeur de la pente = ' num2str(A)]) ;
% Définition des valeurs d'intervalles
inte = input('Valeur de inte =');
p = input('Valeur de p = ');
% Ajout du sous-dossier des fonctions du mapper et des fonctions communes
current_path = cd;
addpath(genpath(current_path));
% Recherche des données à traiter et Recherche des paramètres
[Params] = Mapper_Param();
% Creation des dossiers de résultats
[~,~,~]= mkdir('images');
[~,~,~]= mkdir('signals');
[~,~,~] = mkdir(strcat('E:\Commun Vélociraptor\Matlab\Reader Guillaume\Test sur signaux moyennés\signals\',Params.Name_fold));
% Ouverture des pools pour parralélisation
% if matlabpool('size') == 0
% matlabpool open
% end
% Recherche du nombre de tours (on recherche le nombre de channels 0 présentes
% exploration du dossier ciblé
Params.N_N_tours = size(dir(strcat(Params.pathname,'/*Ch0*.bin')),1);
% Initialisation de la matrice de résultats
Results = zeros(Params.N_N_tours,Params.D_Enc);
timing = zeros(1,Params.N_N_tours);
fd = zeros(Params.N_N_tours,1); % initialisation de la matrice de résultats pour les fréquences
Rayons = zeros(Params.N_N_tours,1); % initialisation de la matrice de résultats pour les rayons
tic
for i = 1:10%Params.N_N_tours
bla = tic;
% Mise à jour du tour dans le fichier de paramètres des variables du
% tour
i
Params.tour.i = i-1;
Params.tour.R = Params.D_R_init - (i-1)*Params.D_step;
Params.tour.F_d = Params.tour.R*Params.D_V/(Params.D_i0);
% chargement des données du tour i
% SIG_tour correspond au signal brut du tour
% ENC_tour donne pour position de sample dans le tour le signal
% d'encodeur correspondant
[Donnes.SIG_tour,Donnes.ENC_tour,Params] = Mapper_DataLoad(Params);
Params.tour.N_Fdn = Params.tour.F_d/Params.tour.F_acq_tour; % Fréquence Doppler normalisée de ce rayon
% % Détection par vraisemblance du tour i
% [Results_V, Params] = Mapper_detection(Donnes,Params);
%Calcul de la transformée de Fourier pour un tour en entier
a = fft(Donnes.SIG_tour);
b = 10*log(abs(a)) ; % passage en log pour meilleure observation
% Tracé de la transformée de Fourier
hold on
plot(b,'g')
title('Fft de Donnes.SIG_tour')
xlabel('frequence')
ylabel('amplitude')
hold off
% Détection du pic et de la valeur intéressante en fréquence et retour
% de la valeur souhaitée
% si le rayon scanné est supérieur à cette valeur
% if Rayons > 0.025
[valP, indP] = max(a);%(0.3*10^6:0.8*10^6));
newfd = 0.3*10^6 + indP;
%else
% [valP, indP] = max(b(inte:inte+p));
% newfd = inte + indP;
% end
% faire une liste de toutes ces valeurs de fréquences
fd(i) = newfd ;
% conversion du "ième tour" en rayon
Rayons(i) = Params.tour.R;
% if Params.U_V_calc == 1
% % Sizing du tour i
% [Results_S] = Mapper_Sizer(Donnes,Params, Results_V(i,:));
% Results(i,:) = Mapper_Mise_en_Forme(Results_S,Params,Donnes);
% else
% Results_V = Results_V/255;
% Results(i,:) = Mapper_Mise_en_Forme(Results_V,Params,Donnes);
% end
% timing(i) = toc(bla);
% end
end
% tracé des fréquences doppler en fonction des rayons
hold on
plot(Rayons,fd,'b');
title('frequence doppler pratique = f (Rayon)');
xlabel('rayon cercle scanné');
ylabel('fréquence doppler pratique');
hold off
% récupération de l'équation de la courbe précédente sous forme d'un
% polynôme d'ordre 2 (terme en y^2)
indexmin = find(min(fd) == fd);
Rayonsmin = Rayons(indexmin);
fdmin = fd(indexmin);
indexmax = find(max(fd) == fd);
Rayonsmax = Rayons(indexmax);
fdmax = fd(indexmax);
p = polyfit(Rayons,fd,2);
% comparaison des termes de pente et d'ordonnée à l'origine avec la courbe
% théorique
if (p(1)~= 0 & p(2)~= A & p(3)~= 0)
% on doit bouger de tant -> problème comment savoir de combien on va bouger
%
disp([fdmin]) ;
disp([fdmin]/(3.4*10^8)) ;
disp([fdmin]*2.18*10^4 );
% renvoyer le décalage
%disp(['Le décalage en x est ' num2str(fdmin), 'Le décalage en y est ' num2str(fdmin/3.4*10^8), 'Le décalage en z est ' num2str(fdmin * 2.8*10^4)]);
else
disp(['We are at the center of rotation']);
end |
Partager