|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.08.2009, 09:24
Titel: Gleitender Maximalwert?
|
|
Moin!
Ich stehe vor einem ziemlich kniffligen Problem, das eigentlich gar nicht so knifflig sein sollte, wie es ist...
Und zwar möchte ich in Echtzeit einen gleitenden Maximalwert von einem Signal erhalten. Das Zeitfenster, über das das Signal betrachtet werden soll, sollte dabei einstellbar sein. Es muss aber nicht zwingend während der Simulation veränderbar sein.
Das dümmste, was mir eingefallen ist, ist eine Konstruktion aus zigtausend Unit-Delays in Reihe. Da bestimme ich dann den Maximalwert aller Ausgangswerte der Unit-Delay-Blöcke. Das funktioniert auch, ist allerdings ziemlich langsam. Und schlecht einstellbar noch dazu.
Gibt es da vielleicht eine etwas clevere Lösung?
Markus
|
|
|
|
|
Tim |
Forum-Century
|
|
Beiträge: 140
|
|
|
|
Anmeldedatum: 03.11.07
|
|
|
|
Wohnort: Stuttgart
|
|
|
|
Version: 2011b+aktuellstes Release
|
|
|
|
|
|
Verfasst am: 10.08.2009, 11:53
Titel:
|
|
Den "weighted moving average"-block mit Vektor
Mit (zur Laufzeit) variabler Länge wird das ein wenig aufwändiger. Auch das obige ließe sich wohl performanter lösen, aber für den ersten Schuss sollte das ausreichen.
|
|
|
Epfi |
Themenstarter
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.08.2009, 12:32
Titel:
|
|
Hallo Tim,
danke erstmal für die Antwort! Ich suche den Maximalwert in einem Zeitfenster von z.B. "jetzt-30s" bis "jetzt", nicht den Mittelwert. Das ganze soll zur Normierung eines Signals dienen, das ich vor der Simulation noch nicht kenne.
Hatte beim Mittagessen aber gerade noch eine gute Idee. Und zwar ein Function-Block der den aktuellen Wert an einen Vektor anhängt und den ältesten Wert aus dem Vektor löscht. Also sozusagen ein Schieberegister in einem Vektor statt mit lauter 1/z-Gliedern.
Wie das mit der definierten Zeit hinhaut, muss ich mal gucken...
|
|
|
Tim |
Forum-Century
|
|
Beiträge: 140
|
|
|
|
Anmeldedatum: 03.11.07
|
|
|
|
Wohnort: Stuttgart
|
|
|
|
Version: 2011b+aktuellstes Release
|
|
|
|
|
|
Verfasst am: 10.08.2009, 14:05
Titel:
|
|
Peinlich, da hab ich mich total verlesen
Das Problem klingt interessant. Spontan fällt mich auch kein besserer Algorithmus ein als immer wieder das Max aus dem Vektor rauszusuchen. Ich werde mir da mal interessehalber Gedanken machen.
|
|
|
Epfi |
Themenstarter
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.08.2009, 14:16
Titel:
|
|
Habe es jetzt mit einem eingebautem m-file zusammengefrickelt. Ist schon bedeutend schneller, aber immernoch nicht wirklich überzeugend.
Ist nicht sonderlich schön mit der persistent-variablen. Hatte zuvor eine Schleife um die Funktionsbox rumgelegt und dort ein Initial-Condition-Block drin zur Initialisierung des Vektors. Da hat er dann wegen algebraic loop gemeckert. Das tut er in der aktuellen Lösung auch, habe es dann aber nicht wieder zurückgebaut.
Auch, wenn ich das ganze als s-function (m-file) anlege, ist es nicht wirklich schnell. Zumal die 1000 Werte noch um Faktor 10 zu wenig sind...
|
|
|
Volker81k |
Forum-Anfänger
|
|
Beiträge: 26
|
|
|
|
Anmeldedatum: 12.05.09
|
|
|
|
Wohnort: Zürich
|
|
|
|
Version: R2006a
|
|
|
|
|
|
Verfasst am: 11.08.2009, 09:06
Titel:
|
|
Hallo Martin,
ich habe einen Lösungsansatz für dich, der aber vorraussetzt, dass du ein Signal hast was während deines Zeitfensters anliegt.
Dabei wird dein Signal in einem Max-Block verglichen, der sich das grössere Signal selbst über einen speichernden Loop zuführt. Das ganze wird hübsch in ein Subsystem gepackt, das mit einem Enable-Eingang versehen ist, um den Zeitpunkt der Max-Wertbestimmung festzulegen.
Hilft dir das?
Viele Grüsse
Volker
Beschreibung: |
Maximalwertermittlung für einen einstellbaren Zeitraum |
|
Download |
Dateiname: |
GleitenderMax.mdl |
Dateigröße: |
27.72 KB |
Heruntergeladen: |
738 mal |
|
|
|
Epfi |
Themenstarter
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.08.2009, 09:29
Titel:
|
|
Markus, nicht Martin ;)
Mein Zeitfenster wandert über meine Messwerte. Ich möchte also immer den Maximalwert aus den letzten (z.B. 10) Sekunden. Wenn ein Maximalwert länger als 10 Sekunden zurückliegt, wird er nicht mehr beachtet und es gilt ein neuer.
In der Anwendung soll das ganze eine dynamische Normierung eines Signals werden.
Wenn ich das richtig sehe, ist bei Deiner Lösung das Zeitfenster über den Impuls oben fix, wandert also nicht mit. Im Prinzip wäre die Startzeit für den Impuls bei mir immer "aktuelle Zeit - Fenstergröße" und die Endzeit "aktuelle Zeit" - kann man aber in dem Modell leider nicht so einbauen. Oder vertu ich mich da?
|
|
|
HansWerner |
Forum-Fortgeschrittener
|
|
Beiträge: 58
|
|
|
|
Anmeldedatum: 21.03.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.08.2009, 20:47
Titel:
|
|
Hallo Epfi,
beim Stichwort gleitender Maximalwert fällt mir sofort der Buffer-Block ein. Einstellung Überlappend. Nun aus den im Buffer befindlichen Werten den Maximalwert raussuchen.
|
|
|
Tim |
Forum-Century
|
|
Beiträge: 140
|
|
|
|
Anmeldedatum: 03.11.07
|
|
|
|
Wohnort: Stuttgart
|
|
|
|
Version: 2011b+aktuellstes Release
|
|
|
|
|
|
Verfasst am: 11.08.2009, 20:55
Titel:
|
|
Wäre es eventuell denkbar den Ansatz abzuändern und nicht eine gleitende Maximalwertsuche zu machen, sondern sowas wie eine kontinuierliche Spitzenwertmessung? Das wäre deutlich performanter und weniger Speicherlastig.
Ansonsten ist HansWerners Tip goldrichtig. Wusste gar nicht, dass es sowas fertig in SL gibt. In TL hab ich mir das immer selbst zusammengebaut
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|