czy ten blok może się zaczynać w dowolnym miejscu
Tak, byle ilość sampli ograniczona jego położeniem nie była znikoma w stosunku do pojemności wejścia FFT. Jeżeli tych sampli będzie mniej, to resztę trzeba dopełnić zerami, lub odpowiednio powielić sample.
Możesz np. obrobić pierwsze X sampli, następne X sampli, albo z przeplotem: X sampli z miejsca Y, X sampli z miejsca Y-X*0.9 ...
Powielanie ma tylko sens gdy sampli jest na prawdę mało - na przykład jeden okres sygnału, ale zazwyczaj wystarcza przemnożenie wyjścia transformacji przez iloraz rozmiaru wejścia i ilości wprowadzonych niezerowych sampli. Wtedy mamy zapewniony jednolity poziom transformaty, zależny jedynie od poziomu sygnału wejściowego.
Przykładowo mając bufor wejściowy fft o rozmiarze 32768 sampli i wprowadzajac tylko 16384 sampli (resztę dopełniasz zerami), warto jest pomnożyć "wyjście fft" przez 2 (32768/16384), by wynik był na takim samym poziomie jak by było przy wprowadzeniu 32768 sampli.
mielimy go przez dtf i uzyskujemy N liczb
Tych liczb jest N/2+1, gdzie N to najwyższa ilość próbek którą akceptuje wejście fft (fftInputSize).
Przykładowo mając fft przyjmujące 32768 sampli, będzie ono wypluwać 32768/2+1 liczb kompleksowych (lub rzeczywistych).
Teraz k-ta liczba [...]
Tak, przykład dla fft.input.size = 32768 i samplerate=44100. Wyjście FFT to amplitudy wielokrotności 1.34Hz (44100/32768). Ostatnia amplituda (index=(32768/2+1)-1=16384) odnosi się do częstotliwości 22050 (16384*1.34).
Zapewne masz program audacity, wiec zaimportuj do niego jakiegoś mp3, zaznacz fragment i kliknij View/PlotSpectrum. W nowym oknie rozmiar FFT jest domyślnie ustawiony na skromne 512, więc cały wykres ma rozdzielczość około 86Hz. Tak mała rozdzielczość jest zbyt niska w zakresie niskich częstotliwości, ale całkowicie wystarczająca w lewej części wykresu. Klikajac Export, program utworzy plik tekstowy z poziomami każdej częstotliwości z wykresu. Warto tam zajżeć by porównać własne wyniki.
Frequency (Hz) Level (dB)
43.066406 -28.865408
86.132813 -28.287386
129.199219 -32.179745
172.265625 -36.389809