Jeg prøver at implementere en FFT for at forstå, hvordan det fungerer. Jeg bruger en tilfældig lydfil (så jeg kan ikke styre signalets størrelse) med en samplingsfrekvens på 44,1 KHz. Jeg bruger dette bibliotek

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

Målet er at anvende denne formel på få frekvensen: F = n * Fs / N

Med n antal kasser. Fs samplingsfrekvens og N størrelse på FFT

1) En Fft formodes at have en længde, de fleste af dem bruger en effekt på 2 radix. Men hvordan kan jeg kende længden af FFT, hvis jeg anvender den på en hel række data? er det størrelsen på det array?

2) Jeg forstår ikke skraldespandene, hvordan behandles det? Jeg ved, at FFT arbejder med klumper af data, men hvis jeg giver et komplet sæt data, hvordan “oprettes” skraldespandene.

Kommentarer

  • Disse spørgsmål kan besvares med bare en smule internetsøgning og læsning. Jeg anbefaler også, at du starter din kodning med matematisk konstrueret signaler af ret kort varighed og anvende din FFT-software til dem og undersøge resultaterne.
  • Jeg søgte faktisk meget, men jeg kunne ikke ' ikke forstå, men måske i ' er bare for langsom. tak for din bekymring.
  • Prøv at søge på " Diskret Fourier Transform " eller " hvordan fungerer en DFT " i stedet for " hvordan fungerer en FFT ". En hurtig Fourier-transformation er en beregningsgenvej til en diskret Fourier-trans form. Med sidstnævnte søgning er det mere sandsynligt, at du finder oplysninger om beregningseffektiviteten snarere end den underliggende proces. Jeg kan ikke ' ikke se, hvordan du kan forvente, at nogen forklarer det grundlæggende bedre i et hurtigt forum-svar end en flok websteder, der er dedikeret til at gøre netop det. De første fire artikler i min blog burde også være nyttige for dig. Start med dsprelated.com/showarticle/754.php .

Svar

Spørgsmål 1

Hvis du anvender det over hele længden af arrayet, ville længden af FFT være længden af arrayet. Men FFT er mere effektiv, hvis længden er en effekt på to, så det er almindeligt at placere 0 “s på enden af signalet, indtil dets længde er en styrke på 2.

Alt for simpelt eksempel …

x = [3.4, 2.56, 1.3]

x har en længde på 3, den næste effekt af 2 efter 3 er 4, så vi ændrer x til at være

x = [3.4, 2.56, 1.3, 0]

og anvend en FFT med længde 4.

Endnu en stor MEN! Hvis dit signal er langt, er det bliver ekstremt ineffektiv til at gøre det hele på én gang. Du ønsker ikke at prøve at lave en FFT på en lydfil på længden af endda en kort sang. I så fald bryder vi signalet i klumper af en rimelig størrelse, udfører en FFT for hver og gennemsnit af resultaterne.

Oddsene er gode, at hvad du rent faktisk vil gøre med dine data, ikke kun er en standard FFT, men snarere den gennemsnitsproces, jeg har beskrevet ovenfor. Google Bartlett og Welch metoder til mere d e-mails.

Spørgsmål 2

Jeg er ikke 100% sikker på, hvad du spørger om her. Jeg vil fortolke det, som du vil vide, hvordan frekvensbakkernes bredde bestemmes og køres med det.

Bredden på hver frekvensbakke bestemmes udelukkende af den hastighed, signalet blev samplet ved, og længden af FFT. Bredden på hver bin er samplingsfrekvensen divideret med antallet af prøver i din FFT.

df = fs / N

Frekvensbakker starter fra -fs/2 og går op til fs/2. Det betyder, at hvis der samples ved 100Hz til 100 prøver, vil dine frekvensbakker være bredde 1Hz. Hvis du tager 200 prøver, har du nu dobbelt så mange frekvensbakke, og bredden vil være 1 / 2Hz hver.

Kommentarer

  • Mange tak, det var alt, hvad jeg ikke ' ikke forstod.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *