|
|
Effektiveres löschen von Zeilen |
|
freeman213 |

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 28.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 28.03.2013, 09:57
Titel: Effektiveres löschen von Zeilen
|
 |
|
 |
|
Hallo,
ich bin mit Matlab noch ein relativer Anfänger und bin da jetzt auf ein Problem gestoßen, dass ich alleine bzw. mit Hilfe der Suche nicht lösen kann.
Im Rahmen von einigen Messaufgaben fällt bei mir eine große Menge von Messpunkten an (>10^6) die ich mit Matlab auswerten möchte.
Gemessen wird von mir eine Schwingung, aus der ich die einzelnen, relativen Extremwerten suche und in einem Vektor abspeichere. Im Anschluss wird dieser Vektor dann auf ungewollte Extrempunkte durchsucht und deren Position in einem Störstellenvektor abgespeichert.
Problematisch ist jetzt für mich das entfernen der Störstellen aus dem Vektor mit den Extremwerten, da dies unglaublich lange dauert.
Mein Code hierfür ist:
% A = Störstellenvektor
% ExPt = Vektor mit Extremwerten
A(1,:)=[];
% Spalten (Werte aus A) aus den Extremwerten entfernen
A=flipud(A);
for i=1:length(A)
ExPt(A(i),:)=[];
end
Ich bin relativ sicher, dass es einen eleganteren (und vor allem schnelleren) Weg gibt, wie man dies angehen kann und hoffe dabei auf eure Hilfe!
Vielen Dank im Voraus
Christian
|
|
|
|
|
Vito |

Forum-Guru
|
 |
Beiträge: 315
|
 |
|
 |
Anmeldedatum: 02.11.09
|
 |
|
 |
Wohnort: Stuttgart
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.03.2013, 10:36
Titel:
|
 |
Hi,
bestimmt doch erst deine Extremas:
Gruß und schöne Feiertage,
Vito
|
|
|
freeman213 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 28.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 28.03.2013, 10:48
Titel:
|
 |
Die Extremas habe ich bereits bestimmt. Diese befinden sich in dem Vektor ExPt. Der Vektor A enthält die Positionen der Fehlstellen in ExPt, die gelöscht werden sollen
|
|
|
Legrand |

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 18.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.03.2013, 11:09
Titel:
|
 |
Vielleicht wäre es gut, wenn du noch schreibst wie du das ganze einliest und von was deine Fehlstellen abhängen.
Ggf. kann man im Einleseschritt schon eine Abfrage machen.
|
|
|
freeman213 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 28.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 28.03.2013, 11:18
Titel:
|
 |
|
 |
|
ok. das wird dann aber jetzt lang...
%% Einlesen der Messdaten
% Vibrometer
import = importdata('........\Musterbau_mit Schweissung.txt');
data_vib = import.data;
n = length(data_vib);
t=data_vib(:,1); % Generierung eines Geschwindigkeitsvektors
v=data_vib(:,2);
%% Filterung der Messdaten
% Vibrometer
fs= 1/(data_vib(2,1)-data_vib(1,1)); % Abtastrate
%Tiefpassfilter
f_tp=200000; % Grenzfrequenz Tiefpass
[b a] = butter(5,f_tp/(fs),'low'); % Koeffizienten der Übertragungsfunktion, f_tp ist die Grenzfrequenz, fs die Abtastfrequ., Butterworthfilter
v_tp = filter(b,a,v); % v ist das Signal
%Hochpassfilter
f_hp=2000; % Grenzfrequenz Hochpass
[b a] = butter(5,f_hp/(fs),'high'); % Koeffizienten der Übertragungsfunktion, f_tp ist die Grenzfrequenz, fs die Abtastfrequ., Butterworthfilter
v_hp = filter(b,a,v_tp); % v ist das Signal
%% Auswertung der Vibrations-Messdaten
% Initialisierung der Arrays
ExPt = [0 0];
% Berechnung der Extremwerte aus den gefilterten Messdaten
vzw = diff(sign(diff(v_hp)));
relExX = t(vzw ~= 0);
relExY = v_hp(vzw ~= 0);
ExPt = [ExPt; relExX,relExY];
ExPt(1,:) = [];
for x=1:2
i=1;
A=0;
while (i < length(ExPt)-1)
k=i;
B = 0;
% Aussortieren von "falschen" Extremwerten:
% Identifikation von zwei aufeinanderfolgenden Maxima
if(sign(ExPt(k,2)) == 1 && sign(ExPt(k+1,2)) == 1)
% Erstellen eines Arrays der Problemstellen
while (sign(ExPt(k,2)) == 1 && sign(ExPt(k+1,2)) == 1)
B= [B;k];
if (k<=length(ExPt)-2)
k=k+1;
else
break;
end
end;
B= [B;k];
% Entfernen der Anfangsnull
B(1,:)=[];
% Identifizieren des gesuchten Maximums
k=1; % Iterationsvariable
maxi=1; % Zeile des gesuchten Maximums im B Vektor
C=ExPt(B(1),2); % Wert des gefundenen Maximus des B Vektors
for(c=1:length(B)-1)
if(C<ExPt(B(1+k),2))
C=ExPt(B(1+k),2);
maxi=1+k;
end;
k=k+1;
end
i=i+length(B);
% Entfernen des gesuchten Maximums aus dem B Vektor
B(maxi,:)=[];
% Anhängen der Stellen der "falschen Maxima" an den A Vektor
A=[A;B];
end;
B=0;
k=i;
% Identifikation von zwei aufeinanderfolgenden Minima
if(sign(ExPt(k,2)) == -1 && sign(ExPt(k+1,2)) == -1)
% Erstellen eines Arrays der Problemstellen
while (sign(ExPt(k,2)) == -1 && sign(ExPt(k+1,2)) == -1)
B= [B;k];
if (k<=length(ExPt)-2)
k=k+1;
else
break;
end
end;
B= [B;k];
% Entfernen der Anfangsnull
B(1,:)=[];
% Identifizieren des gesuchten Maximums
k=1; % Iterationsvariable
mini=1; % Zeile des gesuchten Minimums im B Vektor
C=ExPt(B(1),2); % Wert des gefundenen Minimums des B Vektors
for(c=1:length(B)-1)
if(C>ExPt(B(1+k),2))
C=ExPt(B(1+k),2);
mini=1+k;
end;
k=k+1;
end
i=i+length(B);
% Entfernen des gesuchten Minimums aus dem B Vektor
B(mini,:)=[];
% Anhängen der Stellen der "falschen Minima" an den A Vektor
A=[A;B];
end;
i=i+1;
end;
A(1,:)=[];
% Spalten (Werte aus A) aus den Extremwerten entfernen
A=flipud(A);
for i=1:length(A)
ExPt(A(i),:)=[];
end
end;
|
|
|
freeman213 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 28.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 28.03.2013, 11:22
Titel:
|
 |
bin gerade durch Zufall auf eine mögliche und gut funktionierende Lösung gekommen:
ExPt(A,:)=[];
Damit ist das ursprüngliche Problem von mir gelöst. Schön wenn es mal einfacher ist als erwartet :)
|
|
|
Legrand |

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 18.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.03.2013, 11:52
Titel:
|
 |
ja klar, jetzt wo es da steht
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|