WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Effektiveres löschen von Zeilen

 

freeman213
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.03.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 28.03.2013, 09:57     Titel: Effektiveres löschen von Zeilen
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 28.03.2013, 10:36     Titel:
  Antworten mit Zitat      
Hi,

bestimmt doch erst deine Extremas:
Code:

Extremas = find(A>Schwellwert);
%dann lösche sie
ExPt(Extremas)=[];
 


Gruß und schöne Feiertage,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
freeman213
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.03.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 28.03.2013, 10:48     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Legrand
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 18.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 11:09     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
freeman213
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.03.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 28.03.2013, 11:18     Titel:
  Antworten mit Zitat      
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;
Private Nachricht senden Benutzer-Profile anzeigen
 
freeman213
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.03.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 28.03.2013, 11:22     Titel:
  Antworten mit Zitat      
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 :)
Private Nachricht senden Benutzer-Profile anzeigen
 
Legrand
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 18.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 11:52     Titel:
  Antworten mit Zitat      
ja klar, jetzt wo es da steht Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.