Jag försöker implementera en FFT för att förstå hur det fungerar. Jag använder en slumpmässig ljudfil (så jag kan inte styra signalens storlek), med en samplingsfrekvens på 44,1 KHz. Jag använder detta bibliotek

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

Målet är att tillämpa denna formel på få frekvensen: F = n * Fs / N

Med n antal lagerplatser. Fs samplingsfrekvens och N FFT-storlek

1) En Fft ska ha en längd, de flesta använder en effekt på 2 radix. Men hur kan jag veta längden på FFT om jag tillämpar den på en hel rad data? är det storleken på den matrisen?

2) Jag förstår inte soptunnorna, hur bearbetas det? Jag vet att FFT fungerar med bitar av data, men om jag ger ett fullständigt utbud av data, hur skapas soptunnorna.

Kommentarer

  • Dessa frågor kan besvaras med bara lite internet-sökning och läsning. Jag rekommenderar också att du börjar din kodning med matematiskt konstruerade signaler av ganska kort varaktighet och applicera din FFT-programvara på dessa och undersöka resultaten.
  • Jag sökte faktiskt mycket men jag kunde inte ' inte förstår, men kanske i ' jag är för långsam. tack för din oro.
  • Försök att söka på " Diskret Fourier Transform " eller " hur fungerar en DFT " istället för " hur fungerar en FFT " En snabb Fourier-transformation är en genväg för en diskret Fourier Trans form. Med den senare sökningen är det mer troligt att du hittar information om beräkningseffektiviteten snarare än den underliggande processen. Jag ser inte ' hur du kan förvänta dig att någon ska förklara grunden bättre i ett snabbt forumsvar än en massa webbplatser som är dedikerade till att göra just det. De fyra första artiklarna i min blogg borde också vara användbara för dig. Börja med dsprelated.com/showarticle/754.php .

Svar

Fråga 1

Om du tillämpar den över hela arrayens längd, skulle längden på FFT vara längden på arrayen. Men, FFT är effektivare om längden är en effekt av två, så det är vanligt att lägga 0 ”på slutet av signalen tills dess längden är en effekt på 2.

Alltför enkelt exempel …

x = [3.4, 2.56, 1.3]

x har en längd på 3, nästa effekt av 2 efter 3 är 4, så vi ändrar x till att vara

x = [3.4, 2.56, 1.3, 0]

och tillämpa en FFT med längd 4.

Ytterligare en stor MEN! Om din signal är lång är den blir extremt ineffektivt för att göra det hela på en gång. Du skulle inte vilja försöka göra en FFT på en ljudfil längden till och med en kort låt. I så fall bryter vi signalen i bitar av någon rimlig storlek, utför en FFT på var och en och genomsnittet av resultaten.

Oddsen är bra att det du faktiskt vill göra med dina data är inte bara en vanlig FFT utan snarare den medelvärdesprocess som jag beskrev ovan. Google Bartlett och Welch metoder för mer d e-post.

Fråga 2

Jag är inte 100% säker på vad du frågar om här. Jag tolkar det som du vill veta hur bredden på frekvensfacken bestäms och körs med det.

Bredden på varje frekvensfack bestäms enbart av hastigheten som signalen samplades med och längden på FFT. Bredden på varje fack är samplingsfrekvensen dividerat med antalet prover i din FFT.

df = fs / N

Frekvensfack börjar från -fs/2 och går upp till fs/2. Det betyder att om du samplas vid 100Hz för 100 sampel kommer dina frekvensfack att vara breda 1Hz. Om du tar 200 samplingar har du nu 2x så många frekvensfack och deras bredd blir 1 / 2Hz vardera.

Kommentarer

  • Tack så mycket, det var allt jag inte förstod '.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *