Hallo Leute, hoffe hier haben auch ein paar Ahnung von MATALAB... Mein Problem: Ich will in Simulink von Signalen laufend den Mittelwert von den LETZTEN 100 Werten bilden. Es gibt einen RMS-Block, der aber nur den RMS-Wert ALLER Eingangswerte berechnen kann und sich nicht verstellen lässt. Wenn ich eine Funktion in Simulink programmiere wollte, die diese 100 werte speichert, aufsummiert und dan einfach durch 100 teilt müsste ich die Werte ja auch laufend in den Workspace exportieren und wieder importieren, was natürlich nicht sehr sinnvoll ist. Hat jemand eine Ahnung wie ich mit einer "Embedded Function" in Simulink die 100 Werte anders laufend speichern kann oder wie ich das Problem sonst lösen könnte? Vielen Dank schonmal. Gruß Dominik
Sorry, aber ich habe von Matlab + Simulink keine Ahnung, fange gerade damit frisch an. Aber ich schicke dir eine Skript hoch, die ich im Internet gefunden gabe. Ich glaube da findest du eine Antwort.
Danke, leider steht da auch nichts zu meinem Problem drin. Aber gute Einführung.
Das was du da vor hast, ist ja nichts anderes als ein FIR-Filter, bei dem Alle Koeffizienten 1/N sind. Das lässt sich in Simulink sehr leicht mit den Standard-Toolboxen aufbauen.
Es gibt wie immer mehrere Möglichkeiten: 1. Es gibt einen passenden Block: Discrete --> Weighted Moving Average 2. Es gibt Möglichkeiten, dies über ein Filter zu machen. FIR mit Standardblöcken wird aufwändig. Aber mit Rückkopplung sollte es doch einfach gehen. 3. Mit einer S-Funktion geht das, was du vor hast auch ganz einfach. Vergess hin- und herschieben in den Workspace. Eine S-Function kennt private static Variablen.
FIR mit Standardblöcken ist nicht aufwendig und vor allen Dingen sehr schnell. Discrete Filter - Block -> (Numerator 1/100 .* ones(1,100)) und Denominator [1] einfacher geht es doch nicht. S-Function - in welcher Sprache auch immer - lohnt sich hier nicht. Weighted Moving Average is natürlich auch ne Möglichkeit Björn
hallo... ich habe das selbe problem und muss auch von den letzen 10 werten ständig den mittelwert auswerten... quasi wie ein speicher, der sich die letzten 10 werte merkt, immer den letzten rausschmeißt, wenn der nächste vorne rein kommt und dabei ständig den mittelwert ausgibt. welcher simulink block kann das? running rms? bitte um hilfe... lg michael
An Björn, bei der Verwendung des Filters gibt es allerdings das Problem, dass ich den Anfangszustand nicht vorgeben kann. Ich bin gerade auf deinen Eintrag gestoßen, da ich mit dem Moving Average das Problem hab, dass die Ausgangsgröße nicht exakt dem Anfangswert entspricht. Ich nehme an, das ließe sich durch die Angabe der Datentypen beheben, was mir bis jetzt allerdings noch nicht gelungen ist. Hättest du einen anderen Tip? Diskret nachbauen ist mir zu aufwendig, da ich die letzten 550 Werte mitteln möchte. lg Markus
An Björn, ist es möglich, den discrete filter Block auch so zu verwenden, dass der Input auch ein Vektor sein kann. Ziel wäre es, die einzelnen Größen des Eingangsvektors über die identische Anzahl an Zeitschritten zu mitteln, ohne n mal einen block in das Modell ziehen zu müssen. Vielen Dank schon mal im Voraus, Martin.
hi, ich hab mir das alles mal genau durchgelesen, allerdings funktioniert mein nachbau nicht so, wie ichs gern hätte. ich möchte nämlich quasi das absolute maximum meines arrays mit 3000 stellen, und hab das über den filter probiert. irgendwas hohes findet er zwar, aber das absolute maximum findet der trotzdem nicht.. irgendwelche ideen, könnte sehr gut hilfe brauchen ^^ grüße
bin ich bescheuert.. mittelwert, nicht maximum.. wobeis natürlich gut wär, wenn man das auch noch finden könnte irgendwie (wenn wer ideen hat) :D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.