Bonjour,

Je dois faire un code qui me dit de combien bouger lorsque je ne suis pas centré mais il ne fonctionne pas.
Je ne vois pas pourquoi.
Voici mon code commenté :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci de votre aide