cosa è meglio: up o downsampling?


13

Voglio confrontare due segnali o curve. una curva campionata a 30 Hz un campionatore di curve a 2000 Hz

Sfortunatamente hanno frequenze di campionamento diverse. Il primo viene campionato a 30 Hz, il secondo a 2000 Hz. Matlab ha la funzione 'ricampiona' e ho pensato, questo renderebbe il confronto molto più semplice.

La mia domanda è: è più saggio ricampionare la seconda curva o ricampionare la prima?

Modifica: ho fatto come mi è stato detto. Nell'immagine a sinistra sono le curve originali. Le curve a destra vengono ricampionate. In alto a destra viene ricampionato, in basso a destra viene ricampionato.

So che le curve sono di diversa lunghezza, quando ricampionate. Tuttavia, il secondo segnale verrà ritagliato alla lunghezza del primo segnale. confronto


1
Ho valutato la tua domanda. Quale pensi sia più saggio.

se la precisione molto elevata non ha importanza (in questo caso penso che non lo faccia), puoi sottocampionare, specialmente se rende il processo molto più veloce e apprezzi il tuo tempo di lavoro
user1306322

@Stanley Pawlukiewicz, chiaramente, perdo il campionamento perdo tutte le piccole cime. Quindi il ricampionamento potrebbe essere la strada da percorrere. Poi di nuovo non ho bisogno delle piccole cime. Ho anche pensato di appianare il secondo segnale. Quindi nel mio caso forse non importa davvero se campiono su o giù.
NelsonOrange,

Altre risposte e risposte richieste?
Laurent Duval,

Risposte:


18

In breve:

  • Upsampling : fa / non dovrebbe perdere informazioni (se fatto con saggezza), quindi più sicuro ,
  • Downsampling : può perdere informazioni (se fatto in modo saggio), ma più efficiente dal punto di vista computazionale .

Quindi, se si confrontano i dati a velocità diverse, e in una fase di valutazione quando si cerca di definire come il confronto dovrebbe essere fatto (quali funzioni vengono confrontati con quello metrico, con la quale esterni, come la precisione, in modo efficiente, robustezza, ecc), una Il primo approccio molto semplice sarebbe di sottocampionare entrambi i segnali con un fattore intero per riconciliare il loro campionamento . Qui, questo è abbastanza OK, 6000 Hz potrebbe funzionare per entrambi.

I motivi potrebbero essere, per la pratica DSP:

  • con l'upsampling intero, non sei obbligato a usare tecniche di filtraggio complicate e la semplice interpolazione lineare è facile. Ricorda però che l'upsampling aggiunge alcune informazioni.
  • con i segnali hanno la stessa scala, puoi estrarre caratteristiche e confrontarle: rumore, variabilità, pendenze, derivate, ecc. Puoi applicare la corretta correzione scala / offset (non hanno la stessa ampiezza), usare lineare o non- trasformazioni lineari (Fourier, ecc.) per verificare se esistono caratteristiche di somiglianza in domini diversi
  • in questa fase, dovresti essere in grado di qualità e quantificare le caratteristiche / metriche necessarie per costruire il tuo algoritmo. E puoi stimare cosa puoi perdere da entrambi i dati. Ad esempio, puoi creare il tuo algoritmo e vedere come è robusto segnalare il downsampling e fino a che punto puoi andare. Qui, il tuo algoritmo inizia ad essere più efficiente.

Dopo aver trascorso un po 'di tempo su questo, sei più pronto a ricominciare da zero e decidi se eseguire il downcampionamento o meno, con quale metodo, ecc. Per raggiungere sia la sicurezza che l'efficienza .

Per fornire alternative, se si decide di confrontare i dati nel dominio Fourier, è possibile trasmettere facilmente due segnali con lunghezza e frequenza di campionamento diverse allo stesso numero di coefficienti di Fourier, facilitando il confronto nel dominio della frequenza.


14
Il downsampling perderà quasi sempre informazioni, anche se non è fatto in modo poco saggio. Tuttavia, la perdita di informazioni potrebbe effettivamente essere una cosa saggia, quindi ...
lasciato il

@leftaroundabout In quali casi limite il downsampling non può perdere informazioni?
Willem,

2
@leftaroundabout Non sono d'accordo. Perdere informazioni è sempre peggio che conservarle. L'unica cosa saggia è sapere quali informazioni buttare via per una migliore rappresentazione del segnale, non la perdita di informazioni stessa.
AlexTP

5
@Willem: come caso estremamente ovvio, un segnale DC può essere ricampionato in un singolo campione. In generale, qualsiasi segnale che non ha componenti al di sopra del (nuovo) limite di Nyquist può essere sottoposto a campionamento sicuro.
MSalters il

1
Si può sostenere che nessuna informazione viene persa da un segnale CC a un segnale 1 campione poiché è possibile riconvertire in un segnale identico a quello originale da 1 campione. Si può sostenere che le informazioni vanno perse perché se si dà il segnale 1 campione a una persona senza ulteriori informazioni e si chiede "Rappresenta un segnale CC?" la risposta sarà "Non so, non abbastanza informazioni con un campione".
SE viola il copyright il

7

Se usi una funzione come plot (x, y) il modo più semplice per visualizzarli sullo stesso grafico è semplicemente non ricampionare nessuno di essi, ma semplicemente riempire ogni vettore x con i valori adeguati per ciascun segnale, quindi entrambi appaiono dove vuoi sul display.

Puoi anche impostare il grafico in modo da avere due diversi assi x (uno per ogni curva) con etichette e legende diverse, se lo desideri.

Ora, riguardo al ricampionamento. Userò Fs per la frequenza di campionamento.

Un segnale campionato non può contenere componenti di frequenza superiori a Fs / 2. È bandlimited.

Inoltre, un segnale che contiene solo componenti di frequenza fino a una frequenza F può essere rappresentato con precisione a una frequenza di campionamento di 2F.

Nota che questa rappresentazione "accurata" è matematica, non visiva. Per una buona rappresentazione visiva, avere 5-10 campioni per periodo (quindi nessuna componente di frequenza notevole sopra Fs / 10 o giù di lì) aiuta davvero il cervello a collegare i punti. Vedi questa figura: stesso segnale, la curva inferiore ha una frequenza di campionamento più bassa, non c'è perdita di informazioni perché la frequenza è inferiore a Fs / 2 ma sembra ancora una schifezza.

inserisci qui la descrizione dell'immagine

È lo stesso identico segnale però. Se sovracampiona (ricostruisci) quello in basso con un filtro sinc, otterrai quello in alto.

La decimazione (downsampling) ripiegherà nel segnale tutti i componenti di frequenza più alti della nuova Fs / 2. Questo è il motivo per cui di solito mettiamo un filtro passa basso ripido prima del decimatore. Ad esempio, per eseguire il downsampling da Fs = 2000 Hz fino a Fs = 30 Hz, per prima cosa applicheremmo un passa basso di alto ordine con un taglio un po 'inferiore a 15 hz e solo successivamente decimiamo.

Tuttavia, questo filtro introdurrà problemi di risposta transitoria, presenterà un ritardo di fase a determinate frequenze e potrebbe modificare l'aspetto visivo del segnale, cosa che non si desidera fare se si desidera confrontarli visivamente. Si applica la regola sopra, non sottocampionare troppo, mantieni sempre Fs come 5-10 volte la più alta frequenza di interesse se vuoi che la forma del segnale significhi qualcosa. Questo è il motivo per cui un ambito 200MHz deve campionare a 1-2 Gsps.

La mia domanda è: è più saggio ricampionare la seconda curva o ricampionare la prima?

Come detto sopra, il più saggio è non confondere affatto con i dati e semplicemente presentarli ciascuno con il proprio asse x sullo stesso grafico.

In alcuni casi sarebbe richiesta la conversione del tasso di campionamento. Ad esempio per ridurre il numero di punti, ridurre l'uso della memoria, renderlo più veloce ... o per fare in modo che entrambi i segnali utilizzino le stesse coordinate "x" per eseguire calcoli su di essi.

In questo caso è anche possibile utilizzare un F intermedio, decodificare il segnale con F alti e campionare quello con F bassi. O semplicemente sottocampionare quello con le F alte.

Fai attenzione ai criteri di Nyquist e non scegliere una frequenza di campionamento troppo bassa o perderai la fedeltà della forma d'onda sul segnale Fs alto, otterrai spostamenti di fase a causa del filtro passa-basso, ecc. O se conosci il contenuto ad alta frequenza è trascurabile, puoi fare una scelta informata. io

Se usi l'interpolazione lineare per far corrispondere le coordinate "x", ricorda che ha bisogno anche di una F piuttosto alta. L'interpolazione avrebbe funzionato sul segnale superiore nella trama sopra, non avrebbe funzionato su quello in basso. Lo stesso se sei interessato a min, max e simili.

E ... nota che il sovracampionamento / upsampling guasterà anche la risposta transitoria, almeno visivamente. Ad esempio, se si esegue un sovracampionamento di un passaggio, si riceveranno molti squilli a causa della risposta all'impulso del filtro sinc. Questo perché ottieni un segnale bandlimited e un bel passo con gli angoli quadrati ha in realtà una larghezza di banda infinita.

Prenderò un'onda quadra come esempio. Pensa al segnale campionato originale: 0 0 0 1 1 1 0 0 0 1 1 1 ... Il tuo cervello vede un'onda quadra.

Ma la realtà è che dovresti immaginare ogni campione come un punto e non c'è nulla tra i punti. È l'intero punto del campionamento. Non c'è nulla tra i campioni. Quindi, quando questa onda quadra è stata sovracampionata usando un'interpolazione sincera ... sembra divertente.

inserisci qui la descrizione dell'immagine

Questa è semplicemente la rappresentazione visiva di un'onda quadra bandlimited. I wiggles esistono ... o forse no. Non c'è modo di sapere se fossero presenti o meno nel segnale originale. In questo caso, la soluzione sarebbe stata quella di acquisire l'onda quadra originale con una frequenza di campionamento più elevata per ottenere una migliore risoluzione sul bordo, idealmente si vogliono diversi campioni sul bordo in modo che non sembri più un passo di larghezza di banda. Quindi quando si sovracampiona un tale segnale, il risultato non avrà artefatti visivi.

Comunque. Come puoi vedere ... basta pasticciare con gli assi x. È molto più semplice.


4

Il downsampling perde informazioni. Il upsampling è senza perdita di dati quando il fattore è un numero intero (tenendo presente anche il fattore), ma alcune informazioni vengono perse quando il fattore non è un numero intero. Il upsampling potrebbe teoricamente perdere più informazioni del downsampling, per fattori di ricampionamento molto specifici.

Quale dovresti usare? Dipende dal livello di certezza di cui hai bisogno.

Se non hai bisogno di certezza matematica e desideri solo un euristico, il downsampling è più veloce e l'upsampling è più preciso .

Se hai bisogno di mettere limiti all'accuratezza del tuo calcolo: è possibile ma non posso aiutarti.


+1, perché sei riuscito a spremere alcune informazioni importanti in una risposta molto concisa.
dsp_user,

3

Dipende da cosa intendi per "confronta" e "più saggio". La cosa saggia, che non è difficile in Matlab, è farlo in entrambi i modi e decidere da soli.

In realtà, se modificassi la tua domanda con i risultati di entrambi gli approcci, voterei la tua domanda e più persone la troverebbero interessante, e molto probabilmente aiuterebbe a capire "confronta"


1

Vorrei sottolineare un problema che si verifica durante il ricampionamento che potrebbe essere cruciale in questa operazione. Quando un segnale viene sottoposto a ricampionamento e gli endpoint dei dati sono lontani dai valori zero, si verifica l' effetto limite . Nelle esperienze pratiche, questo effetto indesiderato dovrebbe essere eliminato. Condivido con questa community un breve saggio con immagini e codice che ho scritto a riguardo che potrebbe aiutare a capire.

https://medium.com/@davidpinyol91/edge-effects-when-resampling-a-signal-on-matlab-how-to-solve-it-cc6458ab1306

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.