Witam. Trafiłem tu ze względnie podobnym problemem.
Jeśli jeszcze ktoś śledzi temat byłbym wdzięczny za pomoc
Mianowicie co do:
fm=(m*fp)/N
gdzie:
fm - Czestotliwośc m-tej próbki
fp - częstotliwość próbkowania
m - numer próbki
N- całkowita ilośc próbek
Próbuję to u mnie wykonać (Delphi). Mam tablicę z danymi już po FFT.
Teraz chcąc każdej próbce przyporządkować odpowiednią częstotliwość robię w ten sposób:
f_przez_l:=f_prob/l_prob;
for k3:= 0 to l_prob do
begin
chart2.Series[0].addxy(k3*f_przez_l, CH1mod[k3]);
end;
Gdzie wcześniej pobieram częstotliwość próbkowania z comboboxa (jest kilka do wyboru) - oraz liczbę próbek z pewnego labela, w którym owa liczba mi się wyświetla...
Niestety - coś chyba jest nie tak, gdyż już przy FFT moja oś 'x' czyli częstotliwości jest zawsze od 0 do częstotliwości próbkowania. Jak mam 800Hz to do 800, jak 44100 to 44100, a jak 96000 to 96000.
Przykładowo dla 44k1:
Czy to w ogóle jest dobrze? Sygnałem był sinus 50Hz.Niby jest ok względnie, gdyż przy przybliżeniu pierwszy pik (one są ledwie widoczne, czerwone po bokach) jest w okolicy 50Hz, ale zawsze jest ten drugi przy czestotliwości próbkowania minus czestotliwość sygnału (tu ok 44100 - 50 = 44050). Jak będzie 800 - to będzie to samo - pik przy 50Hz i przy 750.
W ogóle liczba próbek nie ma znaczenia, tak jakby ten fragment kodu o dzieleniu jednej liczby przez drugą nie istniał.
A druga sprawa to kwestia amplitudy. Radzicie tak wyskalować, aby zawierało się między 0 a 1. Ale skąd ja mogę wiedzieć, jakie ja maksymalne amplitudy będe jeszcze uzyskiwał / mierzył?
W tym momencie korzystam z generatora sygnałów, który generuje amplitudę płynnie od 0 do 5V. To jak powinienem to wyskalować? Pod 5V, że to niby jest to '1'? A jak kiedyś będe musiał mierzyć 6V?
Pozdrawiam, za pomoc podzielę się punktami, choć wiem, ze za wielu ich nie posiadam
