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

Analoges Signal digitalisieren und vergleichen.

 

Jarrao90
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2016, 20:41     Titel: Analoges Signal digitalisieren und vergleichen.
  Antworten mit Zitat      
Hallo erst einmal !

Ich würde gerne ein analoges periodisches Signal einlesen und mit einem vorgegebenen Signal vergleichen.

Das Signal wird von einem Gerät erzeugt und ist je nach Konfiguration unterschiedlich, aber wiederholt sich. Ich habe das Signal so gewählt, dass es immer positiv ist und an den Peaks für eine kurze Zeit konstant (siehe Anhang).

Meine erste Überlegung war es aus dem Signalen Nullen und Einsen zu machen. Sobald das Signal über einen gewissen Wert kommt, wird eine 1 daraus. Darunter eine 0. Relativ simpel. Dieses Muster könnte ich dann irgendwo hinterlegen und mit dem Signal vergleichen. Stimmt das Signal überein möchte ich das angezeigt bekommen.

Diese Vergleich möchte ich aber mit mehr Parametern durchführen. Ich möchte den Zeitlichen Abstand der Signale zueinander berücksichtigen. Die Höhe der Amplitude und die Dauer der Amplitude. Dieses Signal möchte ich dann mit einem hinterlegten Signal vergleichen. Natürlich ist das Signal mit gewissen Schwankungen versehen. Deshalb müsste man entsprechende Toleranzen vorsehen. Wobei je nach Aufbau der Verlauf schon identisch aussieht.

Im Ersten Durchlauf möchte ich eine Kurve aus meinem Gerät aufnehmen und im Zweiten Anlauf das Gerät noch mals messen und mit der Hinterlegten Kurve vergleichen.

Hat Jemand irgendeine Idee welche Schritte dafür nötig sind und wie man das Signal aufbereiten müsste?

EDIT:

Ich wollte nur darauf hinweisen, dass ich in der Thematik komplett neu bin, ich habe es jetzt zumindest geschafft die Messwerte aufzunehmen, jedoch noch keine Ahnung was ich mit diesen Anstelle bzw. was überhaupt realisierbar ist.

Signal.png
 Beschreibung:

Download
 Dateiname:  Signal.png
 Dateigröße:  193.6 KB
 Heruntergeladen:  444 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.04.2016, 08:54     Titel: Re: Analoges Signal digitalisieren und vergleichen.
  Antworten mit Zitat      
Hallo Jarrao90,

Zitat:
Ich würde gerne ein analoges periodisches Signal einlesen und mit einem vorgegebenen Signal vergleichen.

Das Einlesen hat offenbar schon funktioniert. Also geht es nur noch um das "Vergleichen", oder?

Zitat:
Meine erste Überlegung war es aus dem Signalen Nullen und Einsen zu machen.

Also:
Code:
T = (Signal > Threshold);

Zitat:
Dieses Muster könnte ich dann irgendwo hinterlegen und mit dem Signal vergleichen. Stimmt das Signal überein möchte ich das angezeigt bekommen.

Das ist nicht klar. Was heißt "irgendwo hinterlegen"? Und wie genau soll der Vergleich ablaufen?

Zitat:
Ich möchte den Zeitlichen Abstand der Signale zueinander berücksichtigen. Die Höhe der Amplitude und die Dauer der Amplitude.

Die Höhe wird doch durch die Umwandlung in ein binäres Signal unbrauchbar.
Amplituden haben keine Dauer. Welche Dauer meinst Du genau?

Zitat:
Dieses Signal möchte ich dann mit einem hinterlegten Signal vergleichen. Natürlich ist das Signal mit gewissen Schwankungen versehen.

Darauf kann man nicht konkret antworten.

Was hast Du bisher versucht und woran scheiterst Du noch?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jarrao90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2016, 21:55     Titel:
  Antworten mit Zitat      
Das mit dem 1 und 0 war nur eine erste Idee, dass wäre die rudimentärste Lösung. Wenn möglich möchte ich in meinen Vergleich möglichst viele Parameter mit einbeziehen.

Ich habe jetzt in der Hilfe die Funktion tic toc gefunden. Also habe ich mir überlegt, dass ich eine Abfrage starte. Fällt das Signal unter den Wert 50, wird mit tic die Zeit gestartet. Steigt der Wert wieder über 50, wird mit toc die Zeitdifferenz ausgegeben.

Damit hätte ich beispielsweise die Zeit zwischen den Peaks. Stimmt diese Zeit dann Plus/ Minus meiner Toleranz mit meinem hinterlegten Zeit überein, könnte ich das Signal als das korrekte Signal identifizieren.

Das gleiche wollte ich dann mit der Amplitude und der Peakzeit machen.

Leider funktioniert das in meinem Code noch nicht. Im Code versuche ich die Zeit zwischen den Peaks zu ermitteln.


Code:
comport = serial('COM2', 'BaudRate', 240000);
fopen(comport);  
x=0;
i=0;
amp=0;
zeitdiff=0;
while(x<5000)
x=x+1;
y1(x)=fscanf(comport, '%d');
amp=y1(x);
drawnow;
subplot(2,1,1),  plot(y1,'r','linewidth',2)
if(amp<200)
    tic;  
    i=1;
elseif(amp>50&&i==1)
      zeitdiff=toc
        i=0;
 end
 
end
fclose(comport);
delete(comport);
Private Nachricht senden Benutzer-Profile anzeigen
 
Jarrao90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2016, 22:16     Titel:
  Antworten mit Zitat      
Doch jetzt klappt es. Ich musste die Grenzen in den if-Anweisungen etwas anders wählen. Die Frage bleibt trotzdem noch offen, wie ich noch mehr Werte aus der Funktion raus hole und mit einer zuvor eingelesenen Funktion vergleiche. Ich könnte die Zeitwerte jetzt z.B. in einer Matrix speichern. Dann könnte ich eine Art abfrage machen in der die Zeit und Amplitudenwerte vergleiche. Falls diese mit einer gewissen Abweichung übereinstimmen, soll mit das Programm das ausgeben.


Code:
comport = serial('COM2', 'BaudRate', 240000);
fopen(comport);

x=0;
i=0;
zeitdiff=0;

while(x<2000)
x=x+1;
y1(x)=fscanf(comport, '%d');
drawnow;
subplot(2,1,1),  plot(y1,'r','linewidth',2)
if(y1(x)<100&&i==0)
    tic;  
    i=1;
    elseif(y1(x)>400&&i==1)
      zeitdiff=toc
        i=0;
 end
end

fclose(comport);
delete(comport);
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.