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

Erkennung einer Oszillation

 

Detlef3000
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2017, 16:33     Titel: Erkennung einer Oszillation
  Antworten mit Zitat      
Hallo liebe Community,

ich möchte aus einer Wertereihe erkennen, ob eine Oszillation um die X-Achse vorliegt. Die Wertereihe ist ein Vektor aus einer Spalte und n Zeilen.
Ich habe das bisher so gelöst:
Code:
   x = 0;                        % Initialisierung
    y = 0;
    t = 0;
    I1 = 0;
    I2 = 0;
    idx = diff(sign(e));              
    if sum(abs(idx)) >= 8         % Prüft ob min. 4 Nullstellen vorhanden sind          
        I11 = find(idx==1 | idx==(-1));        % von neg. zu pos. mit Wert null  
        for i1 = 2:2:length(I11)
            I1 = [I1;((I11(i1)-I11(i1-1))/2)+I11(i1)];
        end
         I1(1) = [];
         I2(1) = [];
        I3 = find(idx==2);        % von neg. zu pos. ohne Wert null    
        I4 = find(idx==(-2));     % von pos. zu neg. ohne Wert null    
        I = sort([I1;I2;I3;I4]);  % Füllt I mit den sortierten Werte von I1 bis I4
        for i1 = 1:1:length(I)    
            y = [y;(I(i1)-x)];
            x = I(i1);
        end    
        y(1) = [];                  % löscht den initialisierten Wert 0  
         
        for i1 = 1:1:length(y)-2; % vergleicht die Zeiten der Nullstellen miteinander  
            if y(i1,1) >= y(i1+2,1)-(y(i1,1)/100)*5 && y(i1,1) <= y(i1+2,1)+(y(i1,1)/100)*5
                t(i1,1) = 1;      % für identische Werte eine 1 setzen
            else
                t(i1,1) = 0;      % ansonsten 0
            end
        end
        I(i+round(0.5*fe)) = 1-(sum(t)/length(t)); % Summe der identischen Werte dividiert durch alle Summanden  
    else
        I(i+round(0.5*fe)) = 1;
    end

Wenn eine Oszillation vorliegt, soll I den Wert 1 erhalten, wenn nicht 0.

Mit dieser Lösung bin ich sehr unzufrieden. Kann mir da jmd helfen?

Grüße
Detlef
Private Nachricht senden Benutzer-Profile anzeigen


Detlef3000
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2017, 11:45     Titel:
  Antworten mit Zitat      
Kennt jmd irgendeine Möglichkeit eine Schwingung in einer Messreihe mit Hilfe von MATLAB zu erkennen?

Grüße
Detlef
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: 05.05.2017, 15:25     Titel:
  Antworten mit Zitat      
Hall Detlef3000,

Wie definierst Du denn "Schwingung" genau?
Suchst Du nach einer Sinus-Schwingung? Oder geht es nur um eine annähernd gleichmäßige Verteilung von Null-Durchgängen?
Wenn sich zwei Sinus-Schwingungen unterschiedlicher Frequenz überlagern, könnte da auch eine Schwinung sein.

Versuche also zuerst die physikalische Natur des gesuchten Musters exakt zu definieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2017, 13:27     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich Suche eine eventuelle Sinusschwingung in einer Messreihe. Falls eine Sinusschwingung vorliegt, möchte ich die detektiert bekommen. Die Frequenz oder die Amplitude sind egal. Es geht nur darum aus einer großen Ansammlung an Messreihen zu untersuchen, bei welcher eine Schwingung vorliegt.

Grüße
Detlef
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: 19.05.2017, 09:16     Titel:
  Antworten mit Zitat      
Hallo Detlef3000,

Versuche eine Foruier- bzw. DCT Analyse. Wenn hiere eine Amplitude "deutlich" ausgeprägt ist, hats Du eine Sinus-Schwingung. Details dazu findest Du z.B. bei WikiPedia.
Du könntest auch versuchen eine Sinus-Schwingung an die Daten zu fitten und dann messen, wie große die Abweiung zwischen dem Fit und dem Signal ist.

Beide Fälle sind nicht eindeutig und Du brauchst eine Heuristik, ab wann Du ein Signal als "Schwingung" betrachtest.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2017, 10:48     Titel:
  Antworten mit Zitat      
Hallo Jan,

das ist auch mein Problem, wie definiere ich "deutlich" ausgeprägt?
ich möchte die Auswertung automatisch ablaufen lassen, ohne selber hinschauen zu müssen. Bei einer FFT ist die automatische Detektierung einer vorhandenen Sinusschwingung in einem Messrauschen schwierig, oder kennt jmd eine Lösung?

Grüße Detlef
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: 23.05.2017, 13:28     Titel:
  Antworten mit Zitat      
Hallo Detlef3000,

Dies ist nun kein Matlab-Problem mehr, sondern hängt an Deiner Aufgabenstellung. Man muss als Wissenschaftler definieren, wonach man sucht.

Zitat:
Bei einer FFT ist die automatische Detektierung einer vorhandenen Sinusschwingung in einem Messrauschen schwierig, oder kennt jmd eine Lösung?

Die FFT ist doch bereits die Lösung. Du findest bestimmt haufenweise verschiedene Schwingungen. Manche hängen mit der Mondphase zusammen, manche mit dem Ebbe- und Flut-Zyklus, manche mit der Windgeschwindigkeit, andere mit der Eigenfrequenz der Umgebung. Dann bekommst Du noch das Kräuseln durch den Wind beim Übergang von Schwerewellen zu Wind-erzeugten Wellen und schließlich noch chaotische Auswirkungen durch eventuelle Turbulenzen.

Du kannst die Entscheidung, nach welchen Schwingungen Du suchst weder dem Forum noch Matlab überlassen, sondern das muss in der Aufgabenstellung definiert sein. "Finde mal etwas auffälliges" ist nichts, was man zuverlässig beantworten kann.

Gruß, Jan
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.