Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Peaks im Array normalisieren / angleichen
stephan.opitz
myCSharp.de - Member



Dabei seit:
Beiträge: 42

Themenstarter:

Peaks im Array normalisieren / angleichen

beantworten | zitieren | melden

Hallo,

ich habe ein Array mit Double Werten. Alle sind positiv. der höchste Wert ist 320, der niedrigste bei 1. Die Verlauf ist nicht periodisch.

Im Grunde möchte ich alle Peaks auf am Besten 320 normalisieren. Also irgendwie eine Dynamic, die die kleinen Werte klein lässt, die mittelgroßen Peaks auf 320 hebt und die großen auch auf 320 anhebt oder da lässt.

Der folgende Code strecht nur linear alles hoch. Irgendeine Idee?


        public static double[] NormalizeStretch(double[] array, double newMin, double newMax) 
        { 
            double minValue = double.MaxValue; 
            double maxValue = double.MinValue; 
 
            for (int index = 0; index < array.Length; index++) 
            { 
                if (array[index] < minValue) minValue = array[index]; 
                if (array[index] > maxValue) maxValue = array[index]; 
            } 
 
            double scaler = (newMax - newMin) / (maxValue - minValue); 
 
            for (int index = 0; index < array.Length; index++) 
            { 
                array[index] = (array[index] - minValue) * scaler + newMin; 
            } 
 
            return array; 
        } 
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von stephan.opitz am .
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 307

beantworten | zitieren | melden

Also so ganz verstehe ich deine Anforderung nicht, aber wieso machst du nicht einfach einen Schwellwert (könnte sich ja am Mittelwert orientieren, etc.) ab dem die Peaks auf 320 gehoben werden und ansonsten beschnitten?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JimStark am .
private Nachricht | Beiträge des Benutzers
stephan.opitz
myCSharp.de - Member



Dabei seit:
Beiträge: 42

Themenstarter:

beantworten | zitieren | melden

Das ist schonmal eine tolle Idee. Mir wäre eine gewisse Dynamik noch lieber. Und alle einfach drüber zu erhöhen macht die Peaks auch irgendwie kaputt.

Ich habe mal ein Bild rangehangen. Was denkst du? Die roten Kringel sind nämlich nicht alle über dem Mittelwert.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von stephan.opitz am .
Attachments
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 307

beantworten | zitieren | melden

Ach jetzt versteh ich was du meinst.
Mit dem Mittelwert müsstest du das Eingangssignal mit einem laufenden Fenster betrachten und kannst dann die Peaks so erkennen.

Ich glaube das ist was du suchst: peak-signal-detection-in-realtime-timeseries-data
Da ist so gar eine C# Implementierung dabei.
private Nachricht | Beiträge des Benutzers