Scilab fft howto

Scilab fft howto
Scilab er et flott verktøy for mange bruksområder i både vitenskapelig og ingeniørarbeid. Denne artikkelen vil dekke det spesielle tilfellet med FFT, Fast Fourier Transform.

La oss først avklare hva Fast Fourier -transformasjonen er og hvorfor du vil bruke det. Matematikken handler om frekvenser. Fourier -transformasjonen er en metode for å utpeke mindre bølger i en kompleks bølge. Det hørtes kompleks ut; Når du hører på musikk hører du mange forskjellige notater fra sangeren, instrumentene og så videre. Som mennesker kan vi ofte høre gitaren på egen hånd, men prøver å utpeke den med teknologi i et innspilling, og du får problemer. Moderne teknologi kan gjøre det, takket være de forskjellige inkarnasjonene av de grunnleggende Fourier -ligningene som ble utviklet gjennom årene. Moderne bruk av Fourier -serien er bilde- og videokomprimering, GPS og MR -skanninger. Alle disse gjør en tilnærming av kilden og bruker Fourier -serien for å spare minne og få raskere resultater.

Matematikeren Jean-Baptiste Joseph Fourier prøvde faktisk å løse varme ligningen, for å gjøre det mulig å beregne hvordan varme forplanter seg i fast stoff. Det han kom med var langt mer nyttig enn det, selv om metodene hans ble senere forbedret til en mer formell versjon. Ligningene brukes nå i et bredt spekter av felt.

For å utpeke en spesifikk frekvens i et komplekst signal du kan bruke noen beregninger, Transforms Fast Fourier. Det matematiske grunnlaget for dette tar litt praksis. Khan Academy er et fint sted å lære matematikken.

Når du trenger å analysere bølger, kan du bruke sinusfunksjoner for å tilnærme den totale bø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 den grunnleggende ideen bak matematikken.

For å forstå Fourier -transformasjonene dine 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 Transforms Start med å finne koeffisientene til en transformasjon. Årsaken er at det er dette som brukes til komprimering av bilder og mange andre prosesser.

Når du lærer det grunnleggende i serien, er det første som bruker koeffisientene. Ligningene er slik:

Koden for å løse dem er ganske enkel, den begynner med en funksjon. Denne funksjonen implementerer Fourier -transformasjonen i små stykker.
For å definere en funksjon bruker du den åpenbare "funksjonen" -konstruksjonen. Nedenfor er en Fourier -serie for en firkantet bølge:

funksjon y =f(z)
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
endfunksjon

For å gjøre bølgen enda mer firkantet, er det tross alt en tilnærming, du må fortsette å øke antall vilkår. Når du ønsker å gjenskape et mønster, si en tegneserie, bruker du Fourier -transformasjonen på en veldig lik måte. Du trenger bare å betrakte perioden som uendelig.

Enkel rett? Vel, ikke uten grunnleggende matematikkunnskap. Prøv noen få eksempler selv ved å bruke Scilab.

Dette eksemplet viser den enkleste mulige signalkombinasjonen; To signaler med forskjellig frekvens.

// Velg en prøvestørrelse
N = 100;
// Angi sekvensen, dette oppretter matrisen
n = 0: n-1;
// Lag hyppigheten av signalene
W1 = %PI/4
W2 = %PI/8
// Lag de samplede signalene
s1 = cos (w1*n); // den første komponenten i signalet
s2 = cos (w2*n); // Den andre komponenten i signalet
// kombinere de to til ett signal
// I dette tilfellet lager vi et enkelt rent signal.
F = S1 + S2;
// Her er det resulterende signalet klart for transformasjon.
Figur (0);
plot (f);
// Fourier -transformasjonen av dette signalet skal bare vise frekvensen av komponentene.
F = fft (f);
F_abs = abs (f);
Figur 1);
plot (n, f_abs);
Figur (2);
plot (f);

Bruk eksemplet ovenfor for å øve på hvordan transformasjonen fungerer. Forsikre deg om at du endrer det for å filtrere på forskjellige måter.

Et tips er å bruke Scilab -konsollen for å se hva variablene inneholder på hvert trinn i programmet, på denne måten kan du også se at 'F' har et tenkt innhold. Forsøk å endre äfä på en annen måte for å få et mer korrekt resultat.

I industrien er den vanligste bruken av Fourier -transformasjoner 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 -samtalen til tilfeldig. Disse tilfeldige verdiene blir lagt til for å gjøre signalet litt mer støyende, nærmere virkeligheten.

prøve_rate = 1000;
t = 0: 1/prøve_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 'som en funksjon av' T 'og se at grafen ser rotete ut.
>> plot (t, s);

Her er det på tide å prøve ut de enkleste av Fourier -transformasjonene, gjøre 'y' til Fourier -transformasjonen av S.

y = fft (er);

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 imaginære verdiene. For å finne de to frekvensene i frekvensdomenet, trenger vi noen flere OperationSto Finn bare de reelle tallene. Og så tar du den absolutte verdien av resultatene. Grafen påpeker tydelig de originale frekvensene.

Her er koden:

// s er ekte, så FFT -responsen er konjugat symmetrisk og vi beholder bare den første
N/2 poeng
f = prøve_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 hjelp av 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 Fast Fourier-transformasjon.

En flott måte å øve på er å velge DTMF -tonene, opprette en knappetrykk og la Scilab finne ut riktig tast.

Demoene i SCILAB i seg selv inneholder et lydfilutstillingsvindu, studer det.

Hvis du vil grave dypere, er her noen lenker for å lese videre.

Avansert litteratur:

https: // cnx.org/innhold/ulxtqbn7@15/implementering-ffts-in-practice#uid8

Wolfram ..

http: // demonstrasjoner.Wolfram.com/complexandrealplanesofdiscretefourierTransforms/

Implementering på andre språk:

https: // www.Nayuki.IO/Page/How-to-Implement-the-Discrete-Fourier-Transform

For å få riktig følelse av emnet:

https: // Betterexplained.com/artikler/an-interaktiv-guide-to-the-Fourier-transform/