MATLAB: ridimensionamento


11

In MATLAB, gli output delle funzioni ffte / o ifftrichiedono spesso un'ulteriore elaborazione prima di essere considerati per l'analisi.

Ho sentito molte opinioni diverse su ciò che è corretto:

  • scalata

    Mathworks afferma che ffte le ifftfunzioni si basano sulle seguenti equazioni:

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
  • Ridimensionamento per lunghezza del segnale

    I miei colleghi in genere scalano i dati di 1N immediatamente dopo l'elaborazionefft.
    (Non consideriamo ifftdatigrezziprima del ridimensionamento.)

    %% Esegue fft
    X_f = fft (x, n_sample, 1) / n_sample; % fft deve essere normalizzato dal numero di campioni nei dati. % Questa convenzione è stata stabilita dallo sviluppatore del software (Mathworks).

    È corretto?

    1. In tal caso, perché la ifftfunzione MATLAB prevede che non abbiamo già ridimensionato di ?1/N
    2. Esiste una ifftfunzione MATLAB o un'opzione che non si ridimensiona automaticamente di ?1/N

    In alternativa, esiste una convenzione migliore che dovremmo usare per posizionare l' ? Ad esempio, posizionando 1 / N in anziché anziché , oppure posizionando 1 / 1/N1/Nfftifft in entrambe le equazioni, anziché un1/N?1/N1/N

  • Ridimensionamento per periodo di campionamento

    Ho sentito che le funzioni ffte ifftpresuppongono che il periodo di campionamento , e che affinché le funzioni siano vere, è necessario quanto segue applicare:Tsampling=1/fsampling=1

X[k]=1Tsamplingn=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=TsamplingNk=1NX[k]e+j2π(k1)(n1)N,where1nN

Vedi link:

  • Link 1 (vedi commento a Matt Szelistowski del Dr Seis)
  • Link 2 (vedi risposta di Rick Rosson contro quella del dottor Seis)
  • Link 3 (vedi commento di Matt (Messaggio: 7/16) e commento di Poorya (14/16)
  • Link 4 (vedi pag. 10, slide [1,1])
  • Link 5 (vedi pag. 8 + 9) [sembra che stia usando una convenzione inversa per fft e ifft].

È vero?

Sono particolarmente stimolato perché non riesco a trovare equazioni DFT o DTFT su Wikipedia che includano il periodo di campionamento.


2
A proposito, Kando lo sta semplicemente affermando così com'è (con MATLAB): ma devo dire che questa convenzione cablata di MATLAB per mettere DC nel bin # 1 (o l'ampiezza del componente di frequenzaknel bink+1)mi fa impazzire !!!!
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
kk+1
robert bristow-johnson il

Risposte:


6

Se ridimensionare o meno la FFT diretta di 1 / N dipende dal risultato desiderato per ulteriori analisi: energia (preservare l'identità di Parseval) o ampiezza (misurare altezza o volt, ecc.).

Se si desidera misurare o analizzare l'energia, non ridimensionare di 1 / N e una sinusoide più lunga della stessa ampiezza produrrà un risultato FFT più grande, proporzionale alla maggiore energia di un segnale più lungo.

Leggermente più comunemente, se si desidera misurare o analizzare le ampiezze, quindi ottenere una sinusoide più lunga (quindi con più energia totale alla stessa identica ampiezza) per produrre circa lo stesso risultato FFT di un segnale più corto, è necessario ridimensionare Somma FFT di un rapporto proporzionale alla lunghezza. Il rapporto potrebbe essere reference_length / N, che a volte è 1 / N se il guadagno in ingresso del sistema è 1,0 per qualsiasi dimensione o unità, comprese le dimensioni dell'intervallo di tempo, che si sceglie di utilizzare per ulteriori analisi. È necessario ridimensionare proporzionalmente perché un DFT è una somma: più si sommano elementi simili, più grande è il risultato.

Così. Energia o ampiezza. Quale vuoi?

Ora se ridimensionate la FFT in avanti, non dovreste ridimensionare l'inverso in modo che IFFT (FFT (x)) == x. O viceversa.

Mi sembra che 1 / sqrt (N) per il ridimensionamento sia quando si ha bisogno di una simmetria formale per alcune prove, sia quando si costruisce una sorta di pipeline hardware in cui la latenza e / o il numero di unità / porte aritmetiche per il DFT e perché l'IDFT deve essere identico. Ma non si ottiene né una buona misurazione diretta né dell'energia né dell'ampiezza per alcun tipo tipico di analisi ingegneristica.


1/N1/N1/N1/N

Inoltre, quando dici "quindi con più energia alla stessa identica ampiezza" ... non preferiresti dire "frequenza"?
LCsa

7

1/N1/N1

Il commento

% fft deve essere normalizzato dal numero di campioni nei dati.
% Questa convenzione è stata stabilita dallo sviluppatore del software (Mathworks).

è sbagliato. Nessuno dice che devi normalizzare il risultato della FFT. Se vuoi, sei libero di farlo.

TT

(1)X(2πkNT)Tn=0N1x(nT)ej2πkn/N,0k<N

TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]. Ulteriori dettagli sull'uso del DFT per l'approssimazione della trasformata di Fourier a tempo continuo sono disponibili in questa risposta .


2
A cosa serve il downvote? Per favore, commenta.
Matt L.

1
Di solito voto a scrutinio segreto, ma questa volta farò un'eccezione. a seconda di cosa si sta facendo con il DFT, ci sono certamente convenzioni "migliori" di altre. (ma nessuna convenzione è migliore delle altre in tutte le circostanze.)
robert bristow-johnson

5

soprattutto dal momento che questa è una domanda sulla convenzione, non rafforzerò la ridicola convenzione di MATLAB e risponderò solo con le giuste convenzioni o convenzioni. cioè l'indicizzazione di MATLAB per il DFT non è corretta e corretta, ma sono praticamente agnostico riguardo a quale delle tre convenzioni di ridimensionamento comuni.

0n<N0k<Nx[n]NX[k]N

x[n+N]=x[n] nZ
X[k+N]=X[k] kZ

x[n]X[k]

h[n]x[n]i=0N1h[i]x[ni]=i=0N1x[i]h[ni]
W[k]X[k]i=0N1W[i]X[ki]=i=0N1X[i]W[ki]

quindi l'unico vantaggio di una convenzione rispetto all'altra (supponendo che entrambe le convenzioni siano valide) può riguardare la semplicità di espressione di alcuni dei teoremi.


la convenzione di ridimensionamento più comune per il DFT:

DFT{x[n]}X[k]n=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

ha il vantaggio della semplicità riguardo alla convoluzione circolare nel "dominio del tempo"

DFT{h[n]x[n]}=H[k]X[k]

ma c'è un fattore di ridimensionamento di cui devi preoccuparti se ti stai impegnando nel "dominio della frequenza" :

iDFT{W[k]X[k]}=1Nw[n]x[n]

Il teorema di Parseval ha anche un fattore di ridimensionamento di cui preoccuparsi.

n=0N1|x[n]|2=1Nk=0N1|X[k]|2

e il teorema della dualità:

DFT{X[n]}=Nx[k]
iDFT{x[k]}=1NX[n]

l'altra convenzione di ridimensionamento comune per il DFT:

iDFT{X[k]}x[n]k=0N1X[k]e+j2πkn/NDFT{x[n]}X[k]=1Nn=0N1x[n]ej2πkn/N

ejωknej(2πk/N)nX[k]x[n]kNA|X[k]|=|X[k]|=|X[Nk]|=A2

ha anche più semplicità riguardo alla convoluzione circolare nel dominio della frequenza

iDFT{W[k]X[k]}=w[n]x[n]

ma c'è un fattore di ridimensionamento di cui devi preoccuparti se ti stai impegnando nel dominio del tempo :

DFT{h[n]x[n]}=1NH[k]X[k]

Il teorema di Parseval ha anche un fattore di ridimensionamento di cui preoccuparsi.

1Nn=0N1|x[n]|2=k=0N1|X[k]|2

e il teorema della dualità:

DFT{X[n]}=1Nx[k]
iDFT{x[k]}=NX[n]

la convenzione di ridimensionamento unitario per il DFT è identica nel ridimensionamento con il suo inverso e conserva l'energia attraverso la trasformata o trasformata inversa:

DFT{x[n]}X[k]1Nn=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

convoluzione sia in dominio del tempo o nel dominio della frequenza ha lo stesso fattore di scala di cui preoccuparsi:

DFT{h[n]x[n]}=1NH[k]X[k]

iDFT{W[k]X[k]}=1Nw[n]x[n]

ma il teorema di Parseval non ha alcun fattore di ridimensionamento di cui preoccuparsi.

n=0N1|x[n]|2=k=0N1|X[k]|2

né il teorema della dualità:

DFT{X[n]}=x[k]
iDFT{x[k]}=X[n]


Quando si parla di convenzioni DFT, di solito si tratta solo dei fattori di ridimensionamento, non della non questione dell'indicizzazione. Se pensavi che mi stavo riferendo all'indicizzazione quando ho detto che quella è la convenzione DSP comune, allora è stato un malinteso. Ovviamente mi riferivo al ridimensionamento; l'indicizzazione è totalmente irrilevante, perché non ha nulla a che fare con la definizione di DFT (e il ridimensionamento ha).
Matt L.

non è un fottuto "non-problema" quando, in MATLAB, usi la max(abs(X))funzione per trovare dove si trova un picco spettrale e dimentichi di sottrarre 1dall'indice restituito e farai matematica su di esso. è un problema. e triste a quello. l'origine dell'indicizzazione ha tanto a che fare con la " definizione del DFT" quanto il ridimensionamento. ha a che fare con ciò che la contabilità è richiesta o meno.
robert bristow-johnson il

avrei potuto essere io, ma questa volta no :) Ma non sono d'accordo sull'importanza che attribuisci all'indicizzazione, ma apprezzo che sia personale. Ancora una volta, nessun voto negativo perché apprezzo il tempo che hai dedicato alla risposta.
Matt L.
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.