Încerc să implementez un FFT pentru a înțelege cum funcționează. Folosesc un fișier de sunet aleatoriu (așa că nu pot controla dimensiunea semnalului), cu o frecvență de eșantionare de 44,1Khz. Utilizez această bibliotecă

https://www.nayuki.io/res/free-small-fft-in-multiple-languages/Fft.java

Obiectivul este de a aplica această formulă obțineți frecvența: F = n * Fs / N

Cu n număr de pubele. Fs frecvența de eșantionare și N dimensiunea FFT

1) Se presupune că un Fft are o lungime, majoritatea folosind o putere de 2 radix. Dar cum pot cunoaște lungimea FFT dacă îl aplic la o întreagă gamă de date? este dimensiunea acelei matrice?

2) Nu înțeleg coșurile, cum se procesează? Știu că FFT funcționează cu bucăți de date, dar dacă dau o gamă completă de date, cum sunt „create” coșurile.

Comentarii

  • La aceste întrebări se poate răspunde doar cu un pic de căutare și citire pe internet. De asemenea, vă recomand să vă începeți codarea cu construit matematic semnale de durată destul de scurtă și aplicați software-ul FFT la acestea și examinați rezultatele.
  • De fapt am căutat mult, dar nu am putut ' să înțeleg, dar poate ' sunt prea lent. Vă mulțumesc pentru îngrijorare.
  • Încercați să căutați pe " Transformată Fourier discretă " sau " cum funcționează un DFT " în loc de " cum funcționează un FFT ". O transformare Fourier rapidă este o comandă rapidă de calcul a unei Trans Fourier discrete formă. Cu această ultimă căutare, este mai probabil să găsiți informații despre eficiența de calcul, mai degrabă decât procesul de bază. Nu ' nu văd cum vă puteți aștepta ca cineva să explice mai bine fundamentele într-un răspuns rapid pe forum decât o grămadă de site-uri web dedicate acestui lucru. Primele patru articole din blogul meu ar trebui să vă fie utile și dvs. Începeți cu dsprelated.com/showarticle/754.php .

Răspundeți

Întrebarea 1

Dacă o aplicați pe întreaga lungime a tabloului, lungimea FFT ar fi lungimea tabloului. Dar, FFT este mai eficient dacă lungimea este o putere de două, deci este obișnuit să introduceți 0 „s la capătul semnalului până când lungimea acestuia este o putere de 2.

Exemplu prea simplu …

x = [3.4, 2.56, 1.3]

x are o lungime de 3, următoarea putere din 2 după 3 este 4, deci schimbăm x pentru a fi

x = [3.4, 2.56, 1.3, 0]

și aplicați un FFT cu lungimea 4.

Un alt mare DAR! Dacă semnalul dvs. este lung, devine extrem de ineficient pentru a face totul dintr-o dată. Nu ați dori să încercați să faceți un FFT pe un fișier audio cu lungimea chiar și a unei melodii scurte. În acest caz, împărțim semnalul în bucăți de o dimensiune rezonabilă, executăm un FFT pe fiecare și mediați rezultatele.

Cotele sunt bune că ceea ce doriți să faceți cu datele dvs. nu este doar un FFT standard, ci mai degrabă procesul de calculare a mediei pe care l-am descris mai sus. Google Bartlett și Welch metode pentru mai multe d etails.

Întrebarea 2

Nu sunt sigur 100% despre ceea ce întrebați aici. O voi interpreta după cum doriți să știu cum se determină lățimea liniilor de frecvență și se execută cu aceasta.

Lățimea fiecărui lacă de frecvență este determinată exclusiv de rata la care a fost eșantionat semnalul și lungimea FFT. Lățimea fiecărui coș este frecvența de eșantionare împărțită la numărul de eșantioane din FFT.

df = fs / N

Coșurile de frecvență încep de la -fs/2 și urcă la fs/2. Aceasta înseamnă că, dacă eșantionat la 100Hz pentru 100 de eșantioane, coșurile de frecvență vor fi lățime 1Hz. Dacă luați 200 de eșantioane, acum veți avea de două ori mai multe cutii de frecvență, iar lățimea acestora va fi de 1 / 2Hz fiecare.

Comentarii

  • Vă mulțumesc foarte mult, a fost tot ce nu am înțeles '.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *