Jeg prøver å implementere en FFT for å forstå hvordan det fungerer. Jeg bruker en tilfeldig lydfil (så jeg kan ikke kontrollere størrelsen på signalet), med en samplingsfrekvens på 44,1 KHz. Jeg bruker dette biblioteket

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

Målet er å bruke denne formelen på få frekvensen: F = n * Fs / N

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

1) En Fft skal ha en lengde, de fleste av dem bruker en kraft på 2 radix. Men hvordan kan jeg vite lengden på FFT hvis jeg bruker den på en hel rekke data? er det størrelsen på den matrisen?

2) Jeg forstår ikke søppelkassene, hvordan behandles de? Jeg vet at FFT fungerer med biter av data, men hvis jeg gir et komplett utvalg av data, hvordan blir «søppelkassene» opprettet «.

Kommentarer

  • Disse spørsmålene kan besvares med bare litt søk og lesing på internett. Jeg anbefaler også at du starter kodingen med matematisk konstruerte signaler av ganske kort varighet og bruk FFT-programvaren din på disse og undersøke resultatene.
  • Jeg søkte faktisk mye, men jeg kunne ikke ' ikke forstå, men kanskje i ' er bare for sakte. takk for bekymringen.
  • Prøv å søke på " Diskret Fourier Transform " eller " hvordan fungerer en DFT " i stedet for " hvordan fungerer en FFT ". En rask Fourier-transformasjon er en beregningsgenvei til en Diskret Fourier Trans skjema. Med sistnevnte søk er det mer sannsynlig at du finner informasjon om beregningseffektiviteten i stedet for den underliggende prosessen. Jeg ser ikke ' hvordan du kan forvente at noen skal forklare det grunnleggende bedre i et raskt forumsvar enn en haug med nettsteder som er dedikert til å gjøre nettopp det. De fire første artiklene i bloggen min skal også være nyttige for deg. Start med dsprelated.com/showarticle/754.php .

Svar

Spørsmål 1

Hvis du bruker det over hele lengden på matrisen, vil lengden på FFT være lengden på matrisen. Men, FFT er mer effektiv hvis lengden er en kraft på to, så det er vanlig å putte 0 «s på enden av signalet til lengden er en kraft på 2.

Altfor enkelt eksempel …

x = [3.4, 2.56, 1.3]

x har en lengde på 3, neste kraft av 2 etter 3 er 4, så vi endrer x til å være

x = [3.4, 2.56, 1.3, 0]

og bruk en FFT med lengde 4.

Nok en stor MEN! Hvis signalet ditt er langt, er det blir ekstremt ineffektivt for å gjøre det hele på en gang. Du vil ikke prøve å lage en FFT på en lydfil på lengden på til og med en kort sang. I så fall bryter vi signalet i biter av noen rimelig størrelse, utfører en FFT på hver, og gjennomsnitt resultatene.

Oddsene er gode for at det du faktisk vil gjøre med dataene dine, ikke bare er en standard FFT, men snarere gjennomsnittsprosessen jeg beskrev ovenfor. Google Bartlett og Welch metoder for mer d e-post.

Spørsmål 2

Jeg er ikke 100% sikker på hva du spør om her. Jeg skal tolke det slik du vil vite hvordan bredden på frekvensbøylene bestemmes og kjøres med det.

Bredden på hver frekvensbakke bestemmes utelukkende av hastigheten signalet ble samplet til og lengden på FFT. Bredden på hver søppel er samplingsfrekvensen delt på antall prøver i FFT.

df = fs / N

Frekvensbinger starter fra -fs/2 og går opp til fs/2. Det betyr at hvis du samples ved 100Hz for 100 prøver, vil frekvensbøylene dine være bred 1Hz. Hvis du tar 200 prøver, vil du nå ha dobbelt så mange frekvensbøtter og bredden vil være 1 / 2Hz hver.

Kommentarer

  • Tusen takk, det var alt jeg ikke ' ikke forsto.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *