L'up-campionamento prima della correlazione incrociata è inutile?


12

Si consideri un semplice caso in cui due segnali provenienti da due sensori diversi sono correlati in modo incrociato e il ritardo di arrivo calcolato dall'assissa del picco della loro funzione di correlazione incrociata.

Supponiamo ora che, a causa dei vincoli di dimensionalità di entrambe le antenne e dei vincoli sulla massima frequenza di campionamento possibile, il ritardo massimo raggiungibile possibile sia , corrispondente a 10 campioni.D

Il problema:

A causa di questi vincoli, il ritardo calcolato può variare da qualsiasi valore intero compreso tra 0 e 10 campioni, ovvero: . Ciò è problematico perché ciò che desidero veramente è la discriminazione a ritardo frazionario del ritardo tra i due segnali che incidono sulle mie antenne e la modifica delle dimensioni o della frequenza di campionamento non è un'opzione.0D10

Alcuni pensieri:

  • Naturalmente, la prima cosa a cui penso in questo caso è il sovracampionamento dei segnali prima di eseguire una correlazione incrociata. Tuttavia, penso che questo sia in qualche modo "imbroglione", perché non sto davvero aggiungendo alcuna nuova informazione nel sistema.

  • D=7D=8D=7.751

Le domande):

  • Questo è veramente 'barare'?

    • In caso contrario, da dove proviene questa nuova "informazione"?
    • Se sì, quali altre opzioni sono disponibili per stimare i tempi di ritardo frazionario?
  • Sono consapevole di ricampionare il risultato della correlazione incrociata, nel tentativo di raccogliere le risposte del sottocampione al ritardo, ma anche questa non è una forma di "imbroglione"? Perché è diverso dal ricampionamento prima della correlazione incrociata?

Se davvero il upsampling non sta 'tradendo', allora perché dovremmo mai aumentare la nostra frequenza di campionamento? (La frequenza di campionamento non è sempre migliore in un certo senso rispetto all'interpolazione di un segnale di campionamento basso?)

Sembrerebbe quindi che potremmo semplicemente campionare a una velocità molto bassa e interpolare quanto vogliamo. Ciò non renderebbe quindi 'inutile' aumentare la frequenza di campionamento alla luce della semplice interpolazione di un segnale al desiderio del nostro cuore? Mi rendo conto che l'interpolazione richiede tempo di calcolo e che semplicemente non inizierebbe con una frequenza di campionamento più elevata, ma è questa l'unica ragione?

Grazie.


3
Dubito che ci sia qualche differenza nell'accuratezza, poiché la quantità di informazioni è la stessa in entrambi i modi, ma è sicuramente più economico interpolare dopo la correlazione incrociata solo nella regione di interesse piuttosto che ricampionare tutto prima e poi fare tutte quelle ulteriori moltiplicazioni.
endolith

@endolith Punti positivi. Ora sono più chiaro sul perché / come funziona, e sì, il sovracampionamento del risultato sarebbe la strada da percorrere in questo caso.
Spacey,

Risposte:


12

Non è un imbroglio e non aggiunge nemmeno nuove informazioni. Quello che stai facendo è la stessa cosa che sta facendo qualsiasi LPF di ricampionamento, aggiungendo zeri e poi ricostruendo la forma d'onda con le informazioni di frequenza già note. Pertanto, non ci sono nuove informazioni, ma esiste ancora una risoluzione temporale più precisa.

Aumentare il risultato è simile: nessuna nuova informazione, ma una risoluzione temporale più precisa. Puoi fare qualcosa di molto simile attraverso l' interpolazione quadratica .

Tutti questi metodi - upsampling e interpolazione polinomiale - ottengono le loro informazioni su dove si trova il picco frazionario sia dal picco stesso che dai suoi vicini. Un rapido esempio pittorico. Picco Equilibrato

La linea blu nella figura sopra è il mio simulato dati di correlazione incrociata (anche se potrebbe essere qualsiasi risultato, non solo una correlazione incrociata). È quello che chiamo picco "equilibrato" perché i vicini sono simmetrici. Come prevedibile, l'interpolazione quadratica risultante (linea rossa) indica che il picco reale è pari a zero.

L'immagine in basso, d'altra parte, mostra un picco sbilanciato. Si noti che nel risultato non è cambiato nulla tranne i valori dei due vicini più vicini. Ciò causa l'interpolatore, tuttavia, per spostare la sua stima del picco frazionario. inserisci qui la descrizione dell'immagine

Un vantaggio secondario di questi metodi (interpolazione polinomiale e upsampling) è che ti dà anche una stima del vero valore di picco, sebbene di solito siamo più interessati alla posizione.

Se davvero il upsampling non sta 'tradendo', allora perché dovremmo mai aumentare la nostra frequenza di campionamento?

Per soddisfare il criterio di Nyquist.

Avere una frequenza di campionamento più alta non è sempre migliore in un certo senso che interpolare un segnale campionato basso?

No. Da un punto di vista teorico, fintanto che il criterio di Nyquist è soddisfatto, non importa quale sia la frequenza di campionamento. Da un punto di vista pratico, si va generalmente con una frequenza di campionamento più bassa possibile per ridurre i requisiti di archiviazione e il carico computazionale, il che a sua volta riduce le risorse necessarie e il consumo di energia.


1
Fs

1
@Mohammad Sì e no. Il rumore, sia dai risultati stessi che dal rumore di quantizzazione, alla fine renderà insignificante aumentare la risoluzione temporale. Fino a quel momento, però, sì, il sovracampionamento maggiore dovrebbe migliorare l'accuratezza della stima.
Jim Clay,

1
note e codice di esempio per quadratica / interpolazione parabolica: gist.github.com/255291#file_parabolic.md e alcuni metodi di interpolazione alternativi: dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
endolith

2
@JimClay Ho avuto la possibilità di dormirci sopra. È chiaro ora - l'informazione è sempre lì - è solo codificata nella relazione tra i campioni per così dire. E questo è ciò che il poli-raccordo utilizza infatti nella sua interpolazione. E poiché il segnale è limitato in banda, (cioè può cambiare così rapidamente in un arco di tempo), ci sono solo così tanti modi in cui può esistere tra i campioni.
Spacey,

8

È possibile interpolare qualsiasi segnale bandlimited. L'informazione aggiuntiva "tra i campioni" è contenuta nei campioni adiacenti, più il fatto che il segnale era banditato prima del campionamento (che tende a diffondere informazioni tra i campioni adiacenti). Se due segnali sono bandlimited, allora sarà la correlazione incrociata, quindi anche la correlazione incrociata può essere interpolata. Il Upsampling è solo un'altra forma di interpolazione, una forma molto accurata di interpolazione per segnali bandlimited; ma potresti usare anche l'interpolazione Sinc (entrambe le quali possono essere più accurate dell'interpolazione quadratica o parabolica).

L'interpolazione può mostrare un picco tra i campioni. Quindi forse non inutile.

Se hai un segnale contenente uno spettro più ampio, può contenere più informazioni. Il campionamento a una velocità più elevata fornirà quindi maggiori informazioni, ma solo fino a poco meno della metà della nuova frequenza limite di banda, e solo se il segnale contenesse il contenuto di frequenza spettrale utile effettivo sopra il vecchio limite di banda e se ora è possibile ottenere questo ulteriore spettro utilizzando un nuovo processo o filtro di limitazione della banda a banda larga, anziché il vecchio più a perdita. Il campionamento di dati a una frequenza molto più elevata di un segnale che era già stato limitato a una frequenza molto più bassa al di sotto di Fs / 2 acquisterà solo l'interpolazione, non ulteriori contenuti informativi.

Se il campionamento è quantizzato, il campionamento a una velocità più elevata potrebbe acquisire una frazione di LSB più informazioni, a causa del dithering o del noise shaping dell'errore di quantizzazione. Ma questo dipende dal rapporto S / N e dalla precisione del campionatore e dall'esatto processo di quantizzazione utilizzato nel campionamento.

Se due segnali non sono opportunamente banditi prima del campionamento e della correlazione incrociata, allora non solo sia il upsampling che l'interpolazione potrebbero procurarti un risultato spazzatura, ma potrebbe anche essere la correlazione incrociata non interpolata originale.


1
Grazie hotpaw2. Quindi è corretto affermare che non importa davvero se si esegue l'upsamping di entrambi i segnali e quindi si correlano o si correlano e quindi si esegue l'upsamping del risultato? A causa del limite di banda, i due metodi dovrebbero darti gli stessi risultati?
Spacey,

@Mohammad: penso che contenga le stesse informazioni in entrambi i modi, ma poiché l'interpolazione non è perfetta, i risultati saranno leggermente diversi a seconda dell'implementazione.
endolito

3

Penso che la migliore risposta che posso darti sia: hai tutti i mezzi per scoprirlo da solo. Costruisci un esempio "indietro". Usando Matlab, inizia con due segnali campionati con periodi di campionamento molto piccoli (in modo che siano segnali a tempo quasi continuo). Calcola la correlazione incrociata e trova il picco (se è quello che vuoi), che sarai in grado di fare con alta precisione. Quindi, sottocampionare entrambi i segnali e ripetere il processo. Confronta la posizione e l'altezza del secondo picco con il primo. Sono sicuro che il secondo sarà peggiore. Il miglioramento dal secondo al primo è quello che guadagni, se esegui il upcampionamento prima della correlazione incrociata.

Per ricampionare nel modo giusto, entrambi i segnali devono essere limitati dalla banda ed è necessario conoscere quelle larghezze di banda. Le "nuove" informazioni che menzioni nella tua domanda provengono dai campioni adiacenti e dal fatto che i segnali sono limitati dalla banda.


Grazie Telaclavo. Una cosa che è in realtà non è chiaro per me è, la terminologia di essere 'banda limitata'. So cosa significa, ma non capisco perché venga menzionato qui. QUALSIASI sistema, tranne forse il rumore, è "limitato dalla banda", quindi perché viene menzionato più volte in questo senso?
Spacey,

3

Per aggiungere un po 'alle risposte precedenti, è possibile ottenere l'equivalente di una correlazione incrociata limitata in banda ricampionata rendendo la variabile di correlazione non intera.

τ

τ=argmaxτn=0N1f(n)g(n+τ)

Cioè, trova il massimo della correlazione incrociata.

Le variabili di input ae bdescrivono e per e si presume che siano entrambi limitati di banda e periodici con il periodo (il passaggio viene implementato nel dominio discreto di Fourier). è nell'intervallo .f(n)g(n)n={0,1,...,N1}Nτ[N+1,N1]

L'intenzione è quella di mostrare come la correlazione incrociata può essere eseguita per non interi , che è definita dalla chiusura . Questo utilizza l' array, che descrive la rotazione del fasore complesso ad ogni frequenza discreta corrispondente a un time-shift . quindi lo ridimensiona per ogni turno. Dovrebbe essere evidente che per mantenere un segnale in tempo reale, le rotazioni delle frequenze negative sono solo volte le rotazioni delle frequenze positive (per le corrispondenti coppie di frequenze).τcorrelate_pointomegaτ=1τ1

L'unica sottigliezza è nel modo in cui trattate il campione (la frequenza di nyquist), poiché questo è condiviso tra le bande positive e negative. La soluzione qui usata è quella di interpolare tra il fasore di rotazione positivo e il fasore di rotazione negativo (che sono riflessi sull'asse reale), che è di proiettare il fasore di rotazione dell'unità sull'asse reale, che è una funzione cos ( è perché è il valore di corrispondente alla frequenza di nyquist). Chiaramente questo valore deve essere reale per mantenere un segnale di dominio in tempo reale.N2piomega

Puoi usarlo per calcolare la correlazione incrociata per qualsiasi valore arbitrariamente preciso di . Chiama semplicemente la chiusura (che può essere restituita come richiamabile) con qualsiasi valore di desideri.ττ

import numpy
from numpy import fft
from scipy import optimize

def arg_max_corr(a, b):

    if len(a.shape) > 1:
        raise ValueError('Needs a 1-dimensional array.')

    length = len(a)
    if not length % 2 == 0:
        raise ValueError('Needs an even length array.')

    if not a.shape == b.shape:
        raise ValueError('The 2 arrays need to be the same shape')

    # Start by finding the coarse discretised arg_max
    coarse_max = numpy.argmax(numpy.correlate(a, b, mode='full')) - length+1

    omega = numpy.zeros(length)
    omega[0:length/2] = (2*numpy.pi*numpy.arange(length/2))/length
    omega[length/2+1:] = (2*numpy.pi*
            (numpy.arange(length/2+1, length)-length))/length

    fft_a = fft.fft(a)

    def correlate_point(tau):
        rotate_vec = numpy.exp(1j*tau*omega)
        rotate_vec[length/2] = numpy.cos(numpy.pi*tau)

        return numpy.sum((fft.ifft(fft_a*rotate_vec)).real*b)

    start_arg, end_arg = (float(coarse_max)-1, float(coarse_max)+1)

    max_arg = optimize.fminbound(lambda tau: -correlate_point(tau), 
            start_arg, end_arg)

    return max_arg

1
Dovrò pensare se la tua domanda è corretta (e non ho tempo in questo momento). Il modo in cui ci penso è che stai spostando il ritardo di gruppo del tuo segnale, cosa che puoi fare di qualsiasi importo tu voglia. Questo è esattamente equivalente alla convoluzione circolare con una funzione sinc nel dominio del tempo, con il sinc offset di (ma ancora campionato nelle stesse posizioni del segnale originale). Vale la pena notare che con un intero , tutti gli incroci zero del sinc si allineano con i tempi di campionamento ad eccezione di at (dove è ), motivo per cui il segnale viene banalmente spostato. τ τ 1τττ1
Henry Gomersall,

Oh, la tua domanda è scomparsa! Tuttavia, lascerò la risposta lì.
Henry Gomersall,

Grazie Henry - (Scusami per aver eliminato la mia domanda, stavo cercando di chiarire! :-)). (Sono un po 'lento sull'assorbimento del pitone ma ci sto lavorando). Ad ogni modo, sì, penso di capire il tuo metodo - e penso che il cuore di esso risieda nel fatto che viene presa un'interpolazione della risposta di fase del risultato di correlazione incrociata e il valore corrispondente viene decifrato da lì. Forse ho bisogno di più tempo per digerire, ma comunque interessante. Dove / Perché l'hai usato invece dell'interpolazione nel dominio del tempo? Il contesto potrebbe aiutare. Grazie! tau
Spacey,

Era un'ingenua ricerca della velocità, anche se sono felice di sentirmi dire che esiste un algoritmo di interpolazione del dominio del tempo più veloce. La mia logica è che per eseguire il time shift non intero nel dominio del tempo, avrai bisogno di moltiplicazioni per eseguire la convoluzione, rispetto a usando il metodo di Fourier (o dintorni ). La correlazione viene quindi presa nel dominio del tempo in entrambi i casi. Se provi a ricampionare, mi sembra una cosa molto lenta da fare (e lo farei anche nel dominio di Fourier!). N ( log N + 1 )N2N(logN+1)
Henry Gomersall,

Inoltre, trovo che pensare nel dominio di Fourier in realtà sia molto più semplice. Ma forse non è normale!
Henry Gomersall,

2

Esiste una prova intuitiva che il sovracampionamento prima della correlazione incrociata equivale a farlo in seguito:

La correlazione incrociata è la convoluzione con l'altro segnale invertito nel tempo. L'inversione del tempo non influisce sulla larghezza di banda. La convoluzione è una moltiplicazione nel dominio della frequenza, che inoltre non aumenta la larghezza di banda. Se i segnali originali sono correttamente limitati in banda, a metà della frequenza di campionamento, lo sarà anche il risultato della correlazione incrociata. Non viene introdotto alcun alias per rovinare il risultato. L'interpolazione successivamente salva il lavoro.

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.