Menu

Matlab et les boucles [Fermé]

anonyme - 9 juin 2009 à 00:18 - Dernière réponse :  anonyme
- 9 juin 2009 à 10:07
Bonjour,


j'ai un petit problème avec les boucles :

for i=1:length(Y)
if Y<=-0.1
y(i,1)=1
else
y(i,1)=0
end
end

voilà la boucle. Elle a pour but de regarder quand la ligne i de Y (qui est l'amplitude d'un fichier wav issue d'un wavread) est inférieure à -0.1. Si c'est le cas, elle transforme ,dans une matrice y de même longueur, la ligne correspondante en 1 ou en 0 si la condition est réalisée de sorte à avoir une sorte de signal carré.

mais le problème c'est que Y comporte plus de 710000 points et je peux difficilement la rétrécir. Et à chaque boucle, la boucle me réecrit la matrice y qui fait 710000 points et donc ceci 710000 fois donc c'est interminable !!

J'arrive pas à trouver un moyen pour traiter les lignes une par une pour que la matrice Y soit examiner q'une seule fois

pouvez vous m'aider, pas me sortir un code, mais m'expliquer une autre façon de procéder

Merci
Afficher la suite 

5 réponses

ninouhhichem 201 Messages postés jeudi 21 mai 2009Date d'inscription 21 juin 2009 Dernière intervention - 9 juin 2009 à 00:45
0
Utile
slt
il faut affecté une valeur a "y"
0
Utile
1
je t'avoue que j'ai du mal à te suivre
ninouhhichem 201 Messages postés jeudi 21 mai 2009Date d'inscription 21 juin 2009 Dernière intervention - 9 juin 2009 à 01:09
il faut ecrire la langeur de y
si non ce prg ne peut pas executé

length(Y) =-0.1

for i=1:length(Y)
if length(Y) <=-0.1
y(i,1)=1
else
y(i,1)=0
end
end
0
Utile
1
je crois que je me suis mal fait comprendre,

je veux savoir si à la ligne i de Y, la valeur est infèrieure à -0.1
je veux pas savoir si la longueur de Y (710000 et des brouettes) est infèrieure à -0.1

mon programme s'exécute et marche, enfin du moins pour le début, mais vu qu'à chaque fin de boucle il me réécrit un vecteur de 710000 points, beh ça prend du du temps...

en gros est ce que matlab peut changer une valeur dans un vecteur sans le réécrire en entier?
aaaaaaaahhhhhhhhhh mais j'ai compris ce que tu m'as dit

for i=1:length(Y)
if Y(i,1)<=-0.1
A(i,1)=1
else
A(i,1)=0
end
end


voilà le bon code

mes excuses