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

Steigung erkennen

 

MatLuk
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 05.12.13
Wohnort: Bielefeld
Version: R2013b
     Beitrag Verfasst am: 14.01.2014, 17:40     Titel: Steigung erkennen
  Antworten mit Zitat      
Hallo Hallo liebe goMatlab Foren Mitglieder,

ich habe mal eine Frage und zwar beschäftige ich mich im Moment mit der Frage, wie ich die im Bild gezeigte Grafik am besten auswerte.

Mein Ziel wäre es die Steigung der beiden Peaks zu erkennen. Mein Problem dabei ist, dass ich probieren möchte möglichst ohne Filter auszukommen.
Es handelt sich um eine .Wav Datei mit 22Hz daher hab ich leider extrem viele Datenpunkte, die ich jedoch für eine vorherige Frequenzanalyse brauche.

Meine bisherigen Ideen sind:

1. Filterung mittels und dann eine Runlength zählung
Code:

 VKf = filter (ones(1,256)/(256),1,VKf);
[b, n] = RunLength(VKf > mean(VKf));
result = sum(n > 50);
 


2. Nur jeden 100ten Wert nurtzen filtern und dann die steigenden Flanken erkennen.
Code:

VKf = Vkf (1:100:end);
VKf = sqrt (VKf.^2);
[b, n] = RunLength(VKf > mean(VKf));
result = sum(n > 50);
 


Die angefügte Datei zeigt 2 Peaks.
letztlich möchte ich gerne anhand der Steigungen erkennen, das 2 Peaks vorhanden sind. Mein großes Problem ist eigentlich, dass das Signal nicht konstant steigt. Sonst wäre das an sich kein Problem.

Hab ihr vielleicht ne Idee?

Danke schonmal

Picture.jpg
 Beschreibung:

Download
 Dateiname:  Picture.jpg
 Dateigröße:  91.29 KB
 Heruntergeladen:  419 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Headbucket
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.12.13
Wohnort: Dresden
Version: R2007B
     Beitrag Verfasst am: 15.01.2014, 10:00     Titel:
  Antworten mit Zitat      
Eine weitere Möglichkeit der Auswertung wäre z.B. die Berechnung eines gleitenden Mittelwertes der Amplituden.

Du legst somit ein Fenster aus z.B. 20 Werten fest und verschiebst dieses überlappend immer weiter nach rechts. Dadurch wird das Signal, wie durch einen Tiefpassfilter geglättet und du erhälst eine Anzahl von Werten, welche du wieder als Kurve darstellen kannst. Hier kannst du dann auch den Anstieg sowie die Anzahl der Peaks berechnen.

Ob das funktioniert muss man natürlich mit den realen Daten testen. Aber es wäre sicher eine schnell zu implementierende Methode.

Grüße
Headbucket
Private Nachricht senden Benutzer-Profile anzeigen
 
MatLuk
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 05.12.13
Wohnort: Bielefeld
Version: R2013b
     Beitrag Verfasst am: 15.01.2014, 11:46     Titel:
  Antworten mit Zitat      
Ich hab mal das Signal als .XLS Datei mit angefügt.
Also die Idee mit dem Gleitenden Mittelwert ist bei mir auch schonmal kurz aufgekommen.

Da hab ich folgendes gemacht:
Code:

Sig1 = sqrt(Sig.^2);
mittel = mean(reshape(Sig1, 64, []));
plot (mittel);
newsig2 = filter (ones(1,64)/(64),1,mittel);
figure;
plot (newsig2);


B= length (newsig2); % Länge des Gesamtvektors
B = B';
D= ones(1,600);D =D*0.03;
Counter = 0;

imEvent = false;
anz = 600;

for i = 1:B-(anz-1)
    if all(D <= newsig2(i:i+anz-1))
    if imEvent
% sind bereits im Event: nichts zählen
        else
% sonst: zählen und setze status auf true
           Counter = Counter + 1;
            imEvent = true;
end
        else
            % wir sind nicht im Event
            imEvent = false;
end
end
 


letztlich zählt mein Counter hier auf 2, so wie er es auch soll.
Jedoch muss ich das ganze deutlich schneller hinbekommen und würde demnach auch ungerne eine for Schleife benutzen. Ebenfalls möcht ich möglichst eine löschung von Werten vemeiden, wenn möglich.

Hat jemand vielleicht noch eine gute Idee wie ich das schneller un Eleganter hinbekomme?

Das Problem ist letztlich auch, dass der Vektor den ich zur Erkennung eingesetzt habe ja nicht auf alle Peaks passt deswegen würde ich sehr gerne eher den Trend erkennen nur weiß ich nicht wie ich das anstelle.

Viele Grüße und Danke schonmal!

Signal.xls
 Beschreibung:
Signal

Download
 Dateiname:  Signal.xls
 Dateigröße:  2.57 MB
 Heruntergeladen:  368 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MatLuk
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 05.12.13
Wohnort: Bielefeld
Version: R2013b
     Beitrag Verfasst am: 16.01.2014, 13:29     Titel:
  Antworten mit Zitat      
Niemand eine Idee Smile?

Also letzlich muss ich ja nur irgendwei einen schnellen Vergleicher Implementieren.

Sprich wenn 10.000 von den letzten 12.000 Werten hochgezählt wurde dann Counter+1

Liebe Grüße
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.