Chciałbym przekonwertować sygnał na domenę częstotliwości. Żądany zakres częstotliwości 0.1 Hz
do 1 Hz
i rozdzielczość częstotliwości 0.01 Hz
.
Przy częstotliwości próbkowania 30 Hz
FFT 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 Hz
FFT 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?
Odpowiedzi:
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.
źródło
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 ”.
źródło
źródło