FFT dla określonego zakresu częstotliwości.

11

Chciałbym przekonwertować sygnał na domenę częstotliwości. Żądany zakres częstotliwości 0.1 Hzdo 1 Hzi rozdzielczość częstotliwości 0.01 Hz.

Przy częstotliwości próbkowania 30 HzFFT daje składowe częstotliwości do 15 Hz. Zwiększenie częstotliwości próbkowania daje lepszą rozdzielczość częstotliwości. Jednak FFT daje szerszy zakres częstotliwości. W moim przypadku, po prostu chcę 0.1 Hz, aby 1 HzFFT daje maksymalnie 15 Hz(Extra obliczeń).

Moje pytanie brzmi: czy istnieje jakikolwiek standardowy sposób na obliczenie dziedziny częstotliwości sygnału o określonym zakresie częstotliwości i wysokiej rozdzielczości?

NcJie
źródło
2
brzmi jak chcesz zoom FFT arc.id.au/ZoomFFT.html
endolit
Jeśli wykonasz tylko standardowy DFT z częstotliwością próbkowania 2 Hz i czasem trwania 100 s, otrzymasz pasmo częstotliwości od 0 do 1 Hz z rozdzielczością 0,01 Hz. Tylko 10% twoich próbek znajdzie się poza pasmem, który Cię interesuje. Czy naprawdę warto wypracować szczegóły dotyczące „niestandardowego” algorytmu, aby poprawić wydajność tego stosunkowo małego obliczenia?
Photon
Ograniczeniem jest to, że czas trwania musi być jak najkrótszy. 100s to za długo. Potrzebujemy około 10+ s
NcJie

Odpowiedzi:

5

Myślę, że najlepszym rozwiązaniem twojego problemu jest użycie chirp-DFT. To jest jak szkło powiększające dla określonego zakresu częstotliwości. Jest bardziej wydajny niż bezpośrednia implementacja DFT (bez FFT), ponieważ algorytm FFT może być używany z pewnymi odpowiednimi przetwarzaniami wstępnymi i końcowymi. Zasadniczo musisz modulować sygnał za pomocą sygnału ćwierkającego, a następnie filtrować za pomocą FFT, a następnie ponownie modulować sygnał, aby uzyskać pożądaną odpowiedź częstotliwościową. Zobacz tutaj i tutaj, aby uzyskać szczegółowe informacje na temat implementacji chirp-DFT.

Matt L.
źródło
2

Istnieje również możliwość zastosowania dopasowania częstotliwości (działa również jako szkło powiększające, dzięki czemu uzyskuje się lepszą rozdzielczość w interesującym zakresie częstotliwości dla tego samego rozmiaru FFT kosztem niższej rozdzielczości przy wyższych częstotliwościach). Jednak nie zapisujesz żadnych MIPS, ponieważ rozmiar FFT nie jest zmniejszony, a dopasowanie częstotliwości jest dalekie od taniego.

Jeśli chcesz obliczyć tylko niektóre przedziały w FFT (a tym samym zapisać MIPS), możesz to zrobić na kilka sposobów. Na przykład przesuwne DFT. Odwołania w tym dokumencie dają bardzo ładne wyjaśnienie http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf . Myślę też, że Goertzel Algo robi coś podobnego, ale nie wiem o tym.

Następnie istnieje opcja próbkowania w dół przed FFT. To prawdopodobnie uratuje także niektóre MIPS.

Edycja: aby wyjaśnić komentarz dotyczący nieużytecznego algorytmu Goertzela. Poprzez bezpośrednie podłączenie wartości do wyrażenia znajdującego się na dole tej strony wiki http://en.wikipedia.org/wiki/Goertzel_algorytm, wówczas podejście Goertzela będzie bardziej złożone niż FFT, gdy wymagany rozmiar FFT jest większy niż 128 (przy założeniu, że rozmiar FFT jest współczynnikiem 2 i implementacją Radix-2).

Należy jednak wziąć pod uwagę inne czynniki, które przemawiają na korzyść Goertzela. Wystarczy zacytować stronę wiki: „Implementacje FFT i platformy przetwarzania mają znaczący wpływ na względną wydajność. Niektóre implementacje FFT [9] wykonują wewnętrzne obliczenia liczb zespolonych w celu wygenerowania współczynników w locie, znacznie zwiększając ich„ koszt K na jednostki pracy. ”Algorytmy FFT i DFT mogą wykorzystywać tabele wstępnie obliczonych wartości współczynników w celu uzyskania lepszej wydajności numerycznej, ale wymaga to większego dostępu do wartości współczynników buforowanych w pamięci zewnętrznej, co może prowadzić do zwiększonej rywalizacji o pamięć podręczną, która niweluje niektóre przewagi liczbowe . ”

„Oba algorytmy zyskują około 2-krotny wzrost wydajności przy użyciu danych wejściowych o wartościach rzeczywistych, a nie o wartościach złożonych. Jednak te korzyści są naturalne dla algorytmu Goertzela, ale nie zostaną osiągnięte dla FFT bez użycia pewnych wariantów algorytmu wyspecjalizowanych do przekształcania rzeczywistych - wartościowane dane ”.

niaren
źródło
1
Przesuwne DFT jest faktycznie przydatne w kontekście analizy widma w czasie rzeczywistym, gdzie sekwencja wejściowa jest bardzo długa i widmo musi być ponownie obliczane w regularnych odstępach czasu. Algorytm Goertzela jest bardzo wydajny, jeśli trzeba obliczyć tylko kilka wartości DFT. Nie przydałoby się rozwiązać danego problemu, ponieważ pożądana liczba punktów częstotliwości jest zbyt duża.
Matt L.
Dzięki @MattL. za wskazanie słabości algorytmu Goertzela.
NcJie
1

Δf=fsN
fsNN , tzn. Liczbę próbek przetwarzanych przez FFT w jednym bloku danych, aby zmniejszyć rozdzielczość częstotliwości. W twoim przykładzie potrzebujesz co najmniej 300 próbek, aby osiągnąć pożądaną rozdzielczość częstotliwości.

Ns(t)fcfbx(n)s(t)x(n)=s(n/fs)

x~(n)=x(n)ej2πk0/N
k0=fc/fsfbfb+fcf~sfbx~(n)M=fs/fbN

s(t)M

Deve
źródło