Matematikk

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab er et flott verktøy for mange bruksområder både i vitenskapelig og teknisk arbeid. Denne artikkelen vil dekke spesialtilfellet til FFT, Fast Fourier Transform.

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:

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
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ørrelse
 
N = 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ørste
N / 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 /

Mus Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kanskje du trenger et verktøy som kan gjøre at musens kontroll endres med hvert program du bruker. Hvis dette er tilfelle, kan du prøve et program som...
Mus Microsoft Sculpt Touch Wireless Mouse Review
Microsoft Sculpt Touch Wireless Mouse Review
Jeg har nylig lest om Microsoft Sculpt Touch trådløs mus og bestemte meg for å kjøpe den. Etter å ha brukt den en stund bestemte jeg meg for å dele mi...
Mus AppyMouse Pekeplate og musepeker på skjermen for Windows-nettbrett
AppyMouse Pekeplate og musepeker på skjermen for Windows-nettbrett
Nettbrettbrukere savner ofte musepekeren, spesielt når de bruker vanlige bærbare datamaskiner. Berøringsskjermen Smarttelefoner og nettbrett har mange...