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

Messwerte vergleichen

 

Manuel123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2010, 18:11     Titel: Messwerte vergleichen
  Antworten mit Zitat      
Hallo,

komme nicht weiter und könnte Hilfe brauchen.

Ich habe aus einer Messung die Messwerte über die Frequenz. In einem beliebigen Frequenzbereich nehmen die Messwerte sehr ähnliche Werte an, so dass sie nahezu eine horizontale Linie beschreiben.

Wie könnte ich von Matlab automatisch diesen Frequenzbereich finden lassen?
Ich dachte mir dass man die Differenzen benachbarter Messpunkte betrachten könnte und ein Differenzlimit definiert in dem sie zu liegen haben. Aber wirklich weiter hat mich das auch nicht gebracht.

Hat jemand eine Idee für eine gute Umsetzung ?

Bin für jeden Vorschlag dankbar.

Vg Manuel


Evron
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2010, 19:45     Titel:
  Antworten mit Zitat      
Hallo Manuel,

ich würde mal davon ausgehen, dass Du Deine Messwerte als Liste hinterlegt hast, dann vielleicht so:

Code:

M=M(2:end)-M(1:end-1); % Differenz benachbarter Punkte bilden
M(abs(M)<=Grenze)=1;
M(abs(M)>Grenze)=0;
M=M(2:end)-M(1:end-1);
L(:,1)=find(M==1);
L(:,2)=array(@(I) find(M(L(I,1):end)==-1,1,'first')+L(I,1), size(L, 1));
L=L+2;
 


Was passieren soll ist folgendes. Zunächst berechnest Du die Differenz zwischen benachbarten Messwerten. Dann ersetzt Du alle Differenzen die klein genug sind durch 1, der Rest wird 0. Dann bildest Du wieder die Differenzen darüber. +1 sind sie genau dann, wenn der Bereich tendentiell gleicher Werte betreten wird und -1 wenn er verlassen wird. Jetzt werden alle Bereichseingänge gesucht und dazu ihr Verlassen, das ist dann Inhalt der Matrix L. Weil zweimal Differenzen gebildet wurden müssten die Werte in L gegenüber der Ausgangsliste um zwei Werte verschoben werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Manuel123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2010, 20:54     Titel:
  Antworten mit Zitat      
Hi Evron,

ersmatl danke für die schnelle Antwort. Hab es ausprobiert, aber bekommen immer die Fehlermeldung

Error in ==> Curvefitting_v03 at 16

L(:,2)=array(@(I) find(M(L(I,1):end)==-1,1,'first')+L(I,1), size(L, 1));

Muss ich innerhalb der Zeile noch was ändern?

Bin noch relativ unbedarft was Matlab betrifft...
 
Evron
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2010, 22:39     Titel:
  Antworten mit Zitat      
Was willst Du denn machen, den curvefitting hört sich nach plotten an. Habe meinen Code aber auch nicht getesttet, er sollte einfach nur Bereiche finden, wo in einer Liste (M), die Differenz zwischen den Werten gering ist, damit also nichts plottbares. Denn L(:,1) sollte sagen, ab welchen Wert es los geht und L(:,2), wo es endet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Evron
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2010, 23:09     Titel:
  Antworten mit Zitat      
Gerade gesehen, dass ein paar Fehler drin waren. Sorry. Also hier als funktionierendes Beispiel:

Code:

M=[1 3 2 2 2.5 2 2.5 3 4 6 7];
Grenze=0.5;

M=M(2:end)-M(1:end-1); % Differenz benachbarter Punkte bilden
M(abs(M)>Grenze)=0;  % alle zu großen Differenzen auf 0 setzen
M(M~=0)=1;    % den Rest auf 1
M=M(2:end)-M(1:end-1);
M=[M -1];  % damit es am Ende in jedem Fall ein 'Bereichsende' gibt
L(:,1)=find(M==1);
L(:,2)=arrayfun(@(I) find(M(L(I,1):end)==-1,1,'first')+L(I,1), size(L, 1));
L  % Ausgabe
 


Ich hatte zuvor nicht daran gedacht, dass wenn Grenze kleinergleich 1 ist mit
Code:
M(abs(M)>Grenze)=0;
die vorherige Anweisung zu nichte gemacht worden wäre.

Du kannst mit
Code:
den Editor aufrufen mit den obigen Code einfügen, makieren und ihn mittels F9 ausführen lassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Manuel123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2010, 12:36     Titel:
  Antworten mit Zitat      
Hi,

Dein Beispiel funktioniert einwandfrei. Wenn ich jetzt meinen Vektor einbinde kommt diese Fehlermeldung:

??? Error using ==> horzcat
CAT arguments dimensions are not consistent.

Error in ==> Curvefitting_v03 at 26
M=[M -1]; % damit es am Ende in jedem Fall ein 'Bereichsende' gibt

Das noch vorweg. So binde ich die Daten ein:

Daten_Stiffness = importdata([cd '\StiffnessB.txt']);
Stiffness = Daten_Stiffness.data(:,2)/1000;

Ich habe die StiffnessB.txt angehängt.

Vielen Dank für deine Mühe

StiffnessB.txt
 Beschreibung:

Download
 Dateiname:  StiffnessB.txt
 Dateigröße:  29.73 KB
 Heruntergeladen:  538 mal
 
Evron
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2010, 13:25     Titel:
  Antworten mit Zitat      
Das liegt daran, dass bei Dir Stiffness am Ende ein Spaltenvektor ist, während bei mir M ein Zeilenvektor ist.
Code:
erweitertert bei mir den Zeilenvektor um eine Spalte. Wenn aus zwei Vektroren bzw. Matritzen ein(e) neue(r) gebildet wird, müssen beide die gleiche Anzahl von Zeilen bzw. Spalten haben.

Wie auch immer. Zwei Varianten: Entweder Du machst aus Stiffness einen Zeilenvektor
Code:
M=Stiffness';
oder Du schreibst die Verkettungsoperation in
Code:
M=[M; -1];
um, wobei dann einfach an den Spaltenvektor unten ein Element heran gehangen wird.

Falls Dich das mit der Verkettung noch verwirrt http://mo.mathematik.uni-stuttgart.de/kurse/kurs4/index_full.html ist meiner Meinung nach ein schönes kurzes Tutorial.
Private Nachricht senden Benutzer-Profile anzeigen
 
Manuel123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2010, 15:50     Titel:
  Antworten mit Zitat      
hi,

jetzt funktioniert es bei mir auch. Allerdings scheint immer noch etwas falsch zu sein. Betrachtet man die Matrix L so wurden zwar die 1 er erkannt, allerdings findet er nicht die dazugehörige -1.

In der zweiten Spalte steht immer die Zahl 1112. An dieser Stelle befindet sich zwar auch eine -1 aber das macht ja wenig Sinn.

Oder verstehe ich etwas falsch?
 
Manuel123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2010, 15:53     Titel:
  Antworten mit Zitat      
Ach ja - Mein Code sieht jetzt so aus:

clear all, close all, clc,

Daten_Stiffness = importdata([cd '\StiffnessB.txt']);
Stiffness = Daten_Stiffness.data(:,2)/1000;

M=Stiffness;
Grenze=3;

M=M(2:end)-M(1:end-1); % Differenz benachbarter Punkte bilden
M(abs(M)>Grenze)=0; % alle zu großen Differenzen auf 0 setzen
M(M~=0)=1; % den Rest auf 1
M=M(2:end)-M(1:end-1);
M=[M; -1]; % damit es am Ende in jedem Fall ein 'Bereichsende' gibt
L(:,1)=find(M==1);
L(:,2)=arrayfun(@(I) find(M(L(I,1):end)==-1,1,'first')+L(I,1), size(L, 1));
L % Ausgabe
 
Manuel123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2010, 15:55     Titel:
  Antworten mit Zitat      
Jetzt habe ich das auch mit dem Code verstanden ...

Code:


clear all, close all, clc,

Daten_Stiffness = importdata([cd '\StiffnessB.txt']);
Stiffness = Daten_Stiffness.data(:,2)/1000;

M=Stiffness;
Grenze=3;

M=M(2:end)-M(1:end-1); % Differenz benachbarter Punkte bilden
M(abs(M)>Grenze)=0;  % alle zu großen Differenzen auf 0 setzen
M(M~=0)=1;    % den Rest auf 1
M=M(2:end)-M(1:end-1);
M=[M; -1];  % damit es am Ende in jedem Fall ein 'Bereichsende' gibt
L(:,1)=find(M==1);
L(:,2)=arrayfun(@(I) find(M(L(I,1):end)==-1,1,'first')+L(I,1), size(L, 1));
L  % Ausgabe


Shocked
 
Evron
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2010, 17:34     Titel:
  Antworten mit Zitat      
na fein, da hat ja alles geklappt ...
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.