La oss først avklare hva rask Fourier Transform er og hvorfor du vil bruke den. Matematikken handler om frekvenser. Fourier Transform er en metode for å skille ut mindre bølger i en kompleks bølge. Det hørtes komplekst ut; når du lytter til musikk, hører du mange forskjellige toner fra sangeren, instrumentene og så videre. Som mennesker kan vi ofte høre gitaren på egen hånd, men prøver å skille den ut med teknologi i et opptak, og du får problemer. Moderne teknologi kan gjøre det takket være de forskjellige inkarnasjonene til de grunnleggende Fourier-ligningene som ble utviklet gjennom årene. Moderne bruk av Fourier-serien er bilde- og videokomprimering, GPS- og MR-skanning. Alt dette gjør en tilnærming til kilden og bruker Fourier-serien for å spare minne og få raskere resultater.
Matematikeren Jean-Baptiste Joseph Fourier prøvde faktisk å løse varmeligningen for å gjøre det mulig å beregne hvordan varmen forplantes i fast stoff. Det han kom på var langt mer nyttig enn det, selv om metodene hans senere ble forbedret til en mer formell versjon. Ligningene brukes nå i et bredt spekter av felt.
For å skille ut en bestemt frekvens i et komplekst signal, kan du bruke noen beregninger, Fast Fourier Transforms. Det matematiske grunnlaget for dette tar litt øvelse. Khan Academy er et fint sted å lære matte.
Når du trenger å analysere eventuelle bølger, kan du bruke sinusfunksjoner til å tilnærme totalbølgen og få alle de separate signalene fra den blandede bølgen. Eller omvendt, du kan lage en kompleks bølge fra flere sinusbølger. Dette er grunnideen bak matematikken.
For å forstå Fourier Transforms bedre, er en god praksis å skrive dem selv. I Scilab har du et enkelt programmeringsspråk designet med vekt på matematikk.
De forskjellige oppgavene du trenger Fourier-transformasjoner starter med å finne koeffisientene til en transformasjon. Årsaken er at dette er det som brukes til komprimering av bilder og mange andre prosesser.
Når du lærer det grunnleggende i serien, er det første som er koeffisientene. Ligningene er slik:
Koden for å løse dem er ganske enkel, den begynner med en funksjon. Denne funksjonen implementerer Fourier Transform i små biter.
For å definere en funksjon bruker du den åpenbare funksjonskonstruksjonen. Nedenfor er en fourier-serie for en firkantbølge:
y = 4 * sin (t) / 1 *% pi + 4 * sin (3 * t) / 3 *% pi + 4 * sin (5 * t) / 5 *% pi + 4 * sin (7 * t) / 7 *% pi
+ 4 * sin (9 * t) / 9 *% pi
sluttfunksjon
For å gjøre bølgen enda mer firkantet, er det tross alt en tilnærming, du må fortsette å øke antall termer. Når du ønsker å gjenskape et mønster, for eksempel en tegneserie, bruker du Fourier-transformasjonen på en veldig lignende måte. Du trenger bare å betrakte perioden som uendelig.
Enkelt rett? Vel, ikke uten grunnleggende matte kunnskap. Prøv noen eksempler selv ved å bruke scilab.
Dette eksemplet viser en enklest mulig signalkombinasjon; to signaler med forskjellig frekvens.
// Velg en prøvestørrelseN = 100;
// Still sekvensen, dette lager matrisen
n = 0: N-1;
// Lag frekvensen til signalene
w1 =% pi / 4
w2 =% pi / 8
// Lag signalene som samples
s1 = cos (w1 * n); // Den første komponenten i signalet
s2 = cos (w2 * n); // Den andre komponenten i signalet
// Kombiner de to i ett signal
// I dette tilfellet lager vi et enkelt rent signal.
f = s1 + s2;
// Her er det resulterende signalet klart for transformasjon.
figur (0);
tomt (f);
// Fourier-transformasjonen av dette signalet skal bare vise frekvensen til komponentene.
F = fft (f);
F_abs = abs (F);
Figur 1);
tomt (n, F_abs);
figur (2);
tomt (F);
Bruk eksemplet ovenfor for å øve på hvordan transformasjonen fungerer. Sørg for at du endrer den til å filtrere på forskjellige måter.
Et tips er å bruke Scilab-konsollen for å se hva variablene inneholder i hvert trinn i programmet, på denne måten kan du også se at 'F' har et imaginært innhold. Prøv å endre äfä på en annen måte for å få et mer korrekt resultat.
I industrien er den vanligste bruken av Fourier Transforms for å analysere signal. For å filtrere ut frekvenser ut av et støyende signal, må du begynne med å lage eller importere et signal. Følgende kodebit lager et blandet signal med to frekvenser, 50 og 70 hz. I koden kan du også se bruken av 'grand', dette er scilab-anropet til tilfeldig. Disse tilfeldige verdiene blir lagt til for å gjøre signalet litt mer støyende, nærmere virkeligheten.
sample_rate = 1000;t = 0: 1 / sample_rate: 0.6;
N = størrelse (t, '*'); // antall prøver
s = sin (2 *% pi * 50 * t) + sin (2 *% pi * 70 * t +% pi / 4) + grand (1, N, 'nor', 0,1);
Nå kan du plotte 's' som en funksjon av 't' og se at grafen ser rotete ut.
>> tomt (t, s);
Her er det på tide å prøve den enkleste av Fourier-transformasjoner, lage 'y' Fourier-transformasjonen av s.
y = fft (s);fft
Hvis du plotter 'y' som en funksjon av 't', får du et noe symmetrisk mønster fra 0 til 0.6. De to piggene er det vi leter etter, men vi ser dem nå i tidsdomenet. Det som virkelig skjedde var at resultatet fremdeles inneholdt de tenkte verdiene. For å finne de to frekvensene i frekvensdomenet, trenger vi noen flere operasjoner for å finne bare de reelle tallene. Og så tar du den absolutte verdien av resultatene. Grafen peker tydelig ut de opprinnelige frekvensene.
Her er koden:
// s er ekte så fft-responsen er konjugert symmetrisk og vi beholder bare den førsteN / 2 poeng
f = sample_rate * (0: (N / 2)) / N; // tilhørende frekvensvektor
n = størrelse (f, '*')
clf ()
plot (f, absy (1: n)))
Dette er den vanligste bruken av Fourier-transformasjonen. Ved å bruke dette systemet kan du finne hvilken som helst frekvens i et komplekst, støyende signal. Ligningene er mye brukt i mange bransjer i dag.
Fft2-funksjonen til Scilab er den todimensjonale versjonen av rask Fourier-transformasjon.
En flott måte å øve på er å velge DTMF-toner, lage ett knappetrykk og få scilab til å finne ut riktig tast.
Demoene i selve Scilab inneholder et lydfilutstillingsvindu, studer det.
Hvis du vil grave dypere, er det noen lenker til videre lesing.
Avansert litteratur:
https: // cnx.org / content / [email protected] / Implementing-FFTs-in-Practice # uid8
Wolfram ..
http: // demonstrasjoner.wolfram.com / ComplexAndRealPlanesOfDiscreteFourierTransforms /
Implementering på andre språk:
https: // www.nayuki.io / side / hvordan-implementerer-den-diskrete-fourier-transform
For å få den rette følelsen av emnet:
https: // bedre forklart.com / artikler / en-interaktiv-guide-til-the-fourier-transform /