Come si valutano le risposte complesse (e la giustificazione)?


11

Sto sviluppando un software che calcola la risposta di un sistema confrontando la FFT dei segnali di input e output. I segnali di ingresso e uscita sono divisi in finestre e, per ogni finestra, i segnali vengono sottratti medianamente e moltiplicati per una funzione di Hann. La risposta dello strumento per quella finestra è quindi il rapporto tra gli FFT dei dati elaborati.

Credo che quanto sopra sia una procedura standard, anche se potrei descriverla male. Il mio problema è come combinare le risposte da più finestre.

Per quanto posso vedere, l'approccio corretto è la media dei valori complessi, su tutte le finestre. L'ampiezza e la risposta di fase sono quindi l'ampiezza e la fase del valore medio complesso a ciascuna frequenza:

av_response = sum_windows(response) / n
av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2)
av_phase = atan2(imag(av_response), real(av_response))

con loop impliciti sui bin di frequenza.

Ma mi è stato chiesto di cambiare questo per calcolare l'ampiezza e la fase in ogni finestra prima , e poi la media delle ampiezze e fasi attraverso tutte le finestre:

amplitude = sqrt(real(response)**2 + imag(response)**2)
av_amplitude = sum_windows(amplitude) / n
phase = atan2(imag(response), real(response))
av_phase = sum_windows(phase) / n

Ho sostenuto che ciò non è corretto perché gli angoli della media sono "semplicemente sbagliati" - la media di 0 e 360 ​​gradi è 180, ad esempio, ma le persone con cui sto lavorando hanno risposto dicendo "OK, mostreremo solo l'ampiezza".

Quindi le mie domande sono:

  • Sono corretto nel pensare che il secondo approccio sia generalmente errato anche per le ampiezze?
  • In tal caso, ci sono delle eccezioni che possono essere rilevanti e che possono spiegare perché le persone con cui sto lavorando preferiscono il secondo metodo? Ad esempio, sembra che i due approcci siano d'accordo quando il rumore diventa piccolo, quindi forse questa è un'approssimazione accettata per il rumore basso?
  • Se il secondo approccio non è corretto, ci sono riferimenti convincenti e autorevoli che posso usare per mostrarlo?
  • Se il secondo approccio non è corretto, ci sono esempi validi e di facile comprensione che mostrano questo per ampiezza (come fa la media di 0 e 360 ​​gradi per fase)?
  • In alternativa, se non avessi ragione, quale sarebbe un buon libro per educarmi meglio?

Ho provato a sostenere che la media di -1 1 1 -1 1 -1 -1 dovrebbe essere zero anziché 1, ma questo non è convincente. E mentre penso che potrei, con il tempo, costruire un argomento basato sulla stima della massima verosimiglianza dato un particolare modello di rumore, non è il tipo di ragionamento che le persone con cui sto lavorando ascolteranno. Quindi, se non sbaglio, ho bisogno di un potente argomento dell'autorità o di una dimostrazione "ovvia".

[Ho provato ad aggiungere più tag, ma non riesco a trovarne di pertinenti e non riesco a definirne di nuovi come nuovo utente - mi dispiace]


Quale motivo danno per sfatare il tuo metodo?
nibot,

la risposta appare più fluida quando viene tracciata con il secondo metodo. penso che ciò sia dovuto al fatto che, per i casi esaminati, non vi è alcun segnale significativo (a f superiore), mentre il secondo approccio forza un segnale "ad apparire" dal rumore. inoltre, vari problemi politici / di comunicazione come si potrebbe immaginare.
Andrew Cooke,

1
Hai provato a fornire alcuni casi di test? Prendi dati casuali e filtrali attraverso alcuni filtri con risposta in frequenza nota. Verificare che la stima della funzione di trasferimento converga alla funzione di trasferimento nota.
nibot,

no. non l'ho fatto. è un buon suggerimento. Grazie. se presentato bene, potrei vedere che è convincente.
Andrew Cooke,

Risposte:


13

La stima della funzione di trasferimento è di solito implementata in modo leggermente diverso rispetto al metodo descritto.

Il tuo metodo calcola

F[y]F[x]

dove angle brackets rappresenta le medie prese sui segmenti di dati e una funzione di windowing viene applicata a ciascun segmento di dati prima di eseguire la trasformata di Fourier ( ).F

Un'implementazione più tipica calcolerà la densità spettrale incrociata di xe divisa per la densità spettrale di potenza di x:

F[y]F[x]|F[x]|2=F[y]F[x]F[x]F[x]

Dove rappresenta un prodotto puntuale e il coniugato complesso.

Credo che ciò riduca l'effetto dei segmenti di dati in cui i bin di sono eccessivamente piccoli.F[x]

Stima incoerente

Il datore di lavoro ha suggerito di stimare la funzione di trasferimento utilizzando

|F[y]||F[x]|

Questo funziona , ma ha due grossi svantaggi:

  1. Non ottieni informazioni sulla fase.
  2. Se le misurazioni dell'ingresso dell'uscita presentano rumore aggiuntivo, la stima della funzione di trasferimento non sarà corretta.yxy

Il tuo metodo e il metodo che ho descritto aggirano questi problemi usando una media coerente .

Riferimenti

L'idea generale di utilizzare segmenti mediati sovrapposti per calcolare la densità spettrale di potenza è nota come metodo di Welch . Credo che l'estensione dell'uso di questo per stimare le funzioni di trasferimento sia spesso conosciuta come il metodo di Welch, anche se non sono sicuro che sia menzionato nel documento di Welch. Cercare il documento di Welch potrebbe essere una risorsa preziosa. Un'utile monografia sull'argomento è il libro di Bendat e Piersol, Random Data: Analysis and Measurement Procedures .

Validazione

Per convalidare il software, suggerisco di applicare diversi casi di test, in cui si genera rumore bianco gaussiano e lo si alimenta attraverso un filtro digitale con una funzione di trasferimento nota. Inserire gli input e gli output nella routine di stima della funzione di trasferimento e verificare che la stima converga al valore noto della funzione di trasferimento.


ah! grazie. esaminerò / proverò questo.
Andrew Cooke,

@nibot Quali, esatte, lunghezze FFT vengono utilizzate qui?
Spacey,

Puoi usare qualsiasi lunghezza. La lunghezza determina la risoluzione e, implicitamente (dato una quantità fissa di dati con cui lavorare), il numero di medie. Fft più lungo = risoluzione migliore ma anche errori più grandi a causa del minor numero di medie.
nibot,

ok, un'altra differenza è che hai <F (y) F * (x)> / <F (x) F * (x)> mentre Phonon ha <F (y)> <F * (x)> / (< F (x)> <F * (x)>) afaict: o (
andrew cooke

Non ha senso calcolare <F (y)> <F * (x)> / (<F (x)> <F * (x)>), poiché i <F * (x)> verranno annullati immediatamente. Penso che sia corretto come l'ho scritto.
nibot

12

Benvenuti in Signal Processing!

Hai assolutamente ragione. Non puoi semplicemente fare una media delle magnitudini e delle fasi DFT separatamente, in particolare le fasi. Ecco una semplice dimostrazione:

Sia . Per definizione, magnitudinee fase di sono:z=a+bi|z|zz

|z|=a2+b2
z=tan1(ba)

La media di due valori complessi e èzz1z2

z=z1+z22=a1+b1i+a2+b2i2=(a1+a2)+(b1+b2)i2

In questo caso,

|z|=(a1+a2)24+(b1+b2)24=12(a1+a2)2+(b1+b2)2a12+b12+a22+b222

Anche,

z=tan1(b1a1)+tan1(b2a2)2tan1(2(b1+b2)2(a1+a2))

Se si confronta il grado in cui detengono queste disuguaglianze, si può dire che l'approssimazione perè fuori da un termine quadratico, mentre approssimazione per in completamente priva di significato.|z|z

Ora, per fare ciò che stai cercando di fare, ti suggerisco quanto segue. Teoricamente, è possibile trovare una risposta all'impulso di un sistema dividendo DFT dell'uscita per DFT dell'ingresso. Tuttavia, in presenza di rumore, otterrai risultati molto strani. Un modo leggermente migliore per farlo sarebbe utilizzare la stima della risposta all'impulso FFT a doppio canale, che procede come segue (derivazione non fornita qui, ma è possibile trovarla online).

Sia , dove è il DFT di - th (quindi apice ) frammento di segnale in ingresso con finestra (da qui il pedice per input ). Analogamente, per il segnale di uscita , lasciare . Potete vedere che i segnali sono semplicemente le medie dei DFT con finestre. Quindi l'approssimazione statistica FFT a doppio canale per la risposta all'impulso è data daGi(f)=Fi1(f)+Fi2(f)++FiN(f)NFik(f)kkiGo(f)=Fo1(f)+Fo2(f)++FoN(f)NG H (f)H(f)H^(f)H(f)

H^(f)=Go(f)Gi(f)|Gi(f)|2

dove sta per coniugazione complessa (capovolgi il segno di tutte le parti immaginarie).()


2
Grazie; non ero sicuro di votare questa o la risposta di nibot come migliore risposta - penso che stiano sostenendo lo stesso processo, quindi sono andato con la raccomandazione del libro, ma se avessi due voti avrei incluso anche questo ...
Andrew Cooke

1
@andrewcooke Sì, entrambi stanno sostenendo esattamente la stessa cosa. Spero che questo chiarisca le cose per te e per i vostri colleghi.
Phonon,

è stato di grande aiuto per me (grazie ancora). lunedì suggerirò che io (1) implemento il metodo suggerito e (2) faccia un confronto con dati noti (sintetici) per tutti e tre. quindi spero che l'approccio migliore vincerà: o)
andrew cooke,

@Phonon Quali lunghezze FFT stiamo usando per calcolare gli FFT qui? length_of_signal + max_length_of_channel + 1?
Spacey,

@Mohammad Deve essere lungo almeno il doppio del ritardo che ti aspetti di trovare. Ciò è dovuto alla simmetria circolare del DFT, quindi otterrai risultati di ritardo sia causali che non causali nel tuo risultato.
Phonon,

3

Questa è una differenza tra la media coerente e incoerente degli spettri FFT. La media coerente ha maggiori probabilità di rifiutare il rumore casuale nell'analisi. Incoerente ha maggiori probabilità di accentuare le dimensioni del rumore casuale. Quale di questi è più importante per il tuo rapporto sui risultati?


se danno risultati diversi, immagino di voler un preventivo imparziale. è imparziale?
Andrew Cooke,
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.