Mathematik

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab ist ein großartiges Werkzeug für viele Anwendungen in der wissenschaftlichen und technischen Arbeit. Dieser Artikel behandelt den Spezialfall der FFT, Fast Fourier Transform.

Lassen Sie uns zunächst klären, was schnelle Fourier-Transformation ist und warum Sie sie verwenden möchten. In der Mathematik dreht sich alles um Frequenzen. Die Fourier-Transformation ist eine Methode, um kleinere Wellen in einer komplexen Welle herauszufiltern. Das klang komplex; Wenn Sie Musik hören, hören Sie viele verschiedene Töne vom Sänger, Instrumenten usw. Als Menschen können wir die Gitarre oft alleine hören, aber versuchen, sie mit Technologie in einer Aufnahme herauszuheben, und Sie geraten in Schwierigkeiten. Moderne Technologie kann dies dank der verschiedenen Inkarnationen der grundlegenden Fourier-Gleichungen, die im Laufe der Jahre entwickelt wurden. Moderne Anwendungen der Fourier-Serie sind Bild- und Videokompression, GPS- und MRT-Scans. All dies macht eine Annäherung an die Quelle und verwendet Fourier-Reihen, um Speicherplatz zu sparen und schnellere Ergebnisse zu erhalten.

Der Mathematiker Jean-Baptiste Joseph Fourier versuchte tatsächlich, die Wärmegleichung zu lösen, um berechnen zu können, wie sich Wärme in Festkörpern ausbreitet. Was er herausbrachte, war viel nützlicher, obwohl seine Methoden später zu einer formelleren Version verbessert wurden. Die Gleichungen werden heute in einer Vielzahl von Bereichen verwendet.

Um eine bestimmte Frequenz in einem komplexen Signal herauszufiltern, können Sie einige Berechnungen verwenden, die Fast Fourier Transforms. Die mathematische Grundlage dafür braucht etwas Übung. Die Khan Academy ist ein schöner Ort, um Mathematik zu lernen.

Wenn Sie Wellen analysieren müssen, können Sie Sinusfunktionen verwenden, um die Gesamtwelle zu approximieren und alle separaten Signale aus der gemischten Welle zu erhalten. Oder umgekehrt, Sie können aus mehreren Sinuswellen eine komplexe Welle machen. Das ist die Grundidee der Mathematik.

Um Ihre Fourier-Transformationen besser zu verstehen, empfiehlt es sich, sie selbst zu schreiben. In Scilab haben Sie eine einfache Programmiersprache mit Schwerpunkt auf Mathematik.
Die verschiedenen Aufgaben, die Sie für Fourier-Transformationen benötigen, beginnen damit, die Koeffizienten einer Transformation zu finden. Der Grund ist, dass dies für die Komprimierung von Bildern und vielen anderen Prozessen verwendet wird.

Wenn Sie die Grundlagen der Reihe lernen, werden als erstes die Koeffizienten verwendet. Die Gleichungen sind wie folgt:

Der Code, um sie zu lösen, ist ziemlich einfach, er beginnt mit einer Funktion. Diese Funktion implementiert die Fourier-Transformation in kleinen Stücken.
Um eine Funktion zu definieren, verwenden Sie das offensichtliche 'Funktions'-Konstrukt. Unten ist eine Fourier-Reihe für eine Rechteckwelle:

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*sünde(9*t)/9*%pi
Endfunktion

Um die Welle noch quadratischer zu machen, ist es schließlich eine Näherung, Sie müssen die Anzahl der Terme ständig erhöhen increasing. Wenn Sie ein Muster, beispielsweise einen Cartoon, nachbilden möchten, verwenden Sie die Fourier-Transformation auf sehr ähnliche Weise. Sie müssen nur die Periode als unendlich betrachten.

Einfach richtig? Naja, nicht ohne mathematische Grundkenntnisse. Probieren Sie selbst ein paar Beispiele mit scilab . aus.

Dieses Beispiel zeigt die einfachste mögliche Signalkombination; zwei Signale unterschiedlicher Frequenz.

//Wählen Sie eine Stichprobengröße
 
N = 100;
 
//Setze die Sequenz, dies erstellt das Array
 
n = 0:N-1;
 
//Erzeuge die Frequenz der Signale
 
w1 = %pi/4
 
w2 = %pi/8
 
// Machen Sie die abgetasteten Signale
 
s1 = cos(w1*n); // Die erste Komponente des Signals
 
s2 = cos(w2*n); // Die zweite Komponente des Signals
 
// Kombinieren Sie die beiden zu einem Signal
//In diesem Fall machen wir ein einfaches sauberes Signal.
 
f = s1 + s2;
 
//Hier ist das resultierende Signal bereit für die Transformation.
 
Abbildung(0);
Grundstück(f);
 
//Die Fourier-Transformation dieses Signals sollte nur die Frequenz der Komponenten anzeigen.
 
F = fft(f);
 
F_abs = abs(F);
 
Abbildung 1);
Plot(n,F_abs);
 
Figur 2);
Grundstück(F);

Verwenden Sie das obige Beispiel, um zu üben, wie die Transformation funktioniert. Stellen Sie sicher, dass Sie es ändern, um auf verschiedene Arten zu filtern.

Ein Tipp ist, die Scilab-Konsole zu verwenden, um zu sehen, was die Variablen bei jedem Schritt des Programms enthalten. Auf diese Weise können Sie auch sehen, dass 'F' einen imaginären Inhalt hat. Versuchen Sie, äfä auf eine andere Weise zu ändern, um ein korrekteres Ergebnis zu erhalten.

In der Industrie werden Fourier-Transformationen am häufigsten zur Signalanalyse verwendet. Um Frequenzen aus einem verrauschten Signal herauszufiltern, müssen Sie zunächst ein Signal erstellen oder importieren.  Der folgende Codeausschnitt erzeugt ein gemischtes Signal aus zwei Frequenzen, 50 und 70 Hz. Im Code kann man auch die Verwendung von 'grand' sehen, dies ist der Scilab-Aufruf von Random. Diese Zufallswerte werden hinzugefügt, um das Signal etwas verrauschter zu machen, näher an der Realität.

Abtastrate = 1000;
t = 0:1/sample_rate:0.6;
N=Größe(t,'*'); //Anzahl von Beispielen
s=sin(2*%pi*50*t)+sin(2*%pi*70*t+%pi/4)+groß(1,N,'nor',0,1);
Jetzt können Sie 's' als Funktion von 't' darstellen und sehen, dass der Graph unordentlich aussieht.
>>plot(t,s);

Hier ist es an der Zeit, die einfachste Fourier-Transformation auszuprobieren, 'y' zur Fourier-Transformation von s . zu machen.

y=fft(s);

fft

Wenn Sie 'y' als Funktion von 't' darstellen, erhalten Sie ein etwas symmetrisches Muster im Bereich von 0 bis 0.6. Die beiden Spitzen sind das, wonach wir suchen, aber wir sehen sie jetzt im Zeitbereich. Was wirklich passiert ist, war, dass das Ergebnis immer noch die imaginären Werte enthielt. Um die beiden Frequenzen im Frequenzbereich zu finden, benötigen wir einige weitere Operationen, um nur die reellen Zahlen zu finden. Und dann nimmst du den absoluten Wert der Ergebnisse. Die Grafik zeigt deutlich die ursprünglichen Frequenzen.

Hier ist der Code:

//s ist reell, also ist die fft-Antwort konjugiert symmetrisch und wir behalten nur die erste bei
N/2 Punkte
f = Abtastrate*(0:(N/2))/N; //zugehöriger Frequenzvektor
n=Größe(f,'*')
clf()
Plot(f,absy(1:n)))

Dies ist die häufigste Verwendung der Fourier-Transformation. Mit diesem System können Sie jede Frequenz in einem komplexen, verrauschten Signal finden. Die Gleichungen sind heute in vielen Branchen weit verbreitet.
Die fft2-Funktion von Scilab ist die zweidimensionale Version der schnellen Fourier-Transformation.

Eine gute Möglichkeit zum Üben besteht darin, die DTMF-Töne auszuwählen, einen Tastendruck zu erstellen und scilab die richtige Taste herausfinden zu lassen.

Die Demos in Scilab selbst enthalten eine Sounddatei-Schaufenster, studieren Sie es.

Wenn Sie tiefer graben möchten, hier ein paar Links zum Weiterlesen.

Fortgeschrittene Literatur:

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

Wolfram…

http://demonstrationen.Wolfram.com/ComplexAndRealPlanesOfDiscreteFourierTransforms/

Umsetzung in anderen Sprachen:

https://www.nayuki.io/page/how-to-implementing-the-discrete-fourier-transform

Um das richtige Gefühl für das Thema zu bekommen:

https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/

SuperTuxKart für Linux
SuperTuxKart ist ein großartiger Titel, der entwickelt wurde, um Ihnen das Mario Kart-Erlebnis kostenlos auf Ihrem Linux-System zu bieten. Es ist ziem...
Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...
0 A.D. Lernprogramm
Von den vielen Strategiespielen da draußen, 0 A.D. schafft es, sich trotz Open Source als umfassender Titel und sehr tiefgehendes, taktisches Spiel ab...