2017-10-20 1 views
0

ich mit Bibliothek „scipy.signal“ in Python arbeitet, und ich habe den nächsten Code:Fehler bei Padlen in signal.filtfilt in Python

from scipy import signal 

b = [ 0.001016 0.00507999 0.01015998 0.01015998 0.00507999 0.001016 ] 

a = [ 1.   -3.0820186 4.04351697 -2.76126457 0.97291013 -0.14063199] 
data = [[ 1.] 
[ 1.] 
[ 1.] 
...] 
# length = 264 
y = signal.filtfilt(b, a, data) 

Aber wenn ich den Code ausführen bekomme ich die Meldung nächsten Fehler :

The length of the input vector x must be at least padlen, which is 18. 

Was könnte ich tun?

Antwort

1

Es scheint, dass data ein zweidimensionales Array mit Form (264, 1) ist. Standardmäßig filtert filtfilt entlang der letzten Achse des Eingabearrays. In diesem Fall versucht es, entlang einer Achse zu filtern, bei der die Länge der Daten 1 ist, was für die Standardauffüllmethode nicht lang genug ist.

Ich nehme an, Sie wollten data als eindimensionales Array interpretieren. Sie können das Argument hinzu axis=0

y = signal.filtfilt(b, a, data, axis=0) 

entlang der ersten Dimension zu filtern (d.h. durch die Säule), in welchem ​​Fall der Ausgang y auch Form aufweisen (264, 1). Alternativ können Sie die Eingabe in ein eindimensionales Array konvertieren, indem Sie sie mit np.ravel(data) abflachen oder mithilfe der Indizierung die erste (und einzige) Spalte data[:, 0] auswählen. (Letzteres funktioniert nur, wenn data tatsächlich ein numpliges Array und keine Liste von Listen ist.)

y = signal.filtfilt(b, a, np.ravel(data)) 

In diesem Fall wird der Ausgang y wird auch ein eindimensionales Array sein, wobei Form (264,).

Verwandte Themen