Laden...

Peaks im Array normalisieren / angleichen

Erstellt von stephan.opitz vor 2 Jahren Letzter Beitrag vor 2 Jahren 256 Views
S
stephan.opitz Themenstarter:in
42 Beiträge seit 2008
vor 2 Jahren
Peaks im Array normalisieren / angleichen

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; 
        } 

309 Beiträge seit 2020
vor 2 Jahren

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?

S
stephan.opitz Themenstarter:in
42 Beiträge seit 2008
vor 2 Jahren

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.

309 Beiträge seit 2020
vor 2 Jahren

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.