Esiste un'applicazione pratica per eseguire una doppia trasformata di Fourier? ... o una trasformata inversa di Fourier su un input nel dominio del tempo?


11

In matematica puoi prendere la doppia derivata o il doppio integrale di una funzione. Ci sono molti casi in cui eseguire modelli a doppia derivata una situazione pratica del mondo reale, come trovare l'accelerazione di un oggetto.

Poiché la trasformata di Fourier accetta un segnale reale o complesso come input e produce un segnale complesso come output, non c'è nulla che ti impedisca di prendere quell'output e applicare la trasformata di Fourier una seconda volta ... Ci sono degli usi pratici per fare Questo? Aiuta a modellare alcune situazioni complesse del mondo reale?

Con la stessa logica, nulla ti impedirebbe di accettare la trasformata inversa di Fourier del segnale di ingresso nel dominio del tempo originale ... sarebbe mai utile? Perché o perché no?

Risposte:


9

"C'è qualche applicazione pratica?" Sicuramente sì, almeno per controllare il codice e gli errori associati.

"In teoria, teoria e pratica corrispondono. In pratica, non lo fanno." Quindi, matematicamente, no, come ha risposto Matt. Perché (come già risposto), (fino a un potenziale fattore di ridimensionamento). Tuttavia, può essere utile dal punto di vista computazionale, poiché l'equazione di cui sopra viene solitamente implementata tramite la trasformata discreta di Fourier e il suo avatar veloce, la FFT.F(F(x(t)))=x(t)

Un primo motivo deriva dalla volontà di verificare che l'implementazione di Fourier, sia essa codificata da te, da qualcun altro o da una biblioteca, faccia quello che dovrebbe fare sui tuoi dati. L'ordinamento del campione, i fattori di ridimensionamento, i limiti sul tipo di input (realtà, profondità di bit) o ​​lunghezza sono fonti di potenziali errori successivi per implementazioni di Fourier come FFT. Quindi, come controllo di integrità, è sempre bene verificare che le versioni implementate ereditino, almeno approssimativamente, le proprietà teoriche. Come vedrai, come mostrato da Machupicchu, non recuperi esattamente un input reale invertito: spesso, la parte immaginaria non è esattamente zero, e la parte reale è quella prevista, ma all'interno di un piccolo errore relativo, dovuto a calcoli del computer imperfetti (virgola mobile) entro una tolleranza dipendente dalla macchina. Questo è reso visibile nella seguente immagine. La FFT viene applicata due volte su un segnale casuale da 32 campioni e capovolta. Come puoi vedere, l'errore è piccolo, usando float a doppia precisione.

dati, la sua doppia FFT capovolta ed errore

Se l'errore non è relativamente piccolo, potrebbero esserci degli errori nel codice che usi.

Un secondo riguarda enormi volumi di dati o grandi quantità di calcoli FFT iterati, come con la tomografia. Lì, i precedenti piccoli errori relativi possono accumularsi e propagarsi, e persino indurre divergenze computazionali o errori alcuni dettagli qui . Questo è reso visibile nella seguente immagine. Per un segnale non troppo lungo ( campioni ), eseguiamo le seguenti iterazioni: dove indica la FFT. La figura visualizzata è sottocampionata. E calcoliamo l'errore massimoad ogni iterazione.x01e6

xk+1=Re(f(f(f(f(xk)))))
fmax|xkx0|

dati, il suo quadruplo FFT e errori massimi nelle iterazioni

Come puoi vedere, l'ordine di grandezza dell'errore è cambiato, a causa della dimensione del segnale. Inoltre, l'errore massimo aumenta costantemente. Dopo iterazioni rimane abbastanza piccolo. Ma puoi immaginare che, con un cubo -voxel e milioni di iterazioni, questo errore potrebbe diventare non trascurabile.10001000×1000×1000

Limitare l'errore e valutare il suo comportamento rispetto alle iterazioni può aiutare a rilevare tali comportamenti e ridurli poi mediante appropriati limiti o arrotondamenti.

Informazioni aggiuntive:


1
Adoro davvero questa risposta e l'avrei contrassegnata come risposta accettata, ma penso che ciò che la maggior parte delle persone che verranno a questa domanda cercherà sono le informazioni teoriche che Matt ha fornito nel link. +1 però per un'ottima risposta.
tjwrona1992,

1
Apprezzo molto il tuo commento. Ho comunque aggiornato la risposta con cifre appropriate, per dimostrare che gli errori nelle implementazioni discrete di Fourier sono importanti.
Laurent Duval,

17

No, prendere due volte la trasformata di Fourier equivale all'inversione del tempo (o all'inversione di qualunque dimensione ci si trovi). Ottieni solo volte una costante che dipende dal tipo di ridimensionamento che usi per la trasformata di Fourier.x(t)

La trasformata inversa di Fourier applicata a un segnale nel dominio del tempo fornisce solo lo spettro con inversione di frequenza. Dai un'occhiata a questa risposta per maggiori dettagli.


4
Mi hai fatto esplodere ricorsivamente.
tjwrona1992,

Devo illustrare cosa Matt. L detto ma in 2D con il mio codice? cioè otteniamo f (-x, -y).
Machupicchu,

@Machupicchu, sì, sembra giusto.
tjwrona1992,

ahah allora puoi selezionare la mia risposta alla prima ^ ^ (ha 53K rep quindi non fa alcuna differenza per lui ahah)
Machupicchu

Subito dopo ho detto che mi sono reso conto che probabilmente ci sono modi più semplici di una doppia trasformata di Fourier in tempo per invertire un segnale haha
tjwrona1992

16

Mentre prendere la trasformata di Fourier direttamente due volte di seguito ti dà solo una banale inversione di tempo che sarebbe molto più economica da implementare senza FT, ci sono cose utili che possono essere fatte prendendo una trasformata di Fourier, applicando qualche altra operazione, e poi di nuovo Fourier ne trasforma il risultato. L'esempio più noto è l' autocorrelazione , che è una sorta di convoluzione di un segnale con se stesso. E le convoluzioni sono O ( n 2 ) se implementate ingenuamente, ma solo O ( n · log n) quando si effettua una deviazione tramite trasformata di Fourier. Quindi l'autocorrelazione viene generalmente eseguita da FT che invia un segnale, riprendendo il quadrato assoluto e riportando IFT nel dominio del tempo.


2
Inoltre, c'è un ceppo , la trasformata inversa di Fourier del logaritmo della trasformata di Fourier. Può essere utilizzato per rilevare segnali periodici.
Olli Niemitalo,

12

La trasformata 2D di Fourier (2D DFT) viene utilizzata nell'elaborazione delle immagini poiché un'immagine può essere vista come un segnale 2D. Ad esempio per un scala di grigio , , che significa che le coordinate ed l'immagine ha valore di intensità z. Guarda questo per esempio:II(x,y)=zxy

https://ch.mathworks.com/help/matlab/ref/fft2.html

Prova questo:

x=imread('cameraman.tif');
X=fft2(fft2(x));
imagesc(abs(X));

e confronta con:

x=imread('cameraman.tif');
X= ifft2(fft2(x));
imagesc(abs(X));

piuttosto così. Ho applicato fft2 a volte, non ifft2 la seconda volta. Penso che ciò illustri ciò che ha detto @Matt L.:

"prendere due volte la trasformata di Fourier equivale all'inversione del tempo",

puoi vedere l'immagine invertita a causa del -i immaginario negativo invece che positivo in ifft ().

inserisci qui la descrizione dell'immagine

L'ho fatto anche per un segnale 1D (ad es. Temporale):

inserisci qui la descrizione dell'immagine


Sono consapevole che esiste una cosa come una trasformata di Fourier 2D, ma non è la stessa cosa di prendere un segnale di input e eseguirlo attraverso l'algoritmo, quindi prendere l'output di quella corsa e eseguirlo di nuovo.
tjwrona1992,

1
La trasformata di Fourier è separabile.
Machupicchu,

La mia domanda si applicherebbe anche per una trasformata di Fourier 2D. In teoria potresti prendere un segnale di input 2D, applicare la trasformata di Fourier 2D, quindi prendere il segnale di output 2D e usarlo come input e applicare nuovamente la trasformata di Fourier 2D.
tjwrona1992,

guarda in Matlab cosa succede se fai quanto segue: cfr. Ho aggiornato la mia risposta
Machupicchu,

1
Ti suggerirei di usare la parte reale invece del valore assoluto
Laurent Duval il

6

Per rispondere alla seconda domanda, in comunicazioni digitali esiste una tecnica in uso in cellulari in questo momento che fa buon uso di applicare l'IFFT ad un segnale nel dominio del tempo. OFDM applica un IFFT a una sequenza di dati nel dominio del tempo sul trasmettitore, quindi inverte quello con un FFT sul ricevitore. Mentre alla letteratura piace usare IFFT-> FFT, in realtà non fa differenza quale viene prima.

diagramma del trasmettitore OFDM

Il vantaggio chiave qui è fortemente correlato alla risposta di leftaroundabout. Esiste un tipo di distorsione che si chiama sbiadimento multipath e i cellulari nelle fitte aree urbane devono farcela molto. Ci piace modellare lo sbiadimento multipath come una convoluzione con coefficienti sconosciuti. Poiché la catena di eventi assomiglia a IFFT-> Trasmetti-> Applica multipath-> Ricevi-> FFT, la dissolvenza multipath passerà attraverso la FFT e diventerà una semplice moltiplicazione punto per punto con valori sconosciuti. Questi valori sono molto più facili da prevedere e correggere rispetto ai coefficienti di convoluzione.

Questo effetto rende anche un segnale più resiliente al multipath / dissolvenza che potrebbe eliminare (o "null") un intero canale di frequenza. Questo articolo descrive come

Tale propagazione multipath può creare nulli spettrali profondi nella banda passante di frequenza dei segnali radio ricevuti a causa dell'interferenza distruttiva di due copie del segnale che arrivano in tempi leggermente diversi. Un null in OFDM può eliminare una o più portanti secondari. Lo stesso null nel QAM a vettore singolo potrebbe far cadere un'esplosione di simboli sequenzialmente adiacenti, a seconda del modello di dati specifico in quell'istante. In casi estremi, è persino possibile la perdita di acquisizione del segnale. Dopodiché passa alla potenza della FEC per recuperare la sequenza di dati originale.


Wow, questo è incredibilmente interessante! Grazie! :)
tjwrona1992,

1

Questa informazione è stata fornita dall'utente "Birdwes", ma non aveva abbastanza reputazione per pubblicarla da solo, quindi la pubblicherò qui per lui perché sembra pertinente e utile.

"Non ho abbastanza punti in questo forum per aggiungere un commento, quindi lo sto facendo qui: dai un'occhiata al codice sorgente di Accord.Math Hilbert Transform e vedrai perché questa può essere un'opzione praticabile: https: //github.com/primaryobjects/Accord.NET/blob/master/Sources/Accord.Math/Transforms/HilbertTransform.cs

Gli usi pratici includono la costruzione di trasmettitori SSB o quasi qualsiasi piano di modulazione. Cerca la modulazione del QI e vedrai perché lo sfasamento di -90 gradi è rilevante. Un prodotto di principi trigonometrici. ad es. https://user.eng.umd.edu/~tretter/commlab/c6713slides/ch7.pdf

La trasformazione di Hilbert utilizza un passaggio intermedio tra gli FFT per l'azzeramento dei componenti negativi. Puoi abusarne per filtrare anche altre frequenze ".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.