Jestem nowy w przetwarzaniu sygnałów, a zwłaszcza w FFT, dlatego nie jestem pewien, czy robię tutaj właściwe rzeczy, i jestem nieco mylony z wynikiem.
Mam dyskretną funkcję rzeczywistą (dane pomiarowe) i chcę ustawić na niej filtr dolnoprzepustowy. Wybranym narzędziem jest Python z pakietem numpy. Postępuję zgodnie z tą procedurą:
- obliczyć fft mojej funkcji
- odciąć wysokie częstotliwości
- wykonaj odwrotną fft
Oto kod, którego używam:
import numpy as np
sampling_length = 15.0*60.0 # measured every 15 minutes
Fs = 1.0/sampling_length
ls = range(len(data)) # data contains the function
freq = np.fft.fftfreq(len(data), d = sampling_length)
fft = np.fft.fft(data)
x = freq[:len(data)/2]
for i in range(len(x)):
if x[i] > 0.005: # cut off all frequencies higher than 0.005
fft[i] = 0.0
fft[len(data)/2 + i] = 0.0
inverse = np.fft.ifft(fft)
Czy to jest poprawna procedura? Wynik inverse
zawiera złożone wartości, które mnie dezorientują.