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ą.
fft
lowpass-filter
python
Do B.
źródło
źródło
Odpowiedzi:
Oczekiwany jest fakt, że wynik jest złożony. Chcę wskazać kilka rzeczy:
Stosujesz filtr danych w dziedzinie częstotliwości w ścianie z cegły, próbując wyzerować wszystkie wyjścia FFT, które odpowiadają częstotliwości większej niż 0,005 Hz, a następnie przekształcić odwrotnie, aby ponownie uzyskać sygnał w dziedzinie czasu. Aby wynik był prawdziwy, dane wejściowe do odwrotnej FFT muszą być sprzężone symetrycznie . Oznacza to, że dla długości - FFT,N.
Widzę, że próbowałeś zrobić coś takiego w powyższym kodzie, ale nie jest to całkiem poprawne. Jeśli wymusisz powyższy warunek na sygnale, który przekazujesz do odwrotnej FFT, powinieneś uzyskać prawdziwy sygnał.
Istnieją bardziej praktyczne sposoby stosowania filtrów dolnoprzepustowych, zarówno w dziedzinie czasu, jak i częstotliwości. Skończone odpowiedzi impulsowe i nieskończone filtry odpowiedzi impulsowej można zastosować bezpośrednio przy użyciu ich reprezentacji równania różnicowego . Lub, jeśli filtr ma wystarczająco długo-odpowiedź impulsową, można często uzyskać korzyści wydajności przy użyciu szybkich splatania techniki oparte na FFT (stosując filtr przez mnożenie w dziedzinie częstotliwości zamiast splotu w dziedzinie czasu), tak jak nakładanie z metody zapisywania i nakładania-dodawania .
źródło