Je suis noob et j'ai trouvé des informations très fragmentées sur la pile sur Slinding Window.Trouble Comprendre Fenêtre coulissante pour une colonne d'une matrice, cas général et spécifique dans Matlab
J'ai une matrice mXn, où m est fixe (latitude, longitude, ax, ay, az), n pourrait changer de différents journaux.
1) Comment puis-je créer une fenêtre glissante uniquement pour az sans extraire le vecteur, puis l'analyser? 2) Si je veux sauvegarder toutes les lignes où l'écart-type az dépasse un seuil défini, comment puis-je faire cela?
3) Si la longueur des journaux n'est pas fixe, comment puis-je gérer cela? (Ex. Un fichier contient 932 lignes, un autre 953)
4) Je lis beaucoup de questions, je suis en train d'étudier comment bsxfun fonctionne dans ce cas, mais il est très clair pour moi (in this examples je n'undestood que une nouvelle matrice est créée, basée sur la taille de la fenêtre, puis la nouvelle matrice est analysée) (cette dernière question est fortement liée à ma formation ingénieur civil)
Voici ce que j'appris, et a essayé de regrouper. Sliding Window est un outil puissant qui permet d'analyser un signal ou une image. Lorsque j'ai essayé de décrire ma copine ce que je faisais je l'ai expliqué « est comme lire un livre avec une loupe, la loupe a une dimension définie et vous analysez le texte »
La base chemin sur Matlab, pas la plus efficace, de le faire est
1. Définissez vos dimensions de vecteur
2. définiriez-vous wi dimension Ndow
3. Définir le nombre d'étapes
Voici un exemple de base que je l'ai écrit
a= randi(100,[1,50]); %Generic Vector
win_dim=3; %Generic window size
num_stps=(length(a)-win_dim) %number of "slides", we need to subtract win_dim to avoid that the window will go over the signal
threshold= 15 %Generic number only for the example
for i= 1:num_stps
mean_win(i)=mean(a(i:i+win_dim -1); %we subtract 1 or we make an error, and the code analyzes a segment bigger than one unit
std_win(i)=std(a(i:i+win_dim -1); %example for i=2 if we don't subtract 1 our segment starts from 2 until 5, so we analyze
% 2 3 4 5, but we defined a window dimension of 3
If std_win(i)> threshold
std_anomalies=std_win(i) %here i think there is an error
end
De cette façon, les diapositives de code sur la totalité du signal, mais les fenêtres se chevauchent . Comment décider du "taux de chevauchement" (ou de l'incrément de glissement)?
Nous pouvons définir ceci comme "combien d'informations deux fenêtres adjacentes partagent-elles?" Les examplei suivants ont fait est complètement faux, mais j'ai essayé de code quelque chose avant de demander ici, le but aurait aimé être un chevauchement pour La moitié du segment ou pas de chevauchement
%Half segment overlap
a= randi(100,[1,20]); %Generic Vector
win_dim=4; %generic window size
%v is the increment vector in our case we desire to have 50% of overlap
l= win_dim
if l%2==0
v=l/2
else
v=(l+1)/2
end
for i= 1:num_stps
if (i==1)
mean_win(i)=mean(a(1:1+win_dim -1);
else
mean(i)= mean(a (i+v:i+win_dim+v-1);
end
J'ai besoin d'éclaircissements. Vous choisissez 'Nan' pour initialiser le vecteur std_vector? Pourquoi? Est-ce la première fois que je vois double ':' comment ça marche? Je vois toujours un seul Comment puis-je sauvegarder toutes les lignes dans la fenêtre qui ont l'élément (i, 5) qui satisfait la relation d'inégalité, pas seulement l'élément unique? Tnx pour votre temps et désolé pour mes questions stupides <3: D –
Il n'y a pas de valeurs disponibles pour les lignes données, donc NaN est le choix le plus logique pour moi. Et il est plus facile de tester le seuil. Pour le côlon, voir ici: https://fr.mathworks.com/help/matlab/ref/colon.html. J'ai édité la réponse pour obtenir tous les numéros de rangée dans les groupes. Je recommanderais de lire la documentation et d'essayer un peu par vous-même, c'est la seule façon d'apprendre correctement. –
Comment puis-je utiliser dans mon cas 'bsxfun (@ plus' pour une fenêtre glissante, comme dans cet exemple [link] (https://stackoverflow.com/questions/7099590/how-do-i-select-n-elements -of-a-sequence-in-windows-of-m-matlab)? –