Block in Simulink

Gast #759166
Lesenswert?

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
Gast #760152
Lesenswert?

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.
Gast #761245
Lesenswert?

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
Gast #765776
Lesenswert?

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
Gast #1221749
Lesenswert?

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
Gast #1285205
Lesenswert?

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.
Gast #1459584
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren