Perché le magnitudini sono normalizzate durante la sintesi (IDFT), non l'analisi (DFT)?


17

Nella maggior parte degli esempi e del codice FFT che ho visto, l'output (magnitudini di frequenza) dell'operazione DFT diretta è ridimensionato di N - cioè invece di darti la grandezza di ogni bin di frequenza, ti dà N volte la magnitudine.

Dal punto di vista operativo, ciò è semplicemente dovuto al fatto che il DFT viene calcolato prendendo il prodotto interno del segnale con ciascun seno di base (cioè correlazione non normalizzata). Tuttavia, ciò non risponde alla domanda filosofica sul perché non divideremo semplicemente per N prima di restituire l'output?

Invece, la maggior parte degli algoritmi si divide per N quando si sintetizza nuovamente.

Questo mi sembra poco intuitivo e (a meno che non mi manchi qualcosa), rende tutte le spiegazioni del DFT molto confuse.

In ogni scenario che posso immaginare, la grandezza effettiva (non la grandezza * N) è il valore di cui ho bisogno da un'operazione DFT e la grandezza normalizzata è il valore che voglio inserire in un'operazione IDFT.

Perché il DFT non è definito come DFT / N e l'IDFT è definito come una semplice somma di sinusoidi di magnitudo normalizzata?


2
Sinceramente penso che questa sia una delle domande più interessanti mai poste qui.
Phonon,

Risposte:


9

Sia che ridimensioni l'output del tuo DFT, in avanti o al contrario, non ha nulla a che fare con la convenzione o con ciò che è matematicamente conveniente. Ha tutto a che fare con l'ingresso nel DFT. Consentitemi di mostrare alcuni esempi in cui il ridimensionamento è richiesto o non richiesto sia per la trasformazione diretta che inversa.

Deve ridimensionare una trasformazione in avanti di 1 / N.

Per cominciare, dovrebbe essere chiaro che per analizzare una semplice onda sinusoidale, la lunghezza della trasformazione dovrebbe essere irrilevante, matematicamente parlando. Supponiamo che N = 1024, Freq = 100 e il tuo segnale sia:

f (n) = cos (Freq * 2 * Pi * n / N)

Se prendi un DFT di 1024 punti di f (n), troverai quel bin [100] = 512. Ma questo non è un valore significativo finché non lo ridimensioni di N. 512/1024 = 1/2 e, naturalmente, l'altro 1/2 è nello spettro negativo in bin [924].

Se si raddoppia la lunghezza del DFT, N = 2048, i valori di uscita sarebbero due volte quelli del DFT a 1024 punti, il che, di nuovo, rende i risultati insignificanti a meno che non si ridimensioni di 1 / N. La lunghezza del DFT non dovrebbe essere un fattore in questo tipo di analisi. Quindi, in questo esempio, è necessario ridimensionare il DFT di 1 / N.

Non deve ridimensionare una trasformazione in avanti.

Supponiamo ora di avere la risposta all'impulso di un filtro FIR a 32 tocchi e di voler conoscere la sua risposta in frequenza. Per comodità, assumeremo un filtro passa-basso con un guadagno di 1. Sappiamo che per questo filtro, il componente DC del DFT deve essere 1. E dovrebbe essere chiaro che questo sarà il caso indipendentemente dalle dimensioni del DFT perché il componente DC è semplicemente la somma dei valori di input (cioè la somma dei coefficienti FIR).

Pertanto, per questo input, il DFT non viene ridimensionato di 1 / N per ottenere una risposta significativa. Questo è il motivo per cui puoi azzerare una risposta all'impulso quanto vuoi senza influenzare l'esito della trasformazione.

Qual è la differenza fondamentale tra questi due esempi?

La risposta è semplice Nel primo caso, abbiamo fornito energia per ogni campione di input. In altre parole, l'onda sinusoidale era presente per tutti i 1024 campioni, quindi abbiamo dovuto ridimensionare l'output del DFT di 1/1024.

Nel secondo esempio, per definizione, abbiamo fornito energia solo per 1 campione (l'impulso a n = 0). Ci sono voluti 32 campioni affinché l'impulso si facesse strada attraverso il filtro 32 tap, ma questo ritardo è irrilevante. Dato che abbiamo fornito energia per 1 campione, ridimensioniamo l'uscita del DFT di 1. Se un impulso fosse definito con 2 unità di energia anziché 1, ridimensioneremmo l'uscita di 1/2.

Non deve ridimensionare una trasformazione inversa.

Consideriamo ora un DFT inverso. Come per il DFT forward, dobbiamo considerare il numero di campioni a cui stiamo fornendo energia. Naturalmente, dobbiamo stare un po 'più attenti qui perché dobbiamo riempire in modo appropriato sia i bin di frequenza positiva che negativa. Tuttavia, se posizioniamo un impulso (ovvero un 1) in due contenitori appropriati, l'output risultante del DFT inverso sarà un'onda coseno con un'ampiezza di 2, indipendentemente da quanti punti utilizziamo nel DFT inverso.

Pertanto, come con il DFT diretto, non ridimensioniamo l'uscita del DFT inverso se l'ingresso è un impulso.

Deve ridimensionare una trasformazione inversa.

Ora considera il caso in cui conosci la risposta in frequenza di un filtro passa-basso e vuoi fare un DFT inverso per ottenere la sua risposta all'impulso. In questo caso, poiché stiamo fornendo energia in tutti i punti, per ottenere una risposta significativa dobbiamo ridimensionare l'output del DFT di 1 / N. Questo non è così ovvio perché i valori di input saranno complessi, ma se lavori attraverso un esempio, vedrai che questo è vero. Se non si scala di 1 / N, si avranno valori di risposta all'impulso di picco nell'ordine di N che non può essere il caso se il guadagno è 1.

Le quattro situazioni che ho appena descritto sono esempi di end point in cui è chiaro come ridimensionare l'output del DFT. Tuttavia, c'è molta area grigia tra i punti finali. Quindi consideriamo un altro semplice esempio.

Supponiamo di avere il seguente segnale, con N = 1024, Freq = 100:

f(n) = 6 * cos(1*Freq * 2*Pi * n/N)  n = 0 - 127
f(n) = 1 * cos(2*Freq * 2*Pi * n/N)  n = 128 - 895
f(n) = 6 * cos(4*Freq * 2*Pi * n/N)  n = 896 - 1023

Dominio del tempo

Notare le differenze di ampiezza, frequenza e durata per i tre componenti. Sfortunatamente, il DFT di questo segnale mostrerà tutti e tre i componenti allo stesso livello di potenza, anche se il 2 ° componente ha 1/36 del livello di potenza degli altri due.

Dominio Freq senza finestre

Il fatto che tutti e tre i componenti stiano fornendo la stessa quantità di energia è ovvio, il che spiega i risultati della DFT, ma qui c'è un punto importante da chiarire.

Se conosciamo la durata dei vari componenti di frequenza, possiamo ridimensionare di conseguenza i vari bin di frequenza. In questo caso, faremmo questo per ridimensionare accuratamente l'output del DFT: bin [100] / = 128; bin [200] / = 768; bin [400] / = 128;

Il che mi porta al mio ultimo punto; in generale, non abbiamo idea di quanto tempo sia presente un particolare componente di frequenza all'ingresso del nostro DFT, quindi non possiamo assolutamente fare questo tipo di ridimensionamento. In generale, tuttavia, forniamo energia per ogni punto campione, motivo per cui dovremmo ridimensionare il DFT in avanti di 1 / N durante l'analisi di un segnale.

A complicare le cose, applicheremmo quasi sicuramente una finestra a questo segnale per migliorare la risoluzione spettrale del DFT. Poiché il primo e il terzo componente di frequenza sono all'inizio e alla fine del segnale, vengono attenuati di 27 dB mentre il componente centrale viene attenuato di soli 4 dB (finestra Hanning).

Spettro con finestra

Per essere chiari, l'output del DFT può essere una rappresentazione piuttosto scadente dell'input, ridimensionato o meno.

Nel caso del DFT inverso, che di solito è un puro problema matematico, al contrario dell'analisi di un segnale sconosciuto, l'ingresso al DFT è chiaramente definito, quindi sai come ridimensionare l'output.

Quando si analizza un segnale con un analizzatore di spettro, analogico o FFT, i problemi sono simili. Non si conosce la potenza del segnale visualizzato a meno che non si conosca anche il suo ciclo di lavoro. Ma anche in questo caso, la finestra, l'intervallo, i tassi di scansione, il filtro, il tipo di rivelatore e altri fattori funzionano tutti per ottenere il risultato.

In definitiva, devi stare molto attento quando ti sposti tra i domini del tempo e della frequenza. La domanda che hai posto riguardo al ridimensionamento è importante, quindi spero di aver chiarito che devi capire l'input del DFT per sapere come ridimensionare l'output. Se l'input non è chiaramente definito, l'output del DFT deve essere considerato con grande scetticismo, che lo si ridimensioni o meno.


Ho scelto questa risposta per completezza e molte informazioni dettagliate, ma vedi anche l'eccellente risposta di Phonon per una panoramica intuitiva.
bryhoyt,

9

Posso pensare a diverse ragioni che riguardano problemi di precisione computazionale, ma che probabilmente non renderebbero giustizia perché matematicamente la stiamo definendo allo stesso modo, non importa quale sia, e la matematica non conosce problemi di precisione.

Ecco la mia opinione su di esso. Pensiamo concettualmente a cosa significa DFT nel senso dell'elaborazione del segnale, non solo come una trasformazione. In questo caso, mi sembra che l'applicazione di DFT a un segnale e a un sistema ci faccia desiderare di vedere risultati diversi.

Ad esempio, applichiamo il DFT a un segnale costante di valore 1. Supponiamo anche che questo segnale abbia una lunghezza limitata e sia lungo 16 tocchi. Cosa vogliamo da DFT in questo caso? Ovviamente, vogliamo che ci dica quale ampiezza ha ogni componente di frequenza del segnale. Chiaramente, il nostro segnale ha un singolo componente di frequenza 0 e ampiezza 1. Ma il DFT ci fornisce un singolo picco a bin 0 e altezza 16! In questo caso, la tua frustrazione per la definizione del DFT ha perfettamente senso. Dovremmo ridimensionare i coefficienti di analisi, non i coefficienti di sintesi.

Bene, ora analizziamo lo stesso array di numeri, ovvero la nostra stringa di 16, ma in questo caso come sistema. Cosa intendiamo concettualmente la risposta in frequenza di un sistema? Molte persone diranno che è l'ampiezza dell'output rispetto a quella dell'ingresso, cioè la funzione di trasferimento. In questo caso, supponiamo che immettiamo un segnale DC di ampiezza unitaria nel nostro sistema e osserviamo l'ampiezza della risposta allo stato stazionario. Bene, contrai insieme due segnali costanti di 16-tap e otterrai una rampa transitoria seguita da un'uscita a stato stazionario che è un segnale DC di ampiezza (dai un'occhiata a questo!) 16! In questo caso, la nostra definizione di trasformazione dell'analisi senza ridimensionamento ha più senso che altro.

Alla fine della giornata, è tutto su ciò che stai cercando di rappresentare. Ci sono molte ragioni per considerare questa definizione di DFT incentrata sul sistema.

1(N)


Ottima risposta, grazie! Ho scelto la risposta di user5108_Dan per completezza, ma la tua risposta ha sicuramente contribuito a fornire la migliore intuizione.
Bryhoyt,

7

In realtà, 3 modi diversi di mettere i fattori di scala sono comuni in varie e diverse implementazioni FFT / IFFT: 1.0 avanti e 1.0 / N indietro, 1.0 / N avanti e 1.0 indietro e 1.0 / sqrt (N) sia avanti che indietro.

Queste 3 variazioni di ridimensionamento consentono tutte un round trip IFFT (FFT (x)), utilizzando le funzioni di trigenerazione sin () e cos () generiche non scalate per i fattori del doppio, per essere una trasformazione dell'identità.

Notare che preservare la magnitudine sinusoidale sull'FFT in avanti non preserva l'energia totale (come nel teorema di Parseval). Scegli quello che preferisci.

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.