Matematica

Scilab FFT HOWTO

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

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

Il matematico Jean-Baptiste Joseph Fourier stava effettivamente cercando di risolvere l'equazione del calore, per rendere possibile calcolare come il calore si propaga nella materia solida. Quello che ha inventato è stato molto più utile di così, anche se i suoi metodi sono stati successivamente migliorati in una versione più formale. Le equazioni sono ora utilizzate in un'ampia gamma di campi.

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

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

Per comprendere meglio le tue trasformate di Fourier, una buona pratica è scriverle tu stesso. In Scilab hai un semplice linguaggio di programmazione progettato con enfasi sulla matematica.
I diversi compiti di cui avrai bisogno Le trasformate di Fourier iniziano con la ricerca dei coefficienti di una trasformata. Il motivo è che questo è ciò che viene utilizzato 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 usa l'ovvio costrutto 'funzione'. Di seguito è riportata una serie di Fourier per un'onda quadra:

funzione y=f(z)
y=4*peccato(t)/1*%pi + 4*peccato(3*t)/3*%pi + 4*peccato(5*t)/5*%pi + 4*peccato(7*t) /7*%pi
+ 4*peccato(9*t)/9*%pi
fine funzione

Per rendere l'onda ancora più quadrata, dopotutto è un'approssimazione, devi continuare ad aumentare il numero di termini. Quando stai cercando di ricreare un modello, ad esempio un cartone animato, usi la trasformata di Fourier in un modo molto simile. Devi solo considerare il periodo come infinito.

Semplice giusto? Bene, non senza le conoscenze matematiche di base. Prova tu stesso alcuni esempi, usando scilab.

Questo esempio mostra la combinazione di segnali 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);// La prima componente del segnale
 
s2 = cos(w2*n);// La seconda componente del segnale
 
//Combina i due in un 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_ass = ass(F);
 
Figura 1);
plot(n,F_abs);
 
figura 2);
trama(F);

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

Un consiglio è quello di usare la console di Scilab per vedere cosa contengono le variabili ad ogni passo 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 trasformate 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,'nor',0,1);
Ora puoi tracciare 's' in funzione di 't' e vedere che il grafico sembra disordinato.
>>trama(t,s);

Qui è il momento di provare la più semplice delle trasformate di Fourier, rendi 'y' la trasformata di Fourier di s.

y=fft(s);

fft

Se tracci 'y' in funzione di 't', ottieni uno schema alquanto 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 è successo davvero è che il risultato conteneva ancora i valori immaginari. Per trovare le due frequenze nel dominio della frequenza, abbiamo bisogno di qualche operazione in più per trovare solo i numeri reali. E poi prendi il valore assoluto dei risultati. Il grafico evidenzia chiaramente le frequenze originali.

Ecco il codice:

//s è reale, quindi la risposta fft è simmetrica coniugata e manteniamo solo la prima
N/2 punti
f=tasso_campione*(0:(N/2))/N; // vettore di frequenza associatoasso
n=dimensione(f,'*')
clf()
trama(f,absy(1:n)))

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

Un ottimo modo per esercitarsi è scegliere i toni DTMF, creare una pressione di un pulsante e far capire a Scilab la chiave corretta.

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

Se vuoi approfondire, ecco alcuni link per ulteriori letture.

Letteratura avanzata:

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

Wolfram…

http://dimostrazioni.wolframio.com/ComplexAndRealPlanesOfDiscreteFourierTransforms/

Implementazione in altre lingue:

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

Per avere la giusta sensazione per l'argomento:

https://betterexplained.com/articles/una-guida-interattiva-alla-trasformazione-di-fourier/

I migliori giochi da riga di comando per Linux
La riga di comando non è solo il tuo più grande alleato quando usi Linux, ma può anche essere una fonte di intrattenimento perché puoi usarla per gioc...
Le migliori app di mappatura del gamepad per Linux
Se ti piace giocare su Linux con un gamepad invece di un tipico sistema di input di tastiera e mouse, ci sono alcune app utili per te. Molti giochi pe...
Strumenti utili per i giocatori Linux
Se ti piace giocare su Linux, è probabile che tu abbia utilizzato app e utilità come Wine, Lutris e OBS Studio per migliorare l'esperienza di gioco. O...