Signalwertspitzen und Rauschunterdrückung

Ich habe einen Strom von Signalwerten (z. B. 10, 12, 13, 11, 15, 12.500, 10, 23, 25, 30, 200).

Wie Sie sehen, gibt es im Stream einige Störungen wie die Werte 500 und 200.

Wie kann ich dieses Rauschen beseitigen oder reduzieren?

Die Peaks werden anhand eines festen Schwellwertes erkannt (z. B. wenn der Signalwert +/- 50 beträgt, dann ist dieser Wert ein Peak).

Mein Algorithmus ist:

Ich habe versucht, eine Maske mit 10 Werten zu erstellen und dann den Durchschnitt davon zu berechnen. Durch Neigen dieser Maske über den gesamten Stream kann ich die Spitzen durch den Maskendurchschnitt ersetzen und dann die Maske um einen Wert verschieben.

Gibt es andere Algorithmen, um das Problem zu lösen?

Bewertung Mein Algorithmus wird immer noch durch den Wert der Spitzen beeinflusst (natürlich) und auch wenn mehrere Spitzen nahe beieinander liegen (wie: 500.600.650.510,.. , 10,50), so dass der Maskendurchschnitt relativ zu den anderen Durchschnittswerten groß sein wird .

gibt es eine Lösung für dieses Problem?

Es gibt viele Algorithmen, um Rauschen in einer Sequenz von Samples anzugreifen. Um zu wissen, was angemessen ist, müssen Sie mehr über die Art des Rauschens, seine Korrelation zu realen Werten, die Sequenz, die Sie aus diesem magischen Filter für die obigen Werte sehen möchten, usw. erklären. Ohne das ist diese Frage viel zu vage.
Ich habe meine Frage bearbeitet und einige Beispiele gegeben. Bitte enthalte meine Frage !!
Ich glaube, Sie können Ihr Problem lösen, indem Sie einen Medianfilter anwenden
Hier geht es weder um spezifische Elektronikdesignprobleme, elektromagnetische Kräfte, Kommunikationsschemata noch um Firmware für Bare-Metal- oder RTOS-Anwendungen. Es geht um Signalverarbeitung und gehört als solche zur Signalverarbeitung.

Antworten (1)

Ein Tiefpassfilter könnte für Sie funktionieren.

Je nach Anwendung könnte dies so primitiv wie ein rechteckiger Filter sein, bei dem Sie jeden Wert durch den Durchschnitt der fünf Werte um ihn herum ersetzen, oder Sie könnten einzelnen Werten eine Gewichtung hinzufügen.

Sie könnten mit verschiedenen Filterkernen experimentieren:

  • [ .2 .2 .2 .2 .2 ] (gleiches Gewicht)
  • [ .1 .2 .4 .2 .1 ] (keine negativen Gewichte)
  • [ .2 -.3 1.2 -.3 .2 ] (bessere Spitzenunterdrückung)
  • [ .1 .2 .3 .3 .1 ] (asymmetrisch)

usw.

Beachten Sie, dass Ihre Filter Energie > 1 haben ... um Komplikationen zu reduzieren, verwenden Sie normalisierte Filter (Energie = 1)
vielen Dank . Ich habe diese Idee bereits ausprobiert, funktioniert gut. aber wenn mehrere Spitzen nahe beieinander liegen (wie: 500.600.650.510,.. , 10,50), ist der Maskendurchschnitt relativ zu den anderen Durchschnittswerten groß.