Quali sono i meriti relativi di vari schemi di ricampionamento?


12

Di recente ho incontrato un sistema DSP che eseguiva un upsampling interno tramite zero padding. In attesa di un ordine zero, sono stato sorpreso di scoprire che un segnale CC non produceva un'uscita CC; nell'armonia erano presenti anche molte armoniche della frequenza di campionamento interna (inferiore).

Questo porta alla mia domanda: quali tecniche di ricampionamento sono comunemente usate e quali sono i loro meriti relativi? Perché dovrei scegliere zero padding, zero order hold o hold del primo ordine e quali altre tecniche sono disponibili?

Alcuni chiarimenti:

  • Il sistema è in tempo reale, quindi lo schema di ricampionamento deve essere causale.
  • Il upsampler è seguito da un filtro anti-aliasing che può anche essere specificato.

Risposte:


11

Ai fini di questa risposta userò la terminologia di Matlab e definirò "upsampling" come processo di inserimento zeri tra i campioni di input e "interpolazione" come processo combinato di upsampling e filtro per rimuovere gli alias ( essendo il fattore di interpolazione) introdotto dal ricampionamento. Per una spiegazione di come / perché l'upsampling introduce alias, vedere questo thread .m - 1 mm1m1m

È importante comprendere che qualsiasi filtro passa-basso può essere utilizzato per eliminare gli alias e completare così l'interpolazione. Tuttavia, alcuni filtri presentano vantaggi se utilizzati nell'interpolazione. Discuterò i vari tipi di filtri di interpolazione di seguito.

Filtro FIR

I filtri FIR interpolati sono efficienti perché combinano upsampling e alias filter in un unico passaggio. Questo è più facilmente visibile in un esempio. Supponiamo di avere una sequenza di dati e vogliamo interpolarla di un fattore due. Il primo passo consiste nel ricampionare di un fattore due. Ciò modifica la sequenza di dati originale da a .x 0 , x 1 , . . . x N x 0 , 0 , x 1 , 0 , . . . x Nx[n]x0,x1,...xNx0,0,x1,0,...xN

Supponiamo ora di avere un filtro FIR passa-basso, , che useremo per rimuovere l'alias. Quando contiamo la sequenza di dati ricampionata con il filtro, metà dei rubinetti del filtro sono stimolati da campioni diversi da zero e metà dei rubinetti sono inattivi perché corrispondono ai campioni zero. La metà stimolata e la metà inattiva si spostano avanti e indietro mentre il filtro passa attraverso i dati. Questi due set di rubinetti vengono talvolta definiti fasi del filtro.h[n]

Questo stesso effetto può essere ottenuto implicitamente eliminando l'upsampling e filtrando la sequenza di dati originale con un filtro FIR interpolante. Il filtro FIR interpolante produce output per ogni campione di input. Per tutte le uscite il filtro funzionerà sullo stesso campione di input (dove K è il numero di rubinetti del filtro e "ceil" è la funzione soffitto).m c e i l ( K / m )mmceil(K/m)

Si spera che un esempio illustri come funziona. Supponiamo di avere un filtro a sei rubinetti e di interpolare di un fattore due. I rubinetti del filtro sono [1 -2 4 4 -2 1]. Se interpolassimo letteralmente e quindi filtrassimo i campioni e i rubinetti del filtro si allineerebbero (una volta che ci fosse una sovrapposizione completa) come segue:

0:1X2:-20:4X1:40:-2X0:1
Esempio successivo ...

X3:10:-2X2:40:4X1:-20:1
Esempio successivo ...

0:1X3:-20:4X2:40:-2X1:1
E così via. Il punto del filtro di interpolazione è che salta effettivamente l'inserimento degli zeri e alterna semplicemente il set di tocchi che utilizza al momento. Pertanto, la sequenza precedente ora apparirebbe come la seguente:

X2:-2X1:4X0:1

X3:1X2:4X1:-2

X3:-2X2:4X1:1

Zero Order Hold

Un interpolatore di mantenimento di ordine zero è uno che ripete semplicemente ogni campione volte. Quindi un fattore di due interpolatori di mantenimento in ordine zero converte in . Questo metodo è interessante perché è estremamente facile da implementare, sia in termini di codifica che di carico computazionale.m-1X0,X1,...XNX0,X0,X1,X1,...XN,XN

Il problema è che il suo filtro passa-basso è piuttosto scarso. Possiamo vedere che quando riconosciamo che l'interpolatore zero-hold è un caso speciale di interpolazione FIR. Corrisponde al upsampling seguito da un filtro rettangolare a . La trasformata di Fourier di un filtro rettangolare è una funzione sinc, che è un filtro passa-basso piuttosto squallido. Lo shabbiness può essere risolto con un filtro FIR di compensazione, ma se lo farai potresti anche usare un buon filtro passa-basso per cominciare.m

Presa del primo ordine

Il primo ordine hold è un passo in avanti rispetto all'interpolatore zero-hold in quanto interpola linearmente i campioni up usando i due campioni input più vicini. Quindi, un fattore di due interpolatori di mantenimento del primo ordine convertirà in .X0,X1,...XNX0,X0+X12,X1,X1+X22,...XN

Come l'interpolatore di mantenimento di ordine zero, l'interpolatore di mantenimento di primo ordine è un caso speciale di interpolazione FIR. Corrisponde al upsampling e al filtro con un filtro a triangolo. Per l'interpolazione fattore due il filtro è , per interpolazione fattore tre il filtro è e così via.[1[12112][132312312]

Il filtro triangolo è costituito da due filtri rettangolari contorti insieme, che corrisponde a sinc al quadrato nel dominio della frequenza. Questo è un netto passo in avanti rispetto alla posizione zero, ma non è ancora eccezionale.

Filtro IIR

Non ho mai usato un filtro IIR interpolante, quindi non ne parlerò molto. Presumo che si applichino gli stessi argomenti del filtro normale: i filtri IIR sono più efficienti, possono essere instabili, non hanno fasi lineari, ecc. Non credo che possano combinare i passaggi di ricampionamento e filtro come un filtro FIR, ma potrei sbagliarmi.

Interpolazione FFT

Lo inserirò anche se non è molto comune (ovviamente, non penso che neanche lo zero-hold sia comune). Questo thread discute il ricampionamento FFT, in cui il ricampionamento è sia interpolazione che decimazione.

Stive di ordine superiore

Gli interpolatori di secondo ordine vengono generalmente chiamati "interpolatori quadratici". Sono non lineari e quindi non possono essere implementati come filtri FIR, che sono lineari. Non capisco bene la matematica dietro di loro, quindi non discuterò della loro performance. Dirò, tuttavia, che credo che siano piuttosto comuni al di fuori dell'elaborazione del segnale.

Esistono anche metodi di ordine superiore (tre o più). Questi sono indicati come "regressioni polinomiali".

MODIFICARE:

Filtri a cascata Integrator Comb (CIC)

Ho dimenticato di menzionare i filtri CIC . I filtri CIC sono usati per due motivi: usano solo additivi / sottrattori (non è un grosso problema ora che le moltiplicazioni sono veloci ed economiche) e possono fare cambiamenti di frequenza di campionamento molto grandi in modo abbastanza efficiente. Il loro lato negativo è che sono essenzialmente un'implementazione efficiente di un filtro rettangolare a cascata, quindi hanno tutti gli svantaggi dei filtri rettangolari come discusso sopra. Gli interpolatori CIC sono praticamente sempre preceduti da un filtro FIR di compensazione che pre-distorce il segnale per annullare la distorsione introdotta dal CIC. Se la variazione della frequenza di campionamento è abbastanza grande, ne vale la pena il costo del filtro pre-distorsione.


Sondaggio fantastico, signor Jim. Per aggiungere alla categoria di ordini superiori, credo che questo sia anche chiamato "regressione polinomiale". In questo, dato un insieme specifico di punti, calcoliamo una linea, parabola, cubo, polinomio di ordine superiore di migliore adattamento. Una volta ottenuta l'equazione, possiamo facilmente capire quali sono i punti intermedi.
Spacey,

Domande: 1) Non sono del tutto chiaro sull'ultimo paragrafo della parte Filtro FIR. Hai detto che la 2a e la 3a uscita corrispondenti al 1o ingresso campione usano i nastri di filtro 1, 4, 7 e poi 2, 5, 8. Comunque menzioni anche che sono tutti zeri ... quindi non sono la 2a e 3a uscita campioni solo zeri in questo caso? 2) Questo "filtro di interpolazione FIR" ha un aspetto simile, per esempio, [1 0 0 3.2 0 0 -2.1 0 0 1.1 0 0] per m = 3? (I numeri sono inventati).
Spacey,

@Mohammad Ho modificato la risposta. Spero che questo possa essere d'aiuto. E grazie per le informazioni sulle regressioni polinomiali.
Jim Clay,

1
@endolith Due motivi, penso: complessità e ha senso dal punto di vista computazionale solo quando la lunghezza del filtro supera un certo numero (e non sono sicuro di quale sia quel numero). L'approccio FFT funziona molto bene quando si tratta di blocchi di campioni, ma se si ha a che fare con un flusso di campioni, è necessario fare anche sovrapposizione, aggiunta o sovrapposizione per salvare la continuità.
Jim Clay,

1
@endolith Una cosa davvero interessante dell'approccio FFT è che non ci sono praticamente costi per l'utilizzo di un filtro di grandi dimensioni.
Jim Clay,

3

La risposta di Jim la copre abbastanza bene. Tutti i metodi di ricampionamento seguono lo stesso schema di base:

  1. Inserisci zeri tra i campioni: questo si traduce in una ripetizione periodica dello spettro originale ma lascia completamente intatto lo spettro nella banda originale
  2. Filtro passa basso per sbarazzarsi di tutti gli spettri specchio

La principale differenza tra i metodi è la modalità di implementazione del filtro passa-basso. Il upsampler ideale sarebbe includere un filtro passa-basso ideale ma non è pratico. Considerando il problema nel dominio della frequenza, è possibile trovare l'algoritmo di up-sampling adatto alle proprie esigenze specifiche:

  1. Quanta distorsione di ampiezza posso tollerare nella banda originale? Quella frequenza dipende?
  2. Mi interessa la fase nella band originale? Se è necessario mantenere la fase è necessaria una FIR lineare. Altrimenti una fase minima fa un lavoro migliore nel mantenimento della "causalità" e degli insulti acuti.
  3. Quanto devo sopprimere le immagini speculari? Fondamentalmente le immagini speculari appariranno come rumore extra nella banda base.

Gli interpolatori non lineari di alto ordine (spline, eremita, Lagrange) in genere non funzionano bene poiché l'errore di interpolazione è altamente dipendente dal segnale e quasi impossibile da mappare a requisiti specifici.


Cosa intendi con "fa un lavoro migliore nel mantenere la" causalità "?
nibot,

0

Quando si considera la differenza tra campionamento e mantenimento (ovvero ripetizione dei valori di campionamento) e zero padding, è utile rendersi conto (come sottolineano Jim e Hilmar) che il campionamento e hold possono essere interpretati come upsampling da padding zero seguito da un Filtro FIR la cui risposta all'impulso consiste in un impulso rettangolare.

Ad esempio, quando si esegue l'upsampling da 2 kHz a 64 kHz (un fattore di 32), è possibile implementarlo inserendo 31 zeri tra ciascuna coppia di campionamento di 2 kHz e quindi filtrando per mezzo di un filtro FIR composto da 32, con tutti gli altri coefficienti zero.

sincτ=0

Si scopre che questa sincfunzione ha i suoi valori nulli esattamente alle armoniche della frequenza di campionamento inferiore. Nel nostro esempio di applicazione del sovracampionamento da 2048 Hz a 65536 Hz, la risposta in frequenza dell'operazione di campionamento e mantenimento ha valori nulli a 2048 Hz, 4096 Hz, ecc.

inserisci qui la descrizione dell'immagine

Da ciò, concludo che qualsiasi filtro interpolante che sopprime totalmente le armoniche della frequenza di campionamento originale assomiglierà a "campiona e mantieni". È giusto?

1/f


Il problema è che i null sono molto stretti, quindi la maggior parte dei segnali avrà energia al di fuori dei null.
Jim Clay,

@JimClay, i null null non sono perfetti per uccidere le armoniche della frequenza di campionamento più bassa? Sono d'accordo, vorresti anche qualche altro polo intorno a 1 kHz per sbarazzarti delle frequenze delle immagini. Immagino che vorrei espandere la mia domanda: come si può progettare un buon filtro di interpolazione?
nibot,

Si progetta un filtro passa-basso la cui banda di passaggio include l'ampiezza di banda del segnale e la cui banda di arresto include gli alias che vengono introdotti durante il campionamento. Le frequenze tra il punto 3dB del segnale e l'alias sono la tua banda di transizione. Se la tua domanda è "come posso progettare un filtro passa-basso?", Allora ponilo in un'altra domanda e possiamo discuterne.
Jim Clay,

In genere capisco come progettare i filtri, di solito posizionando i poli e gli zeri nel dominio s esplicitamente e quindi convertendoli in filtri del dominio z. Mi chiedevo se ci fossero trucchi speciali per i filtri di interpolazione. Il messaggio che sto portando via è che non ci sono davvero trucchi: i filtri di interpolazione sono proprio come qualsiasi altro tipo di filtro e il loro design è una scelta di un compromesso tra le varie considerazioni (ondulazione, fase, ritardo del gruppo, attenuazione minima della banda di arresto, complessità computazionale, ecc.).
nibot

D'altra parte, non so nulla sulla progettazione di filtri FIR.
nibot,
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.