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?


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.


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 ”.


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)e−j2πk0/N
k0=fc/fsfbfb+fcf~sfbx~(n)M=fs/fbN

s(t)M

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.