Scipy FFT-Frequenz-Analyse von sehr verrauschtes signal

Habe ich laut Daten, für die ich berechnen wollen, Frequenz und amplitude. Die Proben wurden alle 1/100stel Sek. Von trends, ich glaube, die Frequenz auf ~ 0.3

Scipy FFT-Frequenz-Analyse von sehr verrauschtes signal

Wenn ich numpy fft Modul, ich am Ende immer sehr hohe Frequenz (36.32 /sec) und das ist eindeutig nicht korrekt. Ich habe versucht, die Daten zu filtern mit pandas rolling_mean die Geräusche zu beseitigen, bevor fft, aber auch das hat nicht funktioniert.

import pandas as pd
from numpy import fft
import numpy as np
import matplotlib.pyplot as plt

Moisture_mean_x = pd.read_excel("signal.xlsx", header = None)
Moisture_mean_x = pd.rolling_mean(Moisture_mean_x, 10) # doesn't helps
Moisture_mean_x = Moisture_mean_x.dropna()
Moisture_mean_x = Moisture_mean_x -Moisture_mean_x.mean()
frate = 100. #/sec           
Hn = fft.fft(Moisture_mean_x)
freqs = fft.fftfreq(len(Hn), 1/frate)
idx = np.argmax(np.abs(Hn))
freq_in_hertz = freqs[idx]

Kann jemand mich leiten, wie man dieses Problem beheben?

  • 1) der code ist in Ordnung. 2) warum rechnen Sie 0,3 Hz? Ich zähle 6/8 Gipfeln in 2500 Sekunden, für eine Schätzung der dominanten low-freq von über 0.0024 zu 0.0032 Hz. 3) Was ist falsch mit 36.32 Hz, also warum sind Sie sicher, dass das nicht richtig? 4) Wenn Sie wirklich wollen, um den Vorfilter das signal mit einer sanften bedeutet, wählen Sie eine Fenstergröße von 1 abweichender. So wie es jetzt ist, wird der Anruf zu rolling_mean() ist nichts zu tun.
  • Ich nehme an, das Bild zeigt 2500 Proben, nicht 2500 Sekunden. Das macht eine Reichweite von 0,24 auf 0,32 Hz, was sicherlich enthält 0.3.
  • gut erkannt
  • sorry, war Tippfehler mit rolling_mean, es jetzt behoben.
InformationsquelleAutor Ashish | 2015-05-01
Schreibe einen Kommentar