0 Daumen
682 Aufrufe

Aufgabe:

1. Die Erfassung von Messwerten ist oft mit Störsignalen, Oberwellen oder Grundschwingungen
beaufschlagt. Eine wichtige Teilaufgabe besteht darin, das Maximum (Extremwert) in einem gegebenen
Intervall innerhalb eines solchen Signals zu ermitteln. Gehen Sie davon aus, dass sie
Teil eines größeren Entwicklungsteams sind und hier eine bestimmte Teilaufgabe zu lösen haben.
Die Signalerfassung und weitere Verarbeitung wird durch andere Teammitglieder realisiert.


Ihre Teilaufgabe wird durch die Festlegung einer verbindlichen Schnittstelle (Funktionssignatur)
gekapselt. Die von ihnen zu entwickelnde Funktion wird als digitaler Filter in einem großen und
unter Umständen sehr schnellen kontinuierlichen Datenstrom bei jedem einzelnen gemessenen
Wert aufgerufen. Sie haben keinen Zugriff auf den gesamten Datenstrom, sondern immer nur
auf den letzten gemessenen Wert. Für die Realisierung solcher Teilaufgaben werden oft Rahmenanwendungen
mit Testklassen zur Verfügung gestellt. Die Abbildung zeigt das Ergebnis der
Lösung.

Entwickeln Sie eine Funktion zur Ermittlung des Maximums mit folgender Signatur:

double getFlowPoint(double value)
{
double maximumValue = value;
// ermitteln Sie das Maximum der letzten 500 Werte
// versuchen Sie möglichst wenig Speicher zu belegen
// im Signal treten ca. 15 bis 20 Maxima in einem
// Intervall von 500 Messwerten auf
return maximumValue;
}


Text erkannt:

munumu
Mhumun

Problem/Ansatz:

leider bin ich nicht so Strong im Programieren. Kennt sich hier jemand aus und weiß wie das geht?

Vielen Dank!

Avatar von
Die Abbildung zeigt das Ergebnis der Lösung.

Zeige die Abbildung.

Ich habe ebenfalls diese Aufgabe bei der ich nicht weiterkomme. Die Abbildung zeigt nur eine Funktion in einer Rahmentestanwendung.

Sie soll mit der angegegeben Signatur in C++ gelöst werden.


Ich hoffe jemand kann uns da helfen :)

Entwickeln Sie eine Funktion zur Ermittlung des Maximums

Es gibt also ein einziges Maximum. Dieses soll ermittelt werden.

Welche Qualitätsanforderungen gibt es an das Ergebnis? Muss das genaue Maximum ermittelt werden oder reicht eine heuristische Lösung. Im letzten Fall könnte man Mittelwert und Varianz gleitend berechnen und dann mittels Normalverteilung schätzen, was das Maximum ist.

// im Signal treten ca. 15 bis 20 Maxima in einem
// Intervall von 500 Messwerten auf

Ja was denn nun. Ich dachte es gäbe nur ein einziges Maximum.

Falls es sich bei den 15 bis 20 Maxima um relative Maxima handelt, welches soll zurückgegeben werden? Das neueste oder das höchste?

Die Erfassung von Messwerten ist oft mit Störsignalen ... beaufschlagt.

Dann wird es bei 500 Messwerten mit Sicherheit mehr als 15 bis 20 Stellen mit relativem Maximum geben, das heißt Stellen an denen der Messwert größer ist als an der unmittelbar vorhergehenden Stelle und größer als an der unmittelbar folgenden Stelle ist.

// versuchen Sie möglichst wenig Speicher zu belegen

Sind 5kB in Ordnung oder ist das schon zu viel.

Angesichts der Tatsache, dass die Funktion bei jeder Messung ausgeführt wird, scheint mir Laufzeit kritischer zu sein, solange der Speicherverbrauch konstant ist.

Die Abbildung zeigt nur eine Funktion in einer Rahmentestanwendung.

Ich würde trotzderm gerne das Bild sehen.

1 Antwort

0 Daumen

Da die Signalerfassung und verarbeitung laut Aufgabenstelllung nicht nicht Teil der Aufgabe sind, würde ich davon ausgehen, dass immer das letzte Maximum zurück gegeben werden soll, da dieses ermittelte Maximum im Anschluss direkt weiter verarbeitet würde. Laut Aufgabenstellung hat man ja auch immer nur aufden letzten gemessenen Wert zugriff und nicht auf den gesamten Datenstrom.

Hier nochmal die Signatur, mit der gearbeitet werden soll, vermutlich soll der Code simple sein und nur ein paar Zeilen umfassen:

double getFlowPoint(double value)
{
double maximumValue = value;
// ermitteln Sie das Maximum der letzten 500 Werte
// versuchen Sie möglichst wenig Speicher zu belegen
// im Signal treten ca. 15 bis 20 Maxima in einem
// Intervall von 500 Messwerten auf
return maximumValue;
}


Gibt es nicht eine Möglichkeit, in der, der letzte gemessene Wert genommen wird, verglichen wird und anschließend als Maximum hinterlegt wird oder nicht. Und anschließend wird das dann mit dem nächsten Wert getan?

Avatar von

Diese Möglichkeit gibt es. Dazu könnte eine statische Variable verwendet werden. Man könnte sogar die letzten 500 Messwerte hinterlegen.

Wie könnte so etwas dan aussehen?

double getFlowpoint(double value)

{

      double maximumValue=value;

      if(value>maximumValue) {

      maximumValue=value;

......


Aber wie baue ich da dieses Intervall der letzten 500 Werte ein.

Static als Zähler oder nimmt man dann doch einen for befehl anstatt if-else.

Da ich anfänger bin, bin ich da gerade echt überfragt...

Hier ist das Bild:

getFlowpoint wird ja nur dazu da sein einen Messwert abzugreifen, welcher anschließend mit dem aktuell Maximum verglichen wird.

Bild.png

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community