Matematik

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab er et fantastisk værktøj til mange anvendelser i både videnskabeligt og teknisk arbejde. Denne artikel vil dække det specielle tilfælde af FFT, Fast Fourier Transform.

Lad os først afklare, hvad hurtig Fourier Transform er, og hvorfor du vil bruge den. Matematikken handler om frekvenser. Fourier Transform er en metode til at udpege mindre bølger i en kompleks bølge. Det lød komplekst; når du lytter til musik, hører du mange forskellige toner fra sangeren, instrumenterne og så videre. Som mennesker kan vi ofte høre guitaren alene, men forsøge at udpege den med teknologi i en optagelse, og du løber ind i problemer. Moderne teknologi kan gøre det takket være de forskellige inkarnationer af de grundlæggende Fourier-ligninger, der blev udviklet gennem årene. Moderne anvendelser af Fourier-serien er billed- og videokomprimering, GPS og MR-scanninger. Alle disse foretager en tilnærmelse af kilden og bruger Fourier-serier til at spare hukommelse og få hurtigere resultater.

Matematikeren Jean-Baptiste Joseph Fourier prøvede faktisk at løse varmeligningen for at gøre det muligt at beregne, hvordan varme formerer sig i fast stof. Det, han kom på, var langt mere nyttigt end det, selvom hans metoder senere blev forbedret til en mere formel version. Ligningerne bruges nu i en lang række felter.

For at udpege en bestemt frekvens i et komplekst signal kan du bruge nogle beregninger, Fast Fourier Transforms. Det matematiske fundament til dette tager lidt øvelse. Khan Academy er et rart sted at lære matematik.

Når du har brug for at analysere eventuelle bølger, kan du bruge sinusfunktioner til at tilnærme den samlede bølge og få alle de separate signaler fra den blandede bølge. Eller omvendt, du kan lave en kompleks bølge fra flere sinusbølger. Dette er den grundlæggende idé bag matematikken.

For at forstå dine Fourier Transforms bedre er en god praksis at skrive dem selv. I Scilab har du et simpelt programmeringssprog designet med vægt på matematik.
De forskellige opgaver, du har brug for Fourier-transformeringer, starter med at finde koefficienterne for en transformation. Årsagen er, at dette er, hvad der bruges til komprimering af billeder og mange andre processer.

Når du lærer det grundlæggende i serien, er koefficienterne det første, der bruges. Ligningerne er som denne:

Koden til løsning af dem er ret enkel, den begynder med en funktion. Denne funktion implementerer Fourier Transform i små stykker.
For at definere en funktion bruger du den åbenlyse 'funktions' konstruktion. Nedenfor er en firierserie til en firkantet bølge:

funktion 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
slutfunktion

For at gøre bølgen endnu mere firkantet, er det trods alt en tilnærmelse, du skal fortsætte med at øge antallet af udtryk. Når du ønsker at genskabe et mønster, siger en tegneserie, bruger du Fourier-transformen på en meget lignende måde. Du skal bare betragte perioden som uendelig.

Simpelt rigtigt? Nå, ikke uden den grundlæggende matematiske viden. Prøv et par eksempler selv ved hjælp af scilab.

Dette eksempel viser den enklest mulige signalkombination; to signaler med forskellig frekvens.

// Vælg en prøvestørrelse
 
N = 100;
 
// Indstil sekvensen, dette opretter arrayet
 
n = 0: N-1;
 
// Opret frekvensen af ​​signalerne
 
w1 =% pi / 4
 
w2 =% pi / 8
 
// Lav de samplede signaler
 
s1 = cos (w1 * n); // Den første komponent i signalet
 
s2 = cos (w2 * n); // Den anden komponent i signalet
 
// Kombiner de to i et signal
// I dette tilfælde giver vi et simpelt rent signal.
 
f = s1 + s2;
 
// Her er det resulterende signal klar til transformation.
 
figur (0);
plot (f);
 
// Fourier-transformationen af ​​dette signal skal kun vise frekvensen af ​​komponenterne.
 
F = fft (f);
 
F_abs = abs (F);
 
figur 1);
plot (n, F_abs);
 
figur (2);
plot (F);

Brug ovenstående eksempel til at øve, hvordan transformationen fungerer. Sørg for at ændre det til at filtrere på forskellige måder.

Et tip er at bruge Scilab-konsollen til at se, hvad variablerne indeholder i hvert trin i programmet, på denne måde kan du også se, at 'F' har et imaginært indhold. Prøv at ændre äfä på en anden måde for at få et mere korrekt resultat.

I industrien er den mest almindelige anvendelse af Fourier Transforms til analyse af signal. For at filtrere frekvenser ud af et støjende signal skal du starte med at lave eller importere et signal.  Følgende kodestykke opretter et blandet signal med to frekvenser, 50 og 70 Hz. I koden kan du også se brugen af ​​'grand', dette er scilab-opkaldet til tilfældigt. Disse tilfældige værdier tilføjes for at gøre signalet lidt mere støjende og tættere på virkeligheden.

sample_rate = 1000;
t = 0: 1 / prøvehastighed: 0.6;
N = størrelse (t, '*'); // antal prøver
s = sin (2 *% pi * 50 * t) + sin (2 *% pi * 70 * t +% pi / 4) + grand (1, N, 'nor', 0,1);
Nu kan du plotte 's' som en funktion af 't' og se, at grafen ser rodet ud.
>> plot (t, s);

Her er det tid til at afprøve den enkleste af Fourier-transformationer, lav 'y' til Fourier-transformeringen af ​​s.

y = fft (s);

fft

Hvis du tegner 'y' som en funktion af 't', får du et noget symmetrisk mønster fra 0 til 0.6. De to spidser er det, vi leder efter, men vi ser dem nu i tidsdomænet. Hvad der virkelig skete var, at resultatet stadig indeholdt de imaginære værdier. For at finde de to frekvenser i frekvensdomænet har vi brug for nogle flere operationer for kun at finde de reelle tal. Og så tager du den absolutte værdi af resultaterne. Grafen viser tydeligt de oprindelige frekvenser.

Her er koden:

// s er reel, så fft-svaret er konjugeret symmetrisk, og vi beholder kun det første
N / 2 point
f = prøvehastighed * (0: (N / 2)) / N; // tilknyttet frekvensvektor
n = størrelse (f, '*')
clf ()
plot (f, absy (1: n)))

Dette er den mest almindelige anvendelse af Fourier-transformationen. Ved hjælp af dette system kan du finde enhver frekvens i et komplekst, støjende signal. Ligningerne bruges i vid udstrækning i mange industrier i dag.
Fft2-funktionen af ​​Scilab er den todimensionale version af hurtig Fourier-transformation.

En god måde at øve sig på er at vælge DTMF-toner, oprette et tryk på en knap og få scilab til at finde ud af den rigtige nøgle.

Demoerne i selve Scilab indeholder et lydfil-udstillingsvindue, studer det.

Hvis du vil grave dybere, er der et par links til yderligere læsning.

Avanceret litteratur:

https: // cnx.org / indhold / [email protected] / Implementing-FFTs-in-Practice # uid8

Wolfram ..

http: // demonstrationer.wolfram.com / ComplexAndRealPlanesOfDiscreteFourierTransforms /

Implementering på andre sprog:

https: // www.nayuki.io / side / hvordan-implementerer-den-diskrete-fourier-transformation

For at få den rette fornemmelse for emnet:

https: // bedre forklaret.com / artikler / en-interaktiv-guide-til-fourier-transform /

Sådan vises OSD-overlay i fuldskærms Linux-apps og -spil
Afspilning af fuldskærmsspil eller brug af apps i distraktionsfri fuldskærmstilstand kan afskære dig fra relevante systemoplysninger, der er synlige i...
Top 5 spiloptagelseskort
Vi har alle set og elsket streaming af gameplay på YouTube. PewDiePie, Jakesepticye og Markiplier er kun nogle af de bedste spillere, der har tjent mi...
Sådan udvikler du et spil på Linux
For et årti siden ville ikke mange Linux-brugere forudsige, at deres foretrukne operativsystem en dag ville være en populær spilplatform til kommercie...