Einfache Datenfilterung

mamir00

Mitglied
hey leute ,kann jemand mir bei meine Aufgabe helfen ?
(Wir simulieren die Filterung von Sensor-Daten mit einem einfachen Mittelwert-Filter. Angenommen, wir haben einen Sensor, der Messdaten von einem Prozess empf¨angt. Wir wollen einen gleitenden Mittelwert uber 3 Beispiele berechnen. Wenn besonders ¨ extreme Werte auftreten, soll die Filterung beendet werden und ein Alarm ausgel¨ost werden. Der Sensor wird durch einen gegebenen Zufahlszahlengenerator simuliert)

Implementieren Sie die Filter-Funktion, welche solange durch den Aufruf von nextSample ein neue Daten akquiriert und filtert, bis der Sensor-Wert gr¨oßer als 3.14 ist.
 

Anhänge

  • PR1_Praktikum5 (1).pdf
    112,3 KB · Aufrufe: 15

mamir00

Mitglied
ja habe ich .in der anhang kannst du es finden ..
Java:
public class MovingAverageFilter{
  
  
  
    public static void main(String[] args){
         SensorData  SensorData=new  SensorData();
       
       
       
         double  s_t0,s_t1,s_t2;
        s_t0=0;
        s_t1=0;
        s_t2=0;
        for (int i=0;i <10.;i++)
        {
            s_t0= SensorData.nextSample();
            System.out.printf("%f\n",s_t0);
            s_t0=s_t1;
            s_t1=s_t2;
        }
        static void filter(){
            Double result ;
      
      
      
            {
                if (s_t0>3.14)
                {
                    System.out.print("ENDE. ");
              
                }else {
                    Result=(s_t0+s_t1+s_t2)/3;
                    System.out.print("NEUER FILTER ");
                }
        return result;
                }
        }
    }
}
 

mamir00

Mitglied
ich bin jetzt so weit aber hab ich noch Fehler bei compilen .
Java:
public class MovingAverageFilter{
  

    public static void main(String[] args){
        
        SensorData  SensorData=new  SensorData();
       
       
       
         double  s_t0,s_t1,s_t2;
     
        s_t1=0;
        s_t2=0;
        for (int i=0;i <10.;i++)
        {
            s_t0= SensorData.nextSample();
            filter(s_t0,s_t1,s_t2);
           
            s_t0=s_t1;
            s_t1=s_t2;
            if(s_t0>=3.14){
              
                break ;
        }
}
        }
        static void filter(double a,double b,double c){
            double result ;
                         
            Result=(a+b+c)/3;
                  
                  
                           System.out.print("Result ist  "+result);
                }
       
               
       
    }
 
Zuletzt bearbeitet von einem Moderator:

Bible Man

Mitglied
Zu deinem Code:
- Wieso zählt deine for-Schleife bis 10. statt bis 10?
- Wo kommen die Parameter a,b und c deiner filter-Methode her?
- Die meisten Variablen hast du in der main-Methode deklariert anstatt in der filter-Methode

Wie wär's hiermit?:
public class MovingAverageFilter{
  public static void main(String[] args){
    filter();
  }
  static void filter() {
    SensorData sd = new SensorData();
    double s_t0 = sd.nextSample();
    double s_t1 = 0.;
    double s_t2 = 0.;
    double result;
    while (s_t0 <= 3.14) {
      result = (s_t0 + s_t1 + s_t2) / 3.;
      System.out.println(result);
      s_t2 = s_t1;
      s_t1 = s_t0;
      s_t0 = sd.nextSample();
    }
  }
}
 

White_Fox

Top Contributor
Ich würde das mit einem Stream machen, aber ok.
Sei bitte so gut und nutze die Codetags und Einrückungen. Dann kann man den Code auch lesen.

Ansonsten: Versuche doch mal verbal zu beschreiben was du machen willst. Das sollte man sowieso immer tun, bevor man Code in die Tastatur hackt.
 

httpdigest

Top Contributor
Vielleicht meint @White_Fox sowas?
Java:
static void filter() {
  java.util.stream.DoubleStream
    .iterate(SensorData.nextSample(), d -> d <= 3.14, d -> SensorData.nextSample())
    .map(new java.util.function.DoubleUnaryOperator() {
      double[] s = new double[3];
      public double applyAsDouble(double v) {
        System.arraycopy(s, 0, s, 1, 2);
        return ((s[0] = v) + s[1] + s[2]) / 3;
      }
    })
    .forEach(System.out::println);
}
allerdings ist das natürlich eher "naja", weil es ein stateful Stream ist, da die map() Operation einen Zustand hat.
(das Array nehme ich nur, um ein paar explizite Zuweisungen zu sparen und das "Shiften" der Werte per arraycopy() zu lösen)
 

White_Fox

Top Contributor
Streams sind dafür relativ umständlich, da man ein Fenster über drei Werte braucht, die einfachere Lösung ist da so eine Schleife. Oder schwebt dir da schon eine konkrete Implementierung vor?
Ich hab den TS eher so verstanden, daß er drei Werte verarbeiten soll. Das ist nicht dasselbe, wie auf drei Werte zu begrenzen (so verstehe ich das mit der Schleife jedenfalls).

Eine konkrete Implementierung hab ich da nicht, ich habe mal ein Javaprogramm geschrieben das über eine serielle Schnittstelle kommunizieren sollte. Da hab ich einen "Kurzschlußstream" (eigentlich zwei Streams, wobei der eine wieder ausgibt was in den anderen reingeht) geschrieben, zum Testen und um die Hardware zu simulieren.

Als sehr aufwendig habe ich das aber jedenfalls nicht in Erinnerung. Andererseits - wenn du den Zwölfzeiler von @httpdigest aufwendig findest...
 

mrBrown

Super-Moderator
Mitarbeiter
Andererseits - wenn du den Zwölfzeiler von @httpdigest aufwendig findest...
Aufwändig nicht, aber zumindest etwas umständlich, auch weil man da etwas gegen die Spezifikation verstoßen muss — die fordert für map eine stateless function, hier braucht man aber eine stateful function. Klappt in dem Fall zwar trotzdem, aber ist nicht schön :)
 

HelpInneed

Mitglied
Zu deinem Code:
- Wieso zählt deine for-Schleife bis 10. statt bis 10?
- Wo kommen die Parameter a,b und c deiner filter-Methode her?
- Die meisten Variablen hast du in der main-Methode deklariert anstatt in der filter-Methode

Wie wär's hiermit?'s hiermit?:
public class MovingAverageFilter{
  public static void main(String[] args){
    filter();
  }
  static void filter() {
    SensorData sd = new SensorData();
    double s_t0 = sd.nextSample();
    double s_t1 = 0.;
    double s_t2 = 0.;
    double result;
    while (s_t0 <= 3.14) {
      result = (s_t0 + s_t1 + s_t2) / 3.;
      System.out.println(result);
      s_t2 = s_t1;
      s_t1 = s_t0;
      s_t0 = sd.nextSample();
    }
  }
}
Ich bin neu und habe dir gleiche Aufgabe erhalten. Könnte mir einer bitte erklären, wieso man überhaupt hinter eine Zahl ein Punkt setzt, also was das bewirkt. Also 10. zb…?
Danke im Voraus fürs aufklären😊
 

httpdigest

Top Contributor
Der Punkt macht aus dem Literal ein double. 3 ist also ein int, während 3. ein double-Literal ist.
Ist in diesem konkreten Fall aber unnötig, da s_t0, s_t1 und s_t2 sowieso double sind.
Aber es ist manchmal hilfreich, um eine ungewollte Ganzzahldivision zu verhindern.
Oder, wie in diesem Fall, um zu verdeutlichen, welche Typen die Operanden (also Zähle _und_ Nenner haben).
 

HelpInneed

Mitglied
Der Punkt macht aus dem Literal ein double. 3 ist also ein int, während 3. ein double-Literal ist.
Ist in diesem konkreten Fall aber unnötig, da s_t0, s_t1 und s_t2 sowieso double sind.
Aber es ist manchmal hilfreich, um eine ungewollte Ganzzahldivision zu verhindern.
Oder, wie in diesem Fall, um zu verdeutlichen, welche Typen die Operanden (also Zähle _und_ Nenner haben).
Vielen Dank, ich hätte nicht gedacht das hier alle so schnell antworten. Ihr hilft den erstes sehr🥰
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
O Ganz einfache Frage - Array Java Basics - Anfänger-Themen 5
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
J Einfache pub/sub Lösung mit ausführlicher Doku Java Basics - Anfänger-Themen 5
R Gibt es Eine einfache Programierung dieser Methoden Java Basics - Anfänger-Themen 8
K einfache Kombinatorik Java Basics - Anfänger-Themen 4
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
P Erste Schritte Einfache For Schleife Java Basics - Anfänger-Themen 10
M Einfache Java Operation, cheggs net Java Basics - Anfänger-Themen 2
V Erste Schritte Einfache Rechnung mit Exponenten Java Basics - Anfänger-Themen 3
G einfache Leet-Übersetzung implementieren und benutzen Java Basics - Anfänger-Themen 14
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
C Extrem einfache Aufgabe falsch beantwortet :$ Java Basics - Anfänger-Themen 6
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Sehr einfache Java-Programme Java Basics - Anfänger-Themen 24
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
J Einfache Designfrage Java Basics - Anfänger-Themen 4
R Methoden Einfache Loops? Java Basics - Anfänger-Themen 8
E einfache Frage zu private Java Basics - Anfänger-Themen 26
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
F Einfache Klassen für Datum und Zeit Java Basics - Anfänger-Themen 3
Spin Einfache Anfänger Frage setVisible von Panels Java Basics - Anfänger-Themen 5
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
D einfache Quizfrage programmieren Java Basics - Anfänger-Themen 11
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10
K Einfache Rekursion - Wert wird nicht in Variable gespeichert Java Basics - Anfänger-Themen 7
U Einfache Aufgabe Java Basics - Anfänger-Themen 5
E Einfache Frage zur Parameterübergabe in Methoden Java Basics - Anfänger-Themen 8
M einfache Übungsaufgaben gesucht Java Basics - Anfänger-Themen 7
M Einfache Rechnung(R=U/I) Java Basics - Anfänger-Themen 12
D Wohl eine einfache Frage... Java Basics - Anfänger-Themen 2
W Einfache Passwortabfrage funktioniert nicht Java Basics - Anfänger-Themen 3
P einfache GUI-Elemente Java Basics - Anfänger-Themen 10
F Vererbung (einfache Frage) Java Basics - Anfänger-Themen 5
S 2 Einfache Fragen (Exception Breakpoint, Konstruktor) Java Basics - Anfänger-Themen 4
L einfache Klasse erstellen Java Basics - Anfänger-Themen 16
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
P Einfache Bedingung (?) in Java Java Basics - Anfänger-Themen 3
W Einfache Rekursion Java Basics - Anfänger-Themen 14
T Einfache Textausgabe .java unter OS X Java Basics - Anfänger-Themen 13
B einfache Rekursion Java Basics - Anfänger-Themen 9
A [Hilfe] einfache Aufgabe Java Basics - Anfänger-Themen 26
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
M einfache java application Java Basics - Anfänger-Themen 4
S Kann einfache Texteingabe nicht auswerten! Java Basics - Anfänger-Themen 3
M einfache frage zum Jdk-Compiler Java Basics - Anfänger-Themen 3
Spin einfache Frage zu Klassen Java Basics - Anfänger-Themen 12
J einfache Tastendrücke in einem JFrame abfragen Java Basics - Anfänger-Themen 2
C "einfache" If-Abfrage Java Basics - Anfänger-Themen 15
H Einfache Ausgabe eines Arrays in einen File Java Basics - Anfänger-Themen 8
F Einfache Liste hinten was einfügen Java Basics - Anfänger-Themen 3
L Einfache Umrechnung Java Basics - Anfänger-Themen 2
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
K einfache Multiplikation Java Basics - Anfänger-Themen 6
S Einfache Rechnung mit Schleife Java Basics - Anfänger-Themen 10
G einfache Swing-GUI Java Basics - Anfänger-Themen 3
F Einfache Tastatureingabe Java Basics - Anfänger-Themen 2
L [gelöst] Einfache Aufgabe, läuft aber nicht. Java Basics - Anfänger-Themen 8
S "einfache Klassengeschichten" keine Fehler, läuft Java Basics - Anfänger-Themen 2
R Einfache MVC-Uhr. MVC richtig umgesetzt? [Überarbeitet] Java Basics - Anfänger-Themen 5
A Einfache Frage zur Mehrfachvererbung Java Basics - Anfänger-Themen 3
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
J eine einfache liste Java Basics - Anfänger-Themen 17
D Suche einfache Übungsaufgaben für den JavaCreator! Java Basics - Anfänger-Themen 5
R Einfache Messagebox Java Basics - Anfänger-Themen 9
N einfache Adressdatenbank in Textdatei Java Basics - Anfänger-Themen 8
I einfache Wiedergabe Java Basics - Anfänger-Themen 2
B Warum hat dieser einfache Algorithmus lineare Laufzeit? Java Basics - Anfänger-Themen 3
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K einfache Umfang und Flächenberechnung mit interfaces Java Basics - Anfänger-Themen 3
M Einfache HTML Mail versenden , suche Beispiel Java Basics - Anfänger-Themen 5
L MVC-einfache frage Java Basics - Anfänger-Themen 13
M einfache schleife Java Basics - Anfänger-Themen 7
M Einfache Schleife Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben