Mam wynik FFT. Są one przechowywane w dwóch double
tablicach: tablicy części rzeczywistej i tablicy części urojonej. Jak określić częstotliwości odpowiadające każdemu elementowi w tych tablicach?
Innymi słowy, chciałbym stworzyć tablicę przechowującą częstotliwości dla każdego rzeczywistego i urojonego składnika mojego FFT.
c#
signal-processing
fft
Rango
źródło
źródło
Odpowiedzi:
Pierwsza paczka w FFT to DC (0 Hz), druga paczka to
Fs / N
, gdzieFs
jest częstotliwością próbkowania iN
jest rozmiarem FFT. Następny pojemnik to2 * Fs / N
. Aby wyrazić to ogólnie, n-ty pojemnik ton * Fs / N
.Więc jeśli twoja częstotliwość próbkowania,
Fs
powiedzmy 44,1 kHz, a twój rozmiar FFT,N
to 1024, to biny wyjściowe FFT są na:Zauważ, że dla rzeczywistego sygnału wejściowego (części urojone wszystkie zera) druga połowa FFT (przedziały od
N / 2 + 1
doN - 1
) nie zawiera żadnych przydatnych dodatkowych informacji (mają one złożoną symetrię sprzężoną z pierwszymiN / 2 - 1
przedziałami). Ostatnim użytecznymN / 2 - 1
binem (do praktycznych zastosowań) jest w , co odpowiada 22006,9 Hz w powyższym przykładzie. Szuflada naN / 2
reprezentuje energię przy częstotliwości Nyquista, tj.Fs / 2
(= 22050 Hz w tym przykładzie), ale generalnie nie ma to żadnego praktycznego zastosowania, ponieważ filtry antyaliasingowe zwykle tłumią wszelkie sygnały na poziomie i powyżejFs / 2
.źródło
Spójrz na moją odpowiedź tutaj .
Odpowiedz na komentarz:
FFT faktycznie oblicza korelację krzyżową sygnału wejściowego z funkcjami sinusoidalnymi i cosinusowymi (funkcje bazowe) w zakresie równo rozmieszczonych częstotliwości. Dla danego wyjścia FFT istnieje odpowiednia częstotliwość (F) podana w przesłanej przeze mnie odpowiedzi. Część rzeczywista próbki wyjściowej jest korelacją krzyżową sygnału wejściowego z,
cos(2*pi*F*t)
a część urojoną jest korelacją krzyżową sygnału wejściowego zsin(2*pi*F*t)
. Powodem, dla którego sygnał wejściowy jest skorelowany z funkcjamisin
i,cos
jest uwzględnienie różnic fazowych między sygnałem wejściowym a funkcjami podstawowymi.Biorąc wielkość złożonego sygnału wyjściowego FFT, uzyskuje się miarę korelacji sygnału wejściowego z sinusoidami przy zestawie częstotliwości, niezależnie od fazy sygnału wejściowego. Jeśli tylko analizujesz zawartość częstotliwościową sygnału, prawie zawsze bierzesz wielkość lub wielkość do kwadratu złożonego sygnału wyjściowego FFT.
źródło
Użyłem następujących:
Dane wejściowe to:
i
: Pojemnik do dostępusamples
: Częstotliwość próbkowania w hercach (tj. 8000 Hz, 44100 Hz itp.)nFFT
: Rozmiar wektora FFTźródło
samples
lubnFFT
. Więc proszę, uczyń to bardziej objaśniającym.i * samples / nFFT
. Dlaczego jest2
tam dodatek ? Czy coś mi brakuje?Współczynniki wyjściowe FFT (dla złożonego wejścia o rozmiarze N) mieszczą się w zakresie od 0 do N - 1, pogrupowanych według częstotliwości [LOW, MID, HI, HI, MID, LOW].
Uważam, że element w k ma taką samą częstotliwość jak element w Nk, ponieważ dla rzeczywistych danych FFT [Nk] = sprzężona zespolona FFT [k].
Kolejność skanowania od NISKIEJ do WYSOKIEJ częstotliwości to
Istnieją [N / 2] +1 grupy częstotliwości od indeksu i = 0 do [N / 2], z których każda ma rozszerzenie
frequency = i * SamplingFrequency / N
Zatem częstotliwość w bin FFT [k] wynosi:
źródło
Częstotliwość twojego k- tego wyniku FFT wynosi 2 * pi * k / N.
źródło