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.
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