2016-05-31 9 views
1

Ich habe ein Signal aus der Atmung Aufzeichnung mit vielen Spikes aufgrund Gähnen zum Beispiel. Ich habe versucht, es mit Rolling Mean Funktion von Pandas zu entfernen, aber es hat nicht geholfen. Der grüne Bereich in diesem Diagramm ist das Ergebnis der Verwendung von rollendem Mittelwert.Entfernen Sie Spikes aus Signal in Python

import pandas as pd 

RESP=pd.DataFrame(RESP) 
RESP_AV=pd.rolling_mean(RESP,50) 

Ich weiß nicht viel über die Datenfilterung und ich konnte keine andere Art und Weise in Pandas finden entfernen diese Spitzen so meine Frage ist, wo für Antwort zu suchen. Ergebnis RESP.head() ist:

0 -2562.863389 
1 -2035.020403 
2 -2425.538355 
3 -2554.280563 
4 -2242.438367 
6.7636961937 

enter image description here

+0

Müssen Sie vielleicht nur die Fenstergröße erhöhen? Sieht so aus, als hätten Sie 4 Millionen Datenpunkte, 50 könnten zu klein sein, wenn der Spike selbst aus mehreren Datenpunkten besteht? – Stefan

+0

Was ist das Problem? der Unterschied (Grünfläche)? oder dass der Tiefpass das ursprüngliche Signal zu sehr verändert hat? – xvan

+0

@Stefan Ich habe versucht, Fenstergröße auf sogar 50000 zu erhöhen, aber es ruiniert nur die Handlung – wiedzminYo

Antwort

0

ich zwei Möglichkeiten kenne, mit dieser zu tun:

Entwurf einen besseren Filter:

1) Bestimmen Ihr Signalband:

Vergleichen Sie ein Spektrogramm Ihres Signals mit Ihrem Zeitsignal, vergleichen Sie e) die Nicht-Spike-Segmente mit den Spike-Segmenten, um die maximale Nutzfrequenz (Cutoff-Frequenz) und die minimale Spike-Manifestation (Stopp-Frequenz) zu bestimmen

2) Entwerfen Sie einen LowPass-Filter: Wenn Sie Matlab verwenden, verwenden Sie fdatool, wenn Sie wollen python verwenden, verwenden remez

3) bedeuten, dass benutzerdefinierte LowPass Filter verwenden Sie anstelle von rollen,

, wenn Sie das Ergebnis nicht gefällt, Redesign des Filters (Band Gewicht und Fenstergröße)

Erkennung + Substitution :

1) Entfernen Sie den Mittelwert des Signals.

2) Verwenden Sie ein Differenzierfilter und einen Schwellenwert, um die Spitzen zu erkennen.

3) Schneiden all Spitzen aus dem Signal (sie von 0'en ersetzen)

4) Optional Filter der Spitze aus dem geschnittenen Segment (siehe oben beschriebene Methode)

5) Für jede abgeschnittene peak , finde den maximalen Kreuzkorrelationskoeffizienten zwischen dem geschnittenen Segment und dem Signal ohne Spitzen, ersetze das Segment und mache einen Ein-/Ausblendeffekt, um das Einfügen zu glätten.

Verwandte Themen