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

Peaks aus Vektor ausschneiden und formatieren

 

Atmos_kk
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2011, 07:40     Titel: Peaks aus Vektor ausschneiden und formatieren
  Antworten mit Zitat      
Moin zusammen,

nicht das man mich falsch versteht, wie ich einen Peak aus einem Vektor ausschneide ist mir mitlerweile bekannt allerdings habe ich jetzt eine kleine Weiterentwicklung vor.

Ich habe einen Vektor mit Beschleunigungswerten, eher gesagt so an die 150.
In diesem Signal stecken 16 Peaks, jeweils 8 im positiven und negativen.
Diese sind weiterhin unterteilt in 4 hohe und je davor 4 niedrigere Peaks.
Wer es kennt, es ist eine Kantenanregung vom Pkw.

Besteht irgendwie die Möglichkeit, die hohen Peaks auszuschneiden in einen seoeraten Vektor zu packen, mit der Bedingung, dass jeweils 0,75s vor und 0,25s nach dem Signal die Werte mit ausgeschnitten werden und in den Vektor gepackt werden?

Greetz
Private Nachricht senden Benutzer-Profile anzeigen


Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2011, 08:52     Titel:
  Antworten mit Zitat      
Hallo,
ist bekannt, um welchen Faktor die hohen und/oder die mittleren Peaks über dem normalen Level liegen (eine Art SNR), also zumindest grob? Dann wäre es doch relativ einfach das Signal auf den Maximalwert zu normieren, mit find() heraus zu finden welche Peaks über dieser Schwelle liegen und dann so in der Art (i-3:i+1) (i ist die Stelle mit dem Peak, Zeitauflösung jetzt mit 0.25s angenommen) aus dem Vektor zu kopieren. Falls du das ganze mit abs() machst, dann erwischst du sowohl die positiven als auch die negativen.
Oder habe ich etwas falsch verstanden?
mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2011, 11:47     Titel:
  Antworten mit Zitat      
Ich weiss nicht ob ich dein Problem richtig verstanden habe, aber hier mein Vorschlag
sofern du findpeaks hast:
einfach nach den lokalen Maximas suchen,
Zusatzoption minpeakhight vorgeben damit MATLAB nur Peaks oberhalb der vorgegebenen Grenze findet ,
dabei die Stellen der Maximas mitfesthalten
und dann in einer Schleife vorgeben dass MATLAB für jeden Eintrag der Peaksvektor ein Segment aus deinem Zeitsignal ausschneiden soll.

Je nach dem ob es wichtig ist ob die lokale Maximas negativ oder positiv sortiert sein müssen, kannst du den Betrag des Vektors nehmen oder den Vorgang 2 mal durchführen (negative Werte und positive Werte)
so könnte es aussehen
Code:


data = rand(1,1000)
Limit1= 5; Limit2 = 10;
MPH = 0.9;
[pks, locs] = findpeaks(abs(data),'minpeakheight',MPH)

 for k=1:size(locs,2)
segment(:,k) = data(((locs(k))-Limit1):(locs(k)+Limit2));
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Atmos_kk
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 10:08     Titel:
  Antworten mit Zitat      
Hallo zusammen,

entschuldigt, dass ich mich so spät melde.
Ich werde mal alles Chronologisch abarbeiten:

ist bekannt, um welchen Faktor die hohen und/oder die mittleren Peaks über dem normalen Level liegen (eine Art SNR), also zumindest grob?

Nein, das ist leider nicht bekannt!

Nun zum Vorschlag von Kia:

Ich habe findpeaks und die Idee ist genau der richtige Ansatz.
Allerdings bin ich anscheinend zu doof um das fertig zu stellen.
Das Momentane Problem liegt darin, dass ich kein Signal habe mit nur 4 sauberen Peaks. Ich habe eine Frequenz von 4096 bei der Messung und somit bei einem MPH=10 schon 81 Peaks die aufgenommen werden!
Das sind leider 77 zu viel.

Ich versuche mein Problem noch mal zu konkretisieren!

Bei meiner Messung haben wir Schwingungen aufgenommen, es gibt 4 Anregungen, 2 große und 2 kleine. Das System schwingt stark nach und somit gibt es viele Peaks. Es handelt sich nicht um eine schöne Sinusschwingung.

Ich denke hier steckt die Schwierigkeit, da diese Ausschläge einen deutlichen Größenunterschied haben und die größeren Ausschläge viele Nachschwingungen haben mit dem selben Größenausschlag wie bei den kleinen Anregungen.

Das heißt, ich benötige klar differenzierte Ausschnitte aus meinen Messungen.
Meine Idee geht in die Richtung, dass man irgendwie sagen muss, es werden 4 Maximas gesucht, suche nach dem 1., schneide jeweils 1 Sekunde vorher und 1 Sekunde nachher ab und stecke diese in einen neuen Vektor. Dann such weiter nach dem nächsten Maximum und mach das Selbe, etc. Ich weiß, dass das mit Matlab lösbar ist, denn Matlab kann alles, allerdings bin ich wirklich ein Einsteiger und auf Hilfe angewiesen.

Greetz
Private Nachricht senden Benutzer-Profile anzeigen
 
Atmos_kk
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 10:09     Titel:
  Antworten mit Zitat      
Hallo nochmal,

vielleicht auch wichtig, ich benötige als neuen Wert meine Zeit und Beschleunigungswerte als Ausgabe in einen neuen Vektor (Matrix).
Kam vielleicht bisher nicht so rüber!
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 10:19     Titel:
  Antworten mit Zitat      
Hi,
naja so 100% kann ich mir deine Schwingungen leider nicht bildlich vorstellen?
kannst du vielleicht ein Plot von deinen SChwingungen hier hochladen oder ggf. den Messvektor?
Private Nachricht senden Benutzer-Profile anzeigen
 
Atmos_kk
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 10:27     Titel:
  Antworten mit Zitat      
Hi,

Kann dir die Messmatrix geben. Spalte 1 ist die Zeit, Spalte 2 die Beschleunigung. 1=x, 2=y

Bin allerdings dann doch schon etwas weitergekommen. Ich bekomme jetzt die 4 Maximas indem ich noch den Vergleich mit den nebenstehenden Daten mit einbezogen habe , minpeakdistance , allerdings fehlt mir jetzt noch die Zuordnung zu meinem Zeitvektor und das Ausschneiden und einbinden der Maximas in einen neuen Vektor{neue Matrix}!

3.txt
 Beschreibung:

Download
 Dateiname:  3.txt
 Dateigröße:  2.12 MB
 Heruntergeladen:  599 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 14:42     Titel:
  Antworten mit Zitat      
also wenn du deine Peaks hast dann kannst du doch die zuordnen. ich habe ja da oben geschrieben wie man Stellen, an denen diese Peaks sind bestimmen kann (locs) und diese Stellen sind diesselbe in deinem Zeitvektor
Du definierst dann eine untere und eine obere Grenze, d.h. viele Messwerte vor dem Peak und nach dem Peak zu deinen einzelnen Ausschnitten gehören und erstellst dann anhand einfacher Schleife für jeden Ausschnitt einen Vektor. Entsprechend kann geht man auch für Zeit vor!

Das zusammenführen der Vektoren kriegst du wahrschleich auch allein hin oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Atmos_kk
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 15:15     Titel:
  Antworten mit Zitat      
Hi Kia,

absolut recht haste, habe das aber jetzt etwas anders gelöst, da ich diesen ganzen Schleifenkram nicht so gut leiden kann.

Wenn du eine Vereinfachung siehst bin ich für jeden Tipp dankbar und auch gerne mit Dokumentation.

Habe noch ein weiteres Problem jetzt bekommen, beim laden der rohdaten 2 und rohdaten 3 bekomme ich die ehlermeldung Internal size mismatch. Weißt du worauf sich das bezieht?
Also die 3 Datensätze liegen nicht im selben Ordner und ich arbeite im Ordner der Datei zu rohdaten1!


Greetz


Code:

%   .txt-Datei in Matlab einlesen ( Matrixform )
 
rohdaten1=dlmread('C:\Users\Norman\Desktop\LMS txt von KW15\01_white_20kmh_1\a3.txt', '\t', [23 0 68563 1]);                           % Einlesen von Zeile 23 Spalte 1 bis Zeile 68563 Spalte 2; C:\Users\Norman\Desktop\LMS txt von KW15\01_white_20kmh_1; vorne weg die Angabe der aufzurufenden Datei, im Arbeitsordner liegen haben, ansonsten muss der komplette Pfad angegeben werden.
 
rohdaten2=dlmread('C:\Users\Norman\Desktop\LMS txt von KW15\01_white_20kmh_2\aa3.txt', '\t', [23 0 68563 1]);
 
rohdaten3=dlmread('C:\Users\Norman\Desktop\LMS txt von KW15\01_white_20kmh_3\aaa3.txt', '\t', [23 0 68563 1]);
 
%   Aufteilen in Zeit- u. Wertevektor
 
time1=rohdaten1(:,1);                                                         % (:,1)  Alle Zeilen, nur 1. Spalte
acceleration1=rohdaten1(:,2);                                                 % (:,2)  Alle Zeilen, nur 2. Spalte
 
% automatisches Erfassen der Peaks
 
data1=acceleration1;
 
MPH=10;
 
[pks1, locs1]=findpeaks((data1),'minpeakdistance',1000,'minpeakheight',MPH);
 
first1=[time1((locs(1,1)-3000):(locs(1,1)+1750),1),(acceleration1(locs(1,1)-3000:locs(1,1)+1750,1))];
 
second1=[time1((locs(1,2)-3000):(locs(1,2)+1750),1),(acceleration1(locs(1,2)-3000:locs(1,2)+1750,1))];
 
third1=[time1((locs(1,3)-3000):(locs(1,3)+1750),1),(acceleration1(locs(1,3)-3000:locs(1,3)+1750,1))];
 
fourth1=[time1((locs(1,4)-3000):(locs(1,4)+1750),1),(acceleration1(locs(1,4)-3000:locs(1,4)+1750,1))];
 
%   FFT für first1 ( nach Skript_Matlab_Simulink mit Hanning )
 
t1=first(:,1)';                                                             % Zuweisung der Vektoren für die erleichte-
x1=first(:,2)';                                                             % rung der FFT-Formel
 
T1=diff(t1(1:2));                                                           % Hier wird die Abtastzeit berechnet (aus dem Zeitvektor die Differenz von Zeile 1 zu Zeile 2)
N1=length(x1);                                                              % Bestimmung der Länge des Datenvektors
f1=(0:(N1-1)/2)/(N1*T1);                                                    % Frequenzvektor für den Plot
 
H1=fft(hann(N1)'.*x1);                                                      % Fouriertransformation
H1=abs(H1/N1);                                                              % Normierung
H1=[H1(1) 2*H1(2:N1/2)];                                                    % Begrenzung auf < F_max
 
figure;
subplot(311);
    plot(f1(1:length(f1)-1),abs(H1),'r');
    xlabel('Frequenz[Hz]');
    title('Spektrum first1 FFT Matlab nach Hanning');
    axis([0 500 0 1.2])
    grid on;
 
%   FFT für second1 ( nach Skript_Matlab_Simulink mit Hanning )
 
t2=second1(:,1)';                                                            % Zuweisung der Vektoren für die erleichte-
x2=second1(:,2)';                                                            % rung der FFT-Formel
 
T2=diff(t2(1:2));                                                           % Hier wird die Abtastzeit berechnet (aus dem Zeitvektor die Differenz von Zeile 1 zu Zeile 2)
N2=length(x2);                                                              % Bestimmung der Länge des Datenvektors
f2=(0:(N2-1)/2)/(N2*T2);                                                    % Frequenzvektor für den Plot
 
H2=fft(hann(N2)'.*x2);                                                      % Fouriertransformation
H2=abs(H2/N2);                                                              % Normierung
H2=[H2(1) 2*H2(2:N2/2)];                                                    % Begrenzung auf < F_max
 
subplot(312);
    plot(f2(1:length(f2)-1),abs(H2),'r');
    xlabel('Frequenz[Hz]');
    title('Spektrum second1 FFT Matlab nach Hanning');
    axis([0 500 0 1.2])
    grid on;
   
%   Mittelwert der Vektoren first1 und second1
 
Grossmittel=(H1+H2)/2;
 
%   Plotten des Mittelwertes Grossmittel
 
subplot(313)
    plot(f1(1:length(f1)-1),abs(Grossmittel1),'r');
    xlabel('Frequenz[Hz]');
    title('Spektrum Großmittel1 FFT Matlab nach Hanning');
    axis([0 500 0 1.2])
    grid on;
   
%   FFT für third1 ( nach Skript_Matlab_Simulink mit Hanning)
 
t3=third1(:,1)';                                                             % Zuweisung der Vektoren für die erleichte-
x3=third1(:,2)';                                                             % rung der FFT-Formel
 
T3=diff(t3(1:2));                                                           % Hier wird die Abtastzeit berechnet (aus dem Zeitvektor die Differenz von Zeile 1 zu Zeile 2)
N3=length(x3);                                                              % Bestimmung der Länge des Datenvektors
f3=(0:(N3-1)/2)/(N3*T3);                                                    % Frequenzvektor für den Plot
 
H3=fft(hann(N3)'.*x3);                                                      % Fouriertransformation
H3=abs(H3/N3);                                                              % Normierung
H3=[H3(1) 2*H3(2:N3/2)];                                                    % Begrenzung auf < F_max
 
figure;
subplot(311);
    plot(f3(1:length(f3)-1),abs(H3),'r');
    xlabel('Frequenz[Hz]');
    title('Spektrum third1 FFT Matlab nach Hanning');
    axis([0 500 0 1.2])
    grid on;
   
%   FFT für fourth1 ( nach Skript_Matlab_Simulink mit Hanning)
 
t4=fourth1(:,1)';                                                            % Zuweisung der Vektoren für die erleichte-
x4=fourth1(:,2)';                                                            % rung der FFT-Formel
 
T4=diff(t4(1:2));                                                           % Hier wird die Abtastzeit berechnet (aus dem Zeitvektor die Differenz von Zeile 1 zu Zeile 2)
N4=length(x4);                                                              % Bestimmung der Länge des Datenvektors
f4=(0:(N4-1)/2)/(N4*T4);                                                    % Frequenzvektor für den Plot
 
H4=fft(hann(N4)'.*x4);                                                      % Fouriertransformation
H4=abs(H4/N4);                                                              % Normierung
H4=[H4(1) 2*H4(2:N4/2)];                                                    % Begrenzung auf < F_max
 
subplot(312);
    plot(f4(1:length(f4)-1),abs(H4),'r');
    xlabel('Frequenz[Hz]');
    title('Spektrum fourth1 FFT Matlab nach Hanning');
    axis([0 500 0 1.2])
    grid on;
 
%   Mittelwert der Vektoren third1 und fourth1
 
Kleinmittel1=(H3+H4)/2;
 
%   Plotten des Mittelwertes Kleinmittel
 
subplot(313)
    plot(f3(1:length(f3)-1),abs(Kleinmittel1),'r');
    xlabel('Frequenz[Hz]');
    title('Spektrum Kleinmittel1 FFT Matlab nach Hanning');
    axis([0 500 0 1.2])
    grid on;
 
 


 
Private Nachricht senden Benutzer-Profile anzeigen
 
Atmos_kk
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 10:26     Titel:
  Antworten mit Zitat      
Moin zusammen,

soweit hab ich alle Probleme gelöst aber falls jemand Zeit und Lust hat das alles etwas zu vereinfachen und schöner zu gestalten, einfach machen.

Also jetzt ohne Spass, ich bin froh, dass es so erstmal funktioniert aber wer es besser kann oder andere Tipps hat immer her damit. Ich will halt dazulernen.

Greetz
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.