Scilab fft howto

Scilab fft howto
Scilab è un ottimo strumento per molti usi sia nel lavoro scientifico che ingegneristico. Questo articolo coprirà il caso speciale di FFT, Fast Fourier Transform.

Per prima cosa chiariamo cos'è la trasformazione veloce di Fourier e perché vuoi usarla. La matematica riguarda le frequenze. La trasformata di Fourier è un metodo per individuare onde più piccole in un'onda complessa. Che sembrava complesso; Quando ascolti la musica ascolti molte note diverse dal cantante, strumenti e così via. Come umani possiamo spesso sentire la chitarra da sola, ma proviamo a individuarla con la tecnologia in una registrazione e ti imbatti nei guai. La tecnologia moderna può farlo, grazie alle diverse incarnazioni delle equazioni di base di Fourier che sono state sviluppate nel corso degli anni. Gli usi moderni delle serie di Fourier sono le scansioni di compressione per immagini e video, GPS e MRI. Tutto ciò fa un'approssimazione della fonte e utilizza la serie Fourier per salvare la memoria e ottenere risultati più veloci.

Il matematico Jean-Baptiste Joseph Fourier stava effettivamente cercando di risolvere l'equazione del calore, per consentire di calcolare il modo in cui il calore si propaga in materia solida. Quello che gli è venuto in mente è stato molto più utile di quello, anche se i suoi metodi sono stati successivamente migliorati a una versione più formale. Le equazioni sono ora utilizzate in una vasta gamma di campi.

Per individuare una frequenza specifica in un segnale complesso è possibile utilizzare alcuni calcoli, le trasformazioni di Fourier veloci. La base matematica per questo richiede un po 'di pratica. Khan Academy è un bel posto per imparare la matematica.

Quando è necessario analizzare eventuali onde, è possibile utilizzare le funzioni sinusoidali per approssimare l'onda totale e ottenere tutti i segnali separati dall'onda mista. O viceversa, puoi fare un'onda complessa da diverse onde sinusoidali. Questa è l'idea di base dietro la matematica.

Per capire meglio le tue trasformazioni di Fourier, una buona pratica è scriverle da solo. In Scilab hai un semplice linguaggio di programmazione progettato con enfasi sulla matematica.
Le diverse attività di cui avrai bisogno di trasformazioni di Fourier iniziano con la ricerca dei coefficienti di una trasformazione. Il motivo è che questo è ciò che viene usato per la compressione delle immagini e molti altri processi.

Quando impari le basi della serie, la prima cosa che usa sono i coefficienti. Le equazioni sono così:

Il codice per risolverli è abbastanza semplice, inizia con una funzione. Questa funzione implementa la trasformata di Fourier in piccoli pezzi.
Per definire una funzione si utilizza l'ovvia costrutto "funzione". Di seguito è riportata una serie di Fourier per un'onda quadra:

funzione 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
FUNZIONE END

Per rendere l'onda ancora più quadrata, dopo tutto è un'approssimazione, è necessario continuare ad aumentare il numero di termini. Quando stai cercando di ricreare uno schema, dì un cartone animato, usi la trasformazione di Fourier in un modo molto simile. Devi solo considerare il periodo come infinito.

Semplice diritto? Bene, non senza la conoscenza matematica di base. Prova alcuni esempi da soli, usando Scilab.

Questo esempio mostra la combinazione di segnale più semplice possibile; Due segnali di frequenza diversa.

// Scegli una dimensione del campione
N = 100;
// Imposta la sequenza, questo crea l'array
n = 0: n-1;
// Crea la frequenza dei segnali
W1 = %pi/4
W2 = %pi/8
// Crea i segnali campionati
s1 = cos (w1*n); // il primo componente del segnale
S2 = cos (w2*n); // Il secondo componente del segnale
// combina i due in un solo segnale
// In questo caso facciamo un semplice segnale pulito.
f = S1 + S2;
// Ecco il segnale risultante pronto per la trasformazione.
Figura (0);
trama (f);
// La trasformata di Fourier di questo segnale dovrebbe mostrare solo la frequenza dei componenti.
F = fft (f);
F_abs = ABS (f);
Figura 1);
trama (n, f_abs);
figura 2);
trama (f);

Usa l'esempio sopra per praticare come funziona la trasformazione. Assicurati di cambiarlo per filtrare in modi diversi.

Un consiglio è di utilizzare la console Scilab per vedere cosa contengono le variabili in ogni fase del programma, in questo modo puoi anche vedere che "f" ha un contenuto immaginario. Prova a cambiare äfä in un altro modo per ottenere un risultato più corretto.

Nell'industria, l'uso più comune delle trasformazioni di Fourier è per l'analisi del segnale. Per filtrare le frequenze da un segnale rumoroso, è necessario iniziare con la creazione o l'importazione di un segnale. Il seguente frammento di codice crea un segnale misto di due frequenze, 50 e 70 Hz. Nel codice puoi anche vedere l'uso di "Grand", questa è la chiamata Scilab a Random. Questi valori casuali vengono aggiunti per rendere il segnale un po 'più rumoroso, più vicino alla realtà.

Sample_rate = 1000;
T = 0: 1/Sample_rate: 0.6;
N = dimensione (t, '*'); // Numero di campioni
S = sin (2*%pi*50*t)+sin (2*%pi*70*t+%pi/4)+Grand (1, n, 'né', 0,1);
Ora puoi tracciare "s" in funzione di "t" e vedere che il grafico sembra disordinato.
>> trama (t, s);

Qui, è tempo di provare le trasformazioni più semplici di Fourier, rendere 'y' la trasformata di Fourier di S.

y = fft (s);

fft

Se traccia "y" in funzione di "t", ottieni un modello un po 'simmetrico che va da 0 a 0.6. I due picchi sono ciò che stiamo cercando, ma ora li stiamo vedendo nel dominio del tempo. Quello che è realmente accaduto è stato che il risultato conteneva ancora i valori immaginari. Per trovare le due frequenze nel dominio della frequenza, abbiamo bisogno di un po 'più di OperationSto Trova solo i numeri reali. E poi prendi il valore assoluto dei risultati. Il grafico indica chiaramente le frequenze originali.

Ecco il codice:

// s è reale, quindi la risposta FFT è coniugata simmetrica e manteniamo solo il primo
N/2 punti
f = campione_rate*(0: (n/2))/n; // Vettore di frequenza associato
n = size (f, '*')
clf ()
Plot (F, Absy (1: N)))

Questo è l'uso più comune della trasformazione di Fourier. Utilizzando questo sistema è possibile trovare qualsiasi frequenza in un segnale complesso e rumoroso. Le equazioni sono ampiamente utilizzate in molti settori oggi.
La funzione FFT2 di Scilab è la versione bidimensionale della trasformazione veloce di Fourier.

Un ottimo modo per esercitarsi è scegliere i toni DTMF, creare un pulsante Premere e far capire a Scilab il tasto corretto.

Le demo in Scilab stesso contiene una vetrina di file audio, studiala.

Se vuoi scavare più a fondo, ecco alcuni link per leggere ulteriormente.

Letteratura avanzata:

https: // cnx.org/contenuto/ulxtqbn7@15/implement-fffts-in-practice#uid8

Wolfram ..

http: // dimostrazioni.Wolfram.com/complexandrealplanesofdisccretefouriertransforms/

Implementazione in altre lingue:

https: // www.Nayuki.IO/PAGINE/CHE-TO-IMPLEMENT-THE-Discrete-Fourier-Transform

Per ottenere la giusta sensazione per l'argomento:

https: // meglio spiegato.com/articoli/an-interattivo-guide-to-the-fourier-transform/