Hallo,
wahrscheinlich ist das für euch ein ganz simples Problem aber ich weiß einfach nicht weiter. Ich habe ein Signal (siehe Bild). Ihr seht einen abklingendes sinusförmiges Signal. Ich möchte nun eine Regression über alle Datenpunkte legen um einen idealisierten Sinus mit möglichst kleinem Fehler zu bekommen.
Ich bin im Internet auf eine entsprechende Funktion gestoßen, weiß aber erstens nicht, ob diese mir wirklich weiter hilft und zweitens nicht, wie ich diese Aufrufe. Ich habe bisher noch nicht mit solchen Funktionen gearbeitet:
Kann mir da jemand weiter helfen oder wenigstens erklären was die Funktion macht und wie ich es schaffe, diese in mein Script einzubinden?
Mein Signal wird in meinem Script durch die Variable 'ywerte' beschrieben. Darin ist ein Vektor mit allen Messpunkten. Die x-Werte sind einfach nur über die Anzahl der Spalten von 'ywerte' definiert.
Vereinfacht gesprochen, sucht die Function Fminsearch nach der besten Kombination von c1,c2,c3 also A,w0,phi sodass A*sin(w0*x+phi) bestmöglich zu den Testdaten passt. Stichwort: Summe der kleinsten Fehlerquadrate
Hallo,
danke für die schnelle und ausführliche Antwort. Aber nun hab ich das Problem, dass ich nicht weiß, wie ich die Funktion bei mir einbaue. Kannst du mir sagen, was ich in meinem Script schreiben muss, damit die Funktion aufgerufen wird und nicht die Testdaten sondern meine eigenen Daten als Eingabe dienen?
1) Erstelle ein Skript in welchem du deine Daten in den Workspace lädst
2) Packe die angehängt Funktion "sinfit" in das gleiche Verzeichnis in welches zu auch das Skript gepackt hast
3) Rufe in deinem Skript sinfit mit deinen Daten auf
4) ???
5) Profit
Sieht so aus, als ob fminsearch nicht richitg konvergiert ist, liegt möglicherweise an der Optimierungsfunktion, habe sie jetzt durch x² anstelle von abs(x) ersetzt. Zudem habe ich x0 als Startvektor definiert, hier kannst du versuchen verschiedene Start-Koeffizierten auszuprobieren, z.b. x0=[1 2 3] whatever, möglicherweise konvergiert fminsearch dann besser.
Hast du die Function Sinfit von meinem vorherigen Post aktualisiert? Zudem musst du auf die Dimensionen von x und y achten, die müssen 1xn sein!
Bei mir gibt die Funktion was halbwegs brauchbares aus für x0=[1 0 1], wie gesagt du musst verschiedene x0 ausprobieren.
Die Lösung geht dann in Richtung Regressionsgerade, ich glaube was besseres kannst du auch nicht erwarten, da das Signal schwer mit deiner Ansatzfunktion A*sin(w0*x+phi) anzunähern ist. Bessere eine abklingende Ansatzfunktion mit exp.
hey,
ja die sinfit hab ich aktualisiert. Mit den Werten x0=[1,0,1] (Notation richtig?) bekomm ich auch nur eine Gerade.
Hast du eine Idee, wie die Ansatzfunktion mit exp aussehen könnte?
Denn aus deinem Bild geht klar ein Cosinus hervor. Ich weiß nicht ob es bei der Regression einen Unterschied macht. Ist ja nur eine Verschiebung der Phase um pi/2.
Ausserdem scheinen hier 2 unterschiedliche Exponentialfunktion überlagert zu sein, da bei den Max- und Minpeaks nicht die gleiche Dämpfung vorliegt. Evtl. wäre es auch hilfreich das höherfrequente Störsignal vorher mit einem Filter zu entfernen.
ich werde es am Wochenende mal ausprobieren. Vielen Dank. Sollte ich nicht weiter kommen, melde ich mich einfach wieder
Vielen Dank erstmal
Gruß
Johannes
Einstellungen und Berechtigungen
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
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.