Matematik

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab är ett utmärkt verktyg för många användningsområden i både vetenskapligt och tekniskt arbete. Denna artikel kommer att täcka specialfallet med FFT, Fast Fourier Transform.

Låt oss först klargöra vad snabb Fourier Transform är och varför du vill använda den. Matematiken handlar om frekvenser. Fourier Transform är en metod för att peka ut mindre vågor i en komplex våg. Det lät komplicerat; när du lyssnar på musik hör du många olika toner från sångaren, instrumenten och så vidare. Som människor kan vi ofta höra gitarren på egen hand, men försök att peka ut den med teknik i en inspelning så får du problem. Modern teknik kan göra det tack vare de olika inkarnationerna av de grundläggande Fourier-ekvationerna som utvecklats genom åren. Moderna användningsområden för Fourier-serien är bild- och videokomprimering, GPS- och MR-skanningar. Alla dessa gör en approximation av källan och använder Fourier-serien för att spara minne och få snabbare resultat.

Matematikern Jean-Baptiste Joseph Fourier försökte faktiskt lösa värmeekvationen för att göra det möjligt att beräkna hur värme sprids i fast material. Vad han kom på var mycket mer användbart än så, även om hans metoder senare förbättrades till en mer formell version. Ekvationerna används nu i ett brett spektrum av fält.

För att markera en specifik frekvens i en komplex signal kan du använda några beräkningar, Fast Fourier Transforms. Den matematiska grunden för detta tar lite övning. Khan Academy är ett trevligt ställe att lära sig matematik.

När du behöver analysera eventuella vågor kan du använda sinusfunktioner för att approximera den totala vågen och få alla separata signaler från den blandade vågen. Eller vice versa, du kan skapa en komplex våg från flera sinusvågor. Detta är grundidén bakom matematiken.

För att förstå dina Fourier Transforms bättre är det bra att skriva dem själv. I Scilab har du ett enkelt programmeringsspråk utformat med tonvikt på matematik.
De olika uppgifterna du behöver Fourier-omvandlingar börjar med att hitta koefficienterna för en omvandling. Anledningen är att det är detta som används för komprimering av bilder och många andra processer.

När du lär dig grunderna i serien är koefficienterna det första som används. Ekvationerna är så här:

Koden för att lösa dem är ganska enkel, den börjar med en funktion. Denna funktion implementerar Fourier Transform i små bitar.
För att definiera en funktion använder du den uppenbara "funktion" -konstruktionen. Nedan är en fourier-serie för en fyrkantig våg:

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

För att göra vågen ännu mer fyrkantig, det är trots allt en approximation, du måste fortsätta öka antalet termer. När du vill återskapa ett mönster, säg en tecknad film, använder du Fourier-transformen på ett mycket liknande sätt. Du behöver bara betrakta perioden som oändlig.

Enkelt rätt? Tja, inte utan grundläggande matematiska kunskaper. Prova några exempel själv med scilab.

Detta exempel visar den enklaste möjliga signalkombinationen; två signaler med olika frekvens.

// Välj en provstorlek
 
N = 100;
 
// Ställ in sekvensen, detta skapar matrisen
 
n = 0: N-1;
 
// Skapa frekvensen för signalerna
 
w1 =% pi / 4
 
w2 =% pi / 8
 
// Gör de samplade signalerna
 
s1 = cos (w1 * n); // Den första komponenten i signalen
 
s2 = cos (w2 * n); // Den andra komponenten i signalen
 
// Kombinera de två till en signal
// I det här fallet gör vi en enkel ren signal.
 
f = s1 + s2;
 
// Här är den resulterande signalen redo för transformation.
 
figur (0);
tomt (f);
 
// Fouriertransformationen för denna signal ska bara visa komponenternas frekvens.
 
F = fft (f);
 
F_abs = abs (F);
 
Figur 1);
tomt (n, F_abs);
 
figur 2);
tomt (F);

Använd exemplet ovan för att öva på hur transformationen fungerar. Se till att du ändrar den för att filtrera på olika sätt.

Ett tips är att använda Scilab-konsolen för att se vad variablerna innehåller i varje steg i programmet, så kan du också se att 'F' har ett imaginärt innehåll. Försök att ändra äfä på ett annat sätt för att få ett mer korrekt resultat.

Inom industrin är den vanligaste användningen av Fourier Transforms för analys av signal. För att filtrera bort frekvenser från en bullrig signal måste du börja med att skapa eller importera en signal.  Följande kodavsnitt skapar en blandad signal med två frekvenser, 50 och 70 Hz. I koden kan du också se användningen av "grand", detta är scilab-samtalet till slumpmässigt. Dessa slumpmässiga värden läggs till för att göra signalen lite mer bullrig, närmare verkligheten.

sample_rate = 1000;
t = 0: 1 / sample_rate: 0.6;
N = storlek (t, '*'); // antal prover
s = sin (2 *% pi * 50 * t) + sin (2 *% pi * 70 * t +% pi / 4) + grand (1, N, 'nor', 0,1);
Nu kan du plotta 's' som en funktion av 't' och se att diagrammet ser rörigt ut.
>> tomt (t, s);

Här är det dags att prova de enklaste Fourier-transformationerna, göra 'y' till Fourier-transformeringen av s.

y = fft (s);

fft

Om du plottar 'y' som en funktion av 't' får du ett något symmetriskt mönster som sträcker sig från 0 till 0.6. De två spikarna är vad vi letar efter men vi ser dem nu i tidsdomänen. Vad som verkligen hände var att resultatet fortfarande innehöll de imaginära värdena. För att hitta de två frekvenserna i frekvensdomänen behöver vi lite fler operationer för att bara hitta de verkliga siffrorna. Och sedan tar du det absoluta värdet av resultaten. Diagrammet pekar tydligt på de ursprungliga frekvenserna.

Här är koden:

// s är verkligt så fft-svaret är konjugerat symmetriskt och vi behåller bara det första
N / 2 poäng
f = provhastighet * (0: (N / 2)) / N; // tillhörande frekvensvektor
n = storlek (f, '*')
clf ()
plot (f, absy (1: n)))

Detta är den vanligaste användningen av Fourier-transformen. Med detta system kan du hitta vilken frekvens som helst i en komplex, bullrig signal. Ekvationerna används ofta i många branscher idag.
Fft2-funktionen hos Scilab är den tvådimensionella versionen av snabb Fourier-transformation.

Ett bra sätt att öva är att välja DTMF-toner, skapa en knapptryckning och få scilab att räkna ut rätt tangent.

Demonstren i Scilab i sig innehåller en ljudfil, visa den.

Om du vill gräva djupare, här är några länkar till vidare läsning.

Avancerad litteratur:

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

Volfram…

http: // demonstrationer.volfram.com / ComplexAndRealPlanesOfDiscreteFourierTransforms /

Implementering på andra språk:

https: // www.nayuki.io / sida / hur man implementerar-den-diskreta-fourier-transform

För att få rätt känsla för ämnet:

https: // bättreförklarad.com / artiklar / en-interaktiv-guide-till-fourier-transform /

De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...
Topp 10 spel att spela på Ubuntu
Windows-plattformen har varit en av de dominerande plattformarna för spel på grund av den enorma andelen spel som utvecklas idag för att stödja Window...
5 bästa arkadspel för Linux
Numera är datorer seriösa maskiner som används för spel. Om du inte kan få den nya poängen vet du vad jag menar. I det här inlägget kommer du att känn...