2017-12-30 40 views
1

Ich habe ein Problem mit der Anwendung des Butterworth-Hochpassfilters auf meine Daten. Ich möchte Filter für Bx und By Matrix drucken. Wie Sie sehen, ich sowohl positive als auch negative Werte haben,Anwenden des Butterworth-Hochpassfilters

wie math.fabs() auf Bx anzuwenden und By nur positive Werte zu bekommen?

Für meine Hochpassfilter habe ich diese Anforderungen:

Fc = 2 Hz

Ich mag würde Werte unter 100 pT abzuschneiden.

Ein Teil meiner aktuellen Code ist:

plt.ylabel('Pico Tesle [pT]') 
plt.xlabel('Time [ms]') 
plt.grid() 
plt.plot(time[51:-14], Bx[51:-14], label='Canal 1', color='r', linewidth=0.1, linestyle="-") 
plt.plot(time2[1:-14], By[1:-14], label='Canal 3', color='b', linewidth=0.1, linestyle="-") 
plt.legend(loc='upper right', frameon=False,) 

Und ein Diagramm ist: enter image description here

UPDATE: ich diese Funktion verwendet haben, absolute Werte für Bx zu erzeugen und durch die Matrix.

plt.subplot(413) 
np.absolute(fft1) 
plt.plot(time[51:-14], np.absolute(fft1), color='r', linewidth=0.1, linestyle='-') 
plt.grid() 

plt.subplot(414) 
np.absolute(fft2) 
plt.plot(time2[1:-14], np.absolute(fft2), color='b', linewidth=0.1, linestyle='-') 
plt.grid() 

Was ich dank, das empfangen wird, dass alle meine Messungen (hier atmosphärischen Entladungen sind) sind nur in positive Werte (pT - Pikotesla). Das erste Diagramm zeigt Kanal 1, das zweite Diagramm Kanal 3 und das dritte Diagramm beide Kanäle (Kanäle).

Nein, ich brauche (nehme ich an) einen Hochpassfilter, um alle Messungen unter 100 pT abzuschneiden. Irgendwelche Ideen? enter image description here

+1

Ein Hochpassfilter würde die Amplitude von Frequenzkomponenten reduzieren, die unter der Grenzfrequenz liegen. Da Ihre Daten Variationen bei Frequenzen oberhalb Ihrer 2Hz-Grenze zeigen, werden sie kaum von einem Hochpassfilter beeinflusst. Wolltest du stattdessen einen Tiefpassfilter verwenden? Andernfalls würde 'numpy.clip (np.absolute (fft1), 0,100)' die Amplitude begrenzen (ist aber eine verlustreiche Operation, wenn es sich um ein Problem handelt). – SleuthEye

+0

Nun, das ist eine gute Idee, aber ich kann mir keine Datenverluste leisten. Um genauer zu sein, muss ich alle Messungen über 100 pT bekommen, vielleicht ist meine Idee, Hochpassfilter zu verwenden, sinnlos, aber nichts kam mir besser in den Sinn. – Hiddenguy

Antwort

0

Ich habe diese Methode verwendet, um das Problem zu lösen.

Wn = float(1)/HalfSampling 
b, a = signal.butter(3, Wn, 'high', analog=False) 
BxHPF = signal.filtfilt(b, a, Bxfft) 
ByHPF = signal.filtfilt(b, a, Byfft) 
plt.plot(BxTime, BxHPF, label='Canal 1', color='r', linewidth=0.5, linestyle="-") 
plt.plot(ByTime, ByHPF, label='Canal 3', color='b', linewidth=0.5, linestyle="-") 
Verwandte Themen