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

Mustererkennung in 2 Signalen

 

WhiteShadow
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 31.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2012, 21:30     Titel: Mustererkennung in 2 Signalen
  Antworten mit Zitat      
Hallo alle zusammen,

ich hoffe Ihr könnt mir bei einem kleinen Problem helfen. Und zwar habe ich 2 Signale gegeben. Nun gibt es im ersten Signalen einen Bereich der recht ähnlich ist, wie im anderen Signal aber bei verschiedenen Zeitpunkten liegen. Ca. 1/50 Länge vom Gesamtsignal.

Meine Ideen um diesen Bereich zu erkennen:

1.
Zuerst dachte ich an Kreuzkorrelationsfunktion, aber die bewertet mir ja nur die Signale als Ganzes und sagt mir leider nicht, welcher Bereich in den 2 Signalen WO Ähnlich sind, oder liege ich hier falsch?

2.
Meine 2te Idee. Ich verschiebe das 2te Signal einfach immer nach links/rechts und subtrahiere das 2te vom 1ten Signal. Dabei sollte bei den Ähnlichen Bereichen ein Minimum entstehen.
Also wenn ich mir dieses entstehende Signal in Matlab plotten lasse, kann ich es recht gut erkennen mit freiem Auge, nur WIE könnte ich das mathematisch noch herausfinden. Ich meine, Mittelwert über das gesamte Signal und schauen, ob der Bereich unterm Mittelwert liegt ist ein nicht sehr guter Ansatz. Was könntet Ihr da empfehlen. Ich würde diesen Bereich (StartIndex - EndIndex) vom ersten und zweiten Signal benötigen

3.
Oder habt Ihr eine performantere Idee wie man ein Muster erkennen könnte was sehr schnell geht?

Wäre über jede Idee dankbar Smile.

lg
Private Nachricht senden Benutzer-Profile anzeigen


WhiteShadow
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 31.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2012, 17:45     Titel:
  Antworten mit Zitat      
So,

Ok, also das mit dem subtrahieren brachte keinen Erfolg. Das gesamte Signal ist doch zu ähnlich um daraus was zu erkennen. Die Signale sind ziemlich gut aligned mit der KKF.

Im Signal gibt es 1 Pattern, dass ich erkennen will/muss (ziemlich am Anfang). Mit dem Auge kann man es relativ gut erkennen weil es das einzige markante Signal is das nur einmal vorkommt. Aber mathematisch steh ich gerade an. Ich will das ein wenig verallgemeinern.

Meine Idee: Autokorrelation (das Signal mit sich selbst korrelieren) und daraus was erkennen...

Habt Ihr vlt andere Ideen? Wäre wirklich über jede Hilfe froh Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 09:32     Titel:
  Antworten mit Zitat      
Hallo WhiteShadow,

wie sieht denn der Bereich deines Signals aus, der nicht mit dem 2. Signal "übereinstimmt". Ist das hauptsächlich Rauschen oder liegt da auch Signal vor, nur sieht es eben anders aus als die 2. Kurve? Wenn es hauptsächlich Rauschen ist, dann könntest du evtl. mit der FFT arbeiten und die Phase als Verschiebung des Signals benutzen (bin mir allerdings nicht sicher, ob das wirklich so klappt, wie ich mir das jetzt vorstelle).
Eine sehr sehr langsame Methode wäre natürlich auch, wenn du einfach die KKF von allen (möglichen) Abschnitten des Signals 1 mit dem Signal 2 berechnest und dir da den größten Wert heraussuchst. Gerade bei langen Signalen wird das aber sicher eine sehr lange Berechnung...
mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Kevin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 18.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 11:15     Titel:
  Antworten mit Zitat      
Hi,
da ich nicht weiß, wie die Signale aussehen, kann ich jetzt auch nur völlig allgemein antworten.
So weit ich das Problem verstehe musst du eine Kurvendiskussion der Daten durchführen und dann die Ergebnisse in erlaubte und verbotene Parameter sortieren (also das Programm mach das). Auch die Integrale zwischen den Nullstellen sind oft aussagekräftig.
Wenn du dein Signal mal als Plot hochlädst, kann ich mir vielleicht vorstellen, worauf du hinaus willst und spezieller antworten.
Gruß
Kevin
_________________

1000 Buchstaben? Warum nur 6?
Private Nachricht senden Benutzer-Profile anzeigen
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 07.03.2012, 14:44     Titel:
  Antworten mit Zitat      
Hi,

eine Möglichkeit ist, die Signale durch Teilbereichs-Betrachtung zu analysieren. Beispielsweise liegen zwei vektoren mit den Signalen vor, Länge z.B. 1000
Mittels reshape dann 50 Teilsegmente á 20 Werte erzeugen.
Man hat jetzt 2 Matrizen mit 50 Spalten und 20 zeilen.

Korrelationskoeffizient zwischen den einzelnen Spalten der beiden Matrizen berechnen. Man erhält eine Matrix mit 50 Zeilen und 50 Spalten, die symmetrisch zur Hauptdiagonalen ist. Jetzt nach dem abs. Maximum suchen. Wenn das in Zeile N und Spalte M liegt, dann korreliert der N-te Abschnitt des einen Signals mit dem M-ten Abschnitt des 2. Signals.

Diese beiden Teilsegmente rechts und linken mit Nullen auffülen und mittels Kreuzkorrelation die genaue verschiebung berechnen.

Wie du schon gesagt hast: Die Korrelation erfolgt global. Daher könntest Du evtl. mit einem Wavelet-Ansatz versuchen, die partielle Ähnlichkeit in Abschnitten zu ermitteln.

Grüße
Andreas
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 29.03.2012, 16:47     Titel:
  Antworten mit Zitat      
Hallo Andreas,

dein Ansatz würde mich auch interessieren, doch leider weiß ich nicht wie ich das Umsetzen müsste.
Hast du da was, was in die Richtung gehen würde?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 30.03.2012, 13:48     Titel:
  Antworten mit Zitat      
Hi,

die "Segmentierung" kann relativ einfach mit Hilfe der Matlab-Funktion "reshape" erfolgen.
Die einzelnen Spalten können dann mit dem Befehl
corrcoef korreliert werden.
Man erhält dann eine symmetrische Diagonalmatrix mit Einsen auf der Hauptdiagonale.
Die Indices des Matrixelements mit größtem Wert ausserhalb der Hauptdiagonalen kennzeichen die Kurvensegmente, die am ähnlichsten zueinander sind.

Viele Grüße
Andreas
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 - 2024 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.