Es gab eine Rauschentfernungsmethode, von der ich überzeugt war, dass "es eine solche Methode gibt" in Kaggles Kernel (jetzt Notizbuch), also werde ich zusammenfassen, was ich hier und da untersucht habe.
Es gibt eine Methode namens ** Wavelet-Umwandlung ** als Analysemethode für ein bestimmtes Signal oder eine bestimmte Wellenform. Ich denke, Sie stellen sich die Fourier-Transformation oft als Analysemethode vor, aber während die Fourier-Transformation die Wellenform in die Summe der Dreiecksfunktionen (sai, kosai) erweitert, zerlegt die Wavelet-Transformation sie in eine Wellenform beliebiger Form. Kann gemacht werden. (Und es gibt eine inverse Umwandlung)
Wenn daher eine teilweise charakteristische Welle (** Mutter-Wavelet **) in der gegebenen Wellenform durch Zerlegen der Welle als Basis bestätigt werden kann, ist es möglich zu bestimmen, in welcher Zeitzone und Regel die Charakteristik erscheint. Du kannst es überprüfen. (Der Koeffizient, der bei der Zerlegung auftritt, wird als ** Wavelet-Koeffizient ** bezeichnet.)
Wenn daher die Form des Rauschens erfasst werden kann, wird eine Wavelet-Umwandlung unter Verwendung als Mutter-Wavelet durchgeführt, der Rauschteil wird durch 0 ersetzt, und dann wird die inverse Umwandlung durchgeführt, um eine rauschfreie Wellenform zu erhalten.
Nun ist die Funktion, die den obigen Mechanismus ergab, wie folgt.
import numpy as np
import pywt
def maddest(d, axis=None):
return np.mean(np.absolute(d - np.mean(d, axis)), axis)
def denoise(x, wavelet='db', level=1):
coeff = pywt.wavedec(x, wavelet, mode="per")
sigma = (1/0.6745) * maddest(coeff[-level])
uthresh = sigma * np.sqrt(2*np.log(len(x)))
coeff[1:] = (pywt.threshold(i, value=uthresh, mode='hard') for i in coeff[1:])
return pywt.waverec(coeff, wavelet, mode='per')
Der erste Def gibt die Berechnung der durchschnittlichen absoluten Abweichung an Die Abweichung ist die Differenz zwischen den einzelnen Daten und dem Durchschnitt, die absolute Abweichung ist der absolute Wert der Abweichung und die durchschnittliche absolute Abweichung ist die absolute Abweichung geteilt durch die Grundgesamtheit, dh den Durchschnitt.
Beispiel: 4 Daten von 50 Punkten, 70 Punkten, 90 Punkten, 70 Punkten (durchschnittlich 70 Punkte) Die Abweichungen betragen -20, 0, 20, 0, Absolute Abweichungen sind 20, 0, 20, 0, Die durchschnittliche absolute Abweichung beträgt (0 + 20 + 20 + 0) / 4 = 10.
Der zweite Def gibt die Entfernung von Wellenformrauschen an. Zuerst
coeff = pywt.wavedec(x, wavelet, mode='per')
Nun wird die gegebene Wellenform Wavelet-konvertiert. Parameter x sind Array-Daten, Wavelet ist der Name des Wavelets (in diesem Fall db), Mode ist die Randbedingung (per bedeutet, dass das rechte und linke Ende der Wellenform verbunden sind) Koeffizient wird als Liste von Wavelet-Koeffizienten angegeben. (Der erste von Anfang an ist jedoch nicht der Wavelet-Koeffizient. Der Rest der Mindestauflösung wird gespeichert.)
Nächster
sigma = (1/0.6745) * maddest(coeff[-level])
Dann wird die Größe des Rauschens angegeben. maddest (Koeffizient [-Level]) gibt die durchschnittliche absolute Abweichung des ersten Werts vom Ende der Liste der Wavelet-Koeffizienten an (je höher der Wert, desto höher die Auflösung. Die Einstellung ist Pegel). 0,6745 ist eine magische Sache, aber es ist eine Konstante, die das Verhältnis zwischen der Standardabweichung und der durchschnittlichen absoluten Abweichung ausdrückt.
Nächster
uthresh = sigma * np.sqrt(2*np.log(len(x)))
coeff[1:] = (pywt.threshold(i, value=uthresh, mode='hard') for i in coeff[1:])
Dann wird zuerst der Schwellenwert (uthresh) berechnet, und wenn der Wavelet-Koeffizient unter den Schwellenwert fällt, wird er als Rauschen betrachtet und 0 wird angegeben.
Schließlich
return pywt.waverec(coeff, wavelet, mode='per')
Dann wird die ursprüngliche Form durch die umgekehrte Umwandlung der Wavelet-Umwandlung wiederhergestellt. Da der Prozess der Untersuchung der Lücke mit dem Schwellenwert durchgeführt wird, kann eine rauschfreie Wellenform erhalten werden.
Ich wollte etwas mehr Theorie ausprobieren.
Discrete Wavelet Transform (DWT) Grundlagen der Wavelet-Konvertierung [Entfernung von Wavelet-Rauschen](https://medium.com/@junkoda/%E3%82%A6%E3%82%A7%E3%83%BC%E3%83%96%E3%83%AC%E3 % 83% 83% E3% 83% 88% E3% 81% AB% E3% 82% 88% E3% 82% 8B% E3% 83% 8E% E3% 82% A4% E3% 82% BA% E9% 99 % A4% E5% 8E% BB-fc20d82bcb80)
Recommended Posts