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

Vergleich von Messsignalen durch Integration

 

Xarfai81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2008, 16:44     Titel: Vergleich von Messsignalen durch Integration
  Antworten mit Zitat      
Hallo allerseits!

Ich habe ein kleines Problem mit der programmtechnischen Umsetzung einer Flächenintegration von zwei Messsignalen und erhoffe mir hier ein wenig Hilfe.
(Siehe Anhang 1)
Diese zwei Messsignale(blaue und rote Kurve), gemessen an unterschiedlichen Sensoren bei einer Frequenz von 330kHz, weisen eine Differenz auf wie man vor allem an Sensor II gut erkennen kann. Ich habe nun vor die beiden Kurven jeweils ab t = 40 us bis t = 140 us zu integrieren, um so die jeweiligen Flächen zu erhalten und diese vergleichen zu können.
Den Vergleich möchte ich mit der in Anhang 2 zu sehenden Formel realisieren.
Ich habe mich dazu im Forum schon ein wenig umgeschaut und gesehen, dass die Befehle trapz oder cumtrapz geeignet zu sein scheinen, um Messdaten ensprechend zu integrieren.

Nun bin ich aber leider ein totaler Matlab-Anfänger und auch die Hilfe-Funktion hat mich bisher nicht viel weiter gebracht.
Vielleicht kann mir ja ein erfahrener Matlab-Kenner hierbei ein wenig unter die Arme greifen. Dafür wäre ich ihm/ihr doch sehr verbunden. Smile

Viele Grüße

Erik

DI.JPG
 Beschreibung:
Anhang 2

Download
 Dateiname:  DI.JPG
 Dateigröße:  16.24 KB
 Heruntergeladen:  760 mal
330kHz_40us_59VPP_2_zoom.JPG
 Beschreibung:
Anhang 1

Download
 Dateiname:  330kHz_40us_59VPP_2_zoom.JPG
 Dateigröße:  125.34 KB
 Heruntergeladen:  751 mal


Xarfai81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2008, 14:08     Titel:
  Antworten mit Zitat      
Habe mich mal selber dran gewagt, funktioniert aber noch nicht richtig, zB. bekomme ich die Ausgabe nur im Command-Window. Ausserdem glaube ich, dass das mit dem num2str noch nicht das richtige sein kann.

Hier mal ein bischen code, dazu sei nochmal gesagt, dass ich wirklich null Programmier-Erfahrung hab:

Code:

% Rote Kurve von Sensor I(Schaden)
X1 = xxChannel_II*10^6;     % Zeit-Daten in X-Richtung von Sekunde in Mikro-Sekunde bringen
X1 = 50:0.1:140;            % Festlegung der Abtastrate
Y1 = scale_yyChannel_II*X1; % Die skalierten Y-Werte multipliziert mit den X-Werten wird als Y1 definiert
z1 = trapz(Y1)              % Trapezoide Aufsummierung von Y1
z1 = 1*trapz(abs(Y1))       % Es werden die Beträge von Y1 verwendet
disp( num2str(z1))          % Ausgabe der Fläche z1

% Rote Kurve von Sensor II(Schaden)
X2 = xxChannel_III*10^6;    % Zeit-Daten in X-Richtung von Sekunde in Mikro-Sekunde bringen
X2 = 45:0.1:140;            % Festlegung der Abtastrate
Y2 = scale_yyChannel_III*X2;% Die skalierten Y-Werte multipliziert mit den X-Werten wird als Y2 definiert
z2 = trapz(Y2)              % Trapezoide Aufsummierung von Y2
z2 = 1*trapz(abs(Y2))       % Es werden die Beträge von Y2 verwendet
disp( num2str(z2))          % Ausgabe der Fläche z2

% Rote Kurve von Sensor III(Schaden)
X3 = xxChannel_IV*10^6;     % Zeit-Daten in X-Richtung von Sekunde in Mikro-Sekunde bringen
X3 = 50:0.1:140;            % Festlegung der Abtastrate
Y3 = scale_yyChannel_IV*X3; % Die skalierten Y-Werte multipliziert mit den X-Werten wird als Y3 definiert
z3 = trapz(Y3)              % Trapezoide Aufsummierung von Y3
z3 = 1*trapz(abs(Y3))       % Es werden die Beträge von Y3 verwendet
disp( num2str(z3))          % Ausgabe der Fläche z3

% Blaue Kurve von Sensor I(Referenz)
X4 = xxChannel_II*10^6;     % Zeit-Daten in X-Richtung von Sekunde in Mikro-Sekunde bringen
X4 = 50:0.1:140;            % Festlegung der Abtastrate
Y4 = scale_yyChannel_II*X4; % Die skalierten Y-Werte multipliziert mit den X-Werten wird als Y4 definiert
z4 = trapz(Y4)              % Trapezoide Aufsummierung von Y4
z4 = 1*trapz(abs(Y4))       % Es werden die Beträge von Y4 verwendet
disp( num2str(z4))          % Ausgabe der Fläche z4

% Blaue Kurve von Sensor II(Referenz)
X5 = xxChannel_III*10^6;    % Zeit-Daten in X-Richtung von Sekunde in Mikro-Sekunde bringen
X5 = 45:0.1:140;            % Festlegung der Abtastrate
Y5 = scale_yyChannel_III*X5;% Die skalierten Y-Werte multipliziert mit den X-Werten wird als Y5 definiert
z5 = trapz(Y5)              % Trapezoide Aufsummierung von Y5
z5 = 1*trapz(abs(Y5))       % Es werden die Beträge von Y5 verwendet
disp( num2str(z5))          % Ausgabe der Fläche z5

% Blaue Kurve von Sensor III(Referenz)
X6 = xxChannel_IV*10^6;     % Zeit-Daten in X-Richtung von Sekunde in Mikro-Sekunde bringen
X6 = 50:0.1:140;            % Festlegung der Abtastrate
Y6 = scale_yyChannel_IV*X6; % Die skalierten Y-Werte multipliziert mit den X-Werten wird als Y6 definiert
z6 = trapz(Y6)              % Trapezoide Aufsummierung von Y6
z6 = 1*trapz(abs(Y6))       % Es werden die Beträge von Y6 verwendet
disp( num2str(z6))          % Ausgabe der Fläche z6
 


In den mit zB xxChannel_IV oder scale_yyChannel_IV benannten Variablen befinden sich jeweils 7433 Datenpunkte. Das sind jeweils die X- bzw. Y-Werte, die zusammen die Messkurve bilden.

Viele Grüße
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2008, 14:34     Titel:
  Antworten mit Zitat      
Hallo,

ohne dein Problem genauer gelesen zu haben (sorry), mal ein paar Fragen bzw. Anmerkungen:

Code:
% Rote Kurve von Sensor I(Schaden)
X1 = xxChannel_II*10^6;     % Zeit-Daten in X-Richtung von Sekunde in Mikro-Sekunde bringen
X1 = 50:0.1:140;            % Festlegung der Abtastrate

Dir ist klar dass X1 somit unabhängig von xxChannel_II wird? Du überschreibst es mit dem Vektor [50 50.1 ... 140];
Code:
Y1 = scale_yyChannel_II*X1; % Die skalierten Y-Werte multipliziert mit den X-Werten wird als Y1 definiert

Ist scale_yyChannel_II ein Skalar? (Du sagst ja es ist ein Vektor mit 7433 Einträgen). Falls es eben der obgenannte Vektor ist, ist dies keine elementweise Multiplikation, sondern eine "normale" Matrixmultiplikation, mit entweder einer Matrix mit 7433 x 7433 oder genau einem Eintrag als Ergebnis (je nachdem ob es Spalten- oder Zeilenvektoren sind). Eine elementweise Multiplikation wird mit dem ".*" Operator durchgeführt.

EDIT: Ich merk grad dass X1 ja 901 Elemente hat und somit scale_yyChannel_II ja nicht 7433 Elemente haben kann. Allerdings ist dein Signal dann einfach eine Rampe bzw. eine Gerade. Ist das so gewollt?
Code:

z1 = trapz(Y1)              % Trapezoide Aufsummierung von Y1
z1 = 1*trapz(abs(Y1))       % Es werden die Beträge von Y1 verwendet
disp( num2str(z1))          % Ausgabe der Fläche z1
Am besten bei trapz noch den Zeitvektor mitreingeben, dann erübrigen sich Skalierungen.

Der Aufruf mit disp ist schon richtig, allerdings benötigst du das num2str gar nicht weil disp zumindest bei 2007b auch mit Zahlen zurechtkommt.

Inwiefern stimmt denn dein Ergebnis nicht? Erhältst du irgendwelche Fehlermeldungen?

MfG,
dib0r
Private Nachricht senden Benutzer-Profile anzeigen
 
Xarfai81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2008, 15:41     Titel:
  Antworten mit Zitat      
Hallo,
danke erst mal für die Antwort. Das X1 damit überschrieben wird war mir nicht klar, aber danke für die Aufklärung. Ich hatte da einfach eine andere Vorstellung im Kopf was deren Syntax-Logik angeht...

Was das Signal betrifft, so handelt es sich dabei halt jeweils um eine Messkurve mit X-Werten(Zeit; zB xxChannel_II mit 7433 Datenpunkten) und Y-Werten(Spannung; zB scale_yyChannel_II mit 7433 Datenpunkten).
xxChannel_II
x1
x2
x3
...
x7433

scale_yyChannel_II
y1
y2
y3
...
y7433

Da ich nun die Fläche unter der sich ergebenden Messkurve innerhalb bestimmter Zeit-Grenzen haben will(6 mal Gesamt, jeweils die rote und die blaue Kurve an jedem der 3 Sensoren), dachte ich mir ich löse das ganze mit trapz. Wenn trapz also innerhalb bestimmter Grenzen in X-Richtung integrieren soll, dachte ich mir ich definiere das ganze mal als x*y. Habe ich da einen Denkfehler gemacht? trapz muss sich doch worauf beziehen und ich weiss nicht, wie ich da bei trapz anders definieren soll. Was habe ich denn in meiner 1-spaltigen 7433 Zeilen langen Liste für einen Typus? Müssten skalare sein oder? Weil für einen Vektor bräuchte ich ja noch eine Richtungsangabe.

Gruß, Erik

PS: Fehlermeldungen hatte ich keine und die Skalierung der Messwerte im Voraus mache ich hauptsächlich für den Plot der Daten, weil mein Anregungssignal stark schwankt. Der Verstärker ist nicht mehr ganz in Ordnung.
 
Xarfai81
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 07.08.08
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 07.08.2008, 15:41     Titel:
  Antworten mit Zitat      
Hi,

mein Programm läuft soweit schon ganz gut, allerdings gibt es eine Sache, die ich gerne ändern möchte.
Ich lege den Bereich für meine Aufsummierung zur Zeit noch dadurch fest, dass ich gezielt die ensprechende Zeile in den Datensätzen anspreche(indx von:bis). Das ist aber leider ziemlich supoptimal, da meine Oszilloskop-Aufnahmen des öfteren mit anderen Einstellungen vorgenommen wurden und sich zB Wert 0.0003 für 300us bei dem einen Datensatz in Zeile 7038 und bei dem nächsten Datensatz in einer vollkommen anderen Zeile befindet. Daher muss ich bei jedem neuen Datensatz, den ich mit Matlab bearbeiten will die Bereiche neu festlegen.

Wie kann ich jetzt zur Festlegung des Bereichs, anstatt der Zeile, gezielt Werte ansprechen, also zB von 0.0001 bis 0.00025?

edit: Vielleicht nochmal ein passender Ausschnitt aus meinem Programm

Code:

indx5 = 1598:5348 % 100 bis 250 us, Schaden
indx55 = 2038:5788 % 100 bis 250 us, Basis
indx6 = 4098:6598 % 200 bis 300 us, Schaden
indx66 = 4538:7038 % 200 bis 300 us, Basis
indx7 = 5348:6598 % 250 bis 300 us, Schaden
indx77 = 5788:7038 % 250 bis 300 us, Basis

% Rote Kurve von Sensor I(Schaden)
X1 = xxChannel_II(indx5,1).*10^6;       % Zeit-Daten von Sekunde in Mikro-Sekunde bringen
Y1 = scale_yyChannel_II(indx5,1).^2;    % Elementweise Quadrierung des Y-Kanals(Amplituden)
z1 = trapz(X1,abs(Y1))                  % Trapezoide Aufsummierung der Flächen mit dem Betrag von Y

% Rote Kurve von Sensor II(Schaden)
X2 = xxChannel_III(indx6,1).*10^6;      % Zeit-Daten von Sekunde in Mikro-Sekunde bringen
Y2 = scale_yyChannel_III(indx6,1).^2;   % Elementweise Quadrierung des Y-Kanals(Amplituden)
z2 = trapz(X2,abs(Y2))                  % Trapezoide Aufsummierung der Flächen mit dem Betrag von Y

% Rote Kurve von Sensor III(Schaden)
X3 = xxChannel_IV(indx7,1).*10^6;       % Zeit-Daten von Sekunde in Mikro-Sekunde bringen
Y3 = scale_yyChannel_IV(indx7,1).^2;    % Elementweise Quadrierung des Y-Kanals(Amplituden)
z3 = trapz(X3,abs(Y3))                  % Trapezoide Aufsummierung der Flächen mit dem Betrag von Y

% Blaue Kurve von Sensor I(Referenz)
X4 = xChannel_II(indx55,1).*10^6;        % Zeit-Daten von Sekunde in Mikro-Sekunde bringen
Y4 = DE_yChannel_II(indx55,1).^2;        % Elementweise Quadrierung des Y-Kanals(Amplituden)
z4 = trapz(X4,abs(Y4))                  % Trapezoide Aufsummierung der Flächen mit dem Betrag von Y

% Blaue Kurve von Sensor II(Referenz)
X5 = xChannel_III(indx66,1).*10^6;       % Zeit-Daten von Sekunde in Mikro-Sekunde bringen
Y5 = DE_yChannel_III(indx66,1).^2;       % Elementweise Quadrierung des Y-Kanals(Amplituden)
z5 = trapz(X5,abs(Y5))                  % Trapezoide Aufsummierung der Flächen mit dem Betrag von Y

% Blaue Kurve von Sensor III(Referenz)
     
X6 = xChannel_IV(indx77,1).*10^6;       % Zeit-Daten von Sekunde in Mikro-Sekunde bringen; mit Bereich
Y6 = DE_yChannel_IV(indx77,1).^2;        % Elementweise Quadrierung des Y-Kanals(Amplituden)
z6 = trapz(X6,abs(Y6))                  % Trapezoide Aufsummierung der Flächen mit dem Betrag von Y


SI_S1 = (z1/z4)^0.5                     % SchadensIndex an Sensor I wird berechnet, "gain"-Faktor k bei 0.5 für Risse

SI_S2 = (z2/z5)^0.5                     % SchadensIndex an Sensor II wird berechnet, "gain"-Faktor k bei 0.5 für Risse

SI_S3 = (z3/z6)^0.5                     % SchadensIndex an Sensor III wird berechnet, "gain"-Faktor k bei 0.5 für Risse
 


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