salut à tous,
je suis sous matlab 6.5, je voudrais savoir comment on peut générer une matrice dont la taille va varier au cours de l'execution d'une boucle, explication:
je dispose d'un vecteur X représentant un signal, je veux faire une moyenne synchrone (sorte de filtre) pour récupérer les périodes stationnaires qui sont incluses dans X.
je lui demande donc de vérifier pour un f0 donné (par ex: f0=40HZ), si mon signal résultant n'est pas nul alors je peux dire que f0 existe bien dans X.
mon problème :
1/je veux faire varier f0 de 40Hz à 500Hz par pas de 0.01Hz.
2/je veux k'il me sélectionne trois vecteurs H,I et J qui seront les 3 fréquences les plus significatives dans mon signal.
3/le critère de sélection est le max de H,I, et J.
Comme vous pouvez le voir, H, I et J ont une taille qui va varier en fonction de la période Tb.
je cherche surtout à savoir comment pouvoir générer une matrice dont la taille va varier
Voici le script que j'ai ecrit:
%*********************initiali sation************************ ******
H=zeros(1,2500);%j'ai mis 2500 par défaut mais ça ne marche pas
I=zeros(1,2500);
J=zeros(1,2500);
a=max(abs(H));
b=max(abs(I));
c=max(abs(J));
v=[a b c];
V=sort(v); %mise en ordre croissant de v
MAX=max(v);
MIN=min(v);
%***************************dé but boucle***********************
for f0=40:10:500
Tb=round(fe/f0);
%début de la moyenne synchrone
for k=1:1:Tb
for i=0:1N-Tb)/(Tb)
Z(i+1)=X(k+i*Tb);
B(k)=mean(Z);
end
end
%fin de la moyenne synchrone
%***************************dé but des critères de comparaison******
if MAX==a & MIN==c
if max(abs(B))>MAX
H=[];
H=B;
elseif V(2)<max(abs(B))<MAX
I=[];
I=B;
elseif MIN<max(abs(B))<V(2)
J=[];
J=B;
end
elseif MAX==b & MIN==c
if max(abs(B))>MAX
I=[];
I=B;
elseif V(2)<max(abs(B))<MAX
H=[];
H=B;
elseif MIN<max(abs(B))<V(2)
J=[];
J=B;
end
elseif MAX==a & MIN==b
if max(abs(B))>MAX
H=[];
H=B;
elseif V(2)<max(abs(B))<MAX
J=[];
J=B;
elseif MIN<max(abs(B))<V(2)
I=[];
I=B;
end
elseif MAX==c & MIN==b
if max(abs(B))>MAX
J=[];
J=B;
elseif V(2)<max(abs(B))<MAX
H=[];
H=B;
elseif MIN<max(abs(B))<V(2)
I=[];
I=B;
end
elseif MAX==c & MIN==a
if max(abs(B))>MAX
J=[];
J=B;
elseif V(2)<max(abs(B))<MAX
I=[];
I=B;
elseif MIN<max(abs(B))<V(2)
H=[];
H=B;
end
elseif MAX==b & MIN==a
if max(abs(B))>MAX
I=[];
I=B;
elseif V(2)<max(abs(B))<MAX
J=[];
J=B;
elseif MIN<max(abs(B))<V(2)
H=[];
H=B;
end
end
end
%*************************grap hiques********************
axe_tH = (1:length(H))/fe;
axe_tI = (1:length(I))/fe;
axe_tJ = (1:length(J))/fe;
figure(1)
plot(axe_tH,H);
figure(2)
plot(axe_tI,I);
figure(3)
plot(axe_tJ,J);
merci beaucoup pour une quelconque aide!!
-----