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

Signalanpassung an ein weiteres Signal

 

Philipp1208
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 07:49     Titel: Signalanpassung an ein weiteres Signal
  Antworten mit Zitat      
Hallo Zusammen.

Mein Problem ist folgendes:
Ich habe 2 Signale, wobei das 1. Signal dem 2.ten angepasst werden soll.
Das 2. Signal ist unveränderbar. Das 1.Signal stammt aus einer Formel mit 4 Variablen. Diese Variablen möchte ich so verändern, dass das 1. Signal ungefähr dem 2. Signal folgt.

Anhand der entstehenden Gesamtfläche zwischen den beiden Signalen kann ich die Qualität der Annäherung bestimmen. Um so kleiner die Fläche zwischen den beiden Signalen ist, desto besser ist die Annäherung.


vpaf => 1. Signal (Array)
env.y => 2. Signal (Array)
erg=Summe des Integrals

Code:

...
for i=1: length(vpaf)
   erg(i+1)= erg(i)+abs(vpaf(i)-env.y(i));
end  
...
 


Hat jemand eine Idee, wie ich die 4 Variablen von 1.Signal(vpaf) bestimmen kann. Für eine Idee wäre ich euch dankbar.

Phil
Private Nachricht senden Benutzer-Profile anzeigen


vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 16:39     Titel:
  Antworten mit Zitat      
Hallo,

du hast es hier mit einem Optimierungsproblem zu tun. Du möchtest die 4 Parameter so bestimmen, dass der Fehler deiner Signale minimal wird. Genauer gesagt ist es also ein Minimierungsproblem.

Die Funktion
Code:

bzw. dessen Verwandte sollten dir weiterhelfen. Die Funktion benötigt als Argument eine Funktion Wink, die dir anhand deiner Parameter die zu minimierende Funktion (=Zielfunktion wenn ich mich recht erinnere) berechnet. Wichtig ist auch der Startvektor x0. Sind die Startwerte falsch gewählt, so verläuft sich die Fkt. evtl. im Nirwana oder du erhältst als Resultat unrealistische Parameter. In dem Zusammenhang können auch andere Funktionen sinnvoll sein, um die Parameter einzuschränken (z.B. keine negativen Werte zulassen.
Ach ja, dafür benötigst du allerdings die Optimation Toolbox wenn ich mich nicht irre.
Aber zu der Thematik kannst du dich einfach hier im Forum oder in der Hilfe mal umschauen, hier sind schön öfters solche Probleme behandelt worden.
Oder melde dich nochmals...
Gruß vega
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp1208
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 16:31     Titel:
  Antworten mit Zitat      
Hallo Zusammen
die
Code:
sucht leider nur die lokalen Minima.

Wie kann ich die Startwerte so anpassen, dass die optimalen Parameter gefunden werden? Oder gibt es eine globale Variante?

Des Weiteren dürfen die Parameter (Variablen) nur in einem bestimmten bereich liegen.

Gibt es eine Möglichkeit sie einzuschränken.

Code:

start_values=[125 180 75 40]

options = optimset('Display','iter','TolFun',1e-12,'MaxIter',600)
[x, y_value ,exitflag,output]=fminsearch(@(y) vpaf_calc(y),start_values,options)
 


Code:

function [ttt]=vpaf_calc(y)
global env
erg(1:200,1)=[0];

vpaf_1.t(1:200,1)=linspace(0.26,100,200);

%vpaf_1.y=v0+a0.*vpaf_1.t-2^(-5).*vpaf_1.t.^2*k0+2^(-9).*vpaf_1.t.^3*k1;

vpaf_1.y=y(1)+y(2).*vpaf_1.t-2^(-5).*vpaf_1.t.^2*y(3)+2^(-9).*vpaf_1.t.^3*y(4);

%for i=1: length(vpaf_1.y)
for i=1: 100
erg(i)=abs(vpaf_1.y(i)-env.y(i));
end  
plot(vpaf_1.t,vpaf_1.y)
ttt=sum(erg(1:100))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2010, 14:19     Titel:
  Antworten mit Zitat      
Also um Bedingungen mit in die Optimierung zu integrieren solltest du dir die Funktionen fmincon bzw. fminbnd anschauen, falls du das nicht schon getan hast.
Um an gute Startwerte zu gelangen, gibt es noch die Möglichkeiten in einer Schleife die Parameter zufällig einzusetzen und dann die Zielfunktion zu berechnen. Das beste Ergebnis bzw. dessen Parameter werden dann wie bisher optimiert.
Zur Bestimmung eines globalen Minimums gibt es seit kurzem die Global Optimization Toolbox. Damit habe ich bis jetzt allerdings keine Erfahrungen sammeln können. Aber ich denke, dass du auch mit der oben genannten Methode zufrieden stellende Ergebnisse bekommen solltest. Oder ist das Problem bereits gelöst??
MfG
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.