Vai al contenuto

Teoria dei segnali/Campionamento dei segnali

Wikibooks, manuali e libri di testo liberi.

Campionamento dei segnali

[modifica | modifica sorgente]

Campionamento

[modifica | modifica sorgente]

Dato un segnale continuo , si ottiene da esso il segnale campionato con un campionatore che moltiplica il segnale in ingresso per un segnale campionatore periodico di periodo ; l'operazione è detta \emph{campionamento}, è il \emph{tempo di campionamento}, è la \emph{frequenza di campionamento}

il segnale campionatore è una successione periodica di impulsi $c(t)$ \begin{equation} c(t-pT_{c}) = \sumI{p} c(t-pT_{c}) \end{equation} \begin{displaymath} \TCF{c(t-pT_{c})} = \frac{1}{T_{c}} \sumI{k}

                   \left. C(f) \right|_{f=kf_{c}} \delta(f-kf_{c})

\end{displaymath} \begin{displaymath} \TSF{c(t-pT_{c})} = f_{c} \left. C(f) \right|_{f = kf_{c}} \end{displaymath}

il segnale campionato è:

z(t) = x(t) c(t-iT_{c}) \phantom{30} Z(f) = X(f) \conv C(f) = \sumI{k} C(kf_{c}) X(f - kf_{c}) \end{equation}

Campionamento ideale

[modifica | modifica sorgente]

Si ha un \emph{campionamento ideale} quando il segnale campionatore è una sequenza di delte di Dirac \begin{equation} c_{id}(t) = T_{c} \sumI{n} \delta(t-nT_{c}) \phantom{30} C_{id}(f) = \sumI{k} \delta(f-kf_{c}) \phantom{30} c_{id}(t) = \delta(t) \end{equation}

Campionamento naturale

[modifica | modifica sorgente]

Un \emph{campionatore naturale} utilizza un impulso campionatore rettangolare $c(t) = \rect{t}{\tau}$, \begin{equation} c_{na}(t) = \sumI{n} \rect{t-nT_{c}}{\tau} \phantom{30} C_{na}(f) = f_{c} \sumI{k} \sinc(kf_{c}) \delta(f - kf_{c}) \end{equation} se si scompone il segnale periodico $c_{na}(t)$ nella sua trasformata serie, il termine a frequenza nulla crea una replica base dello spettro del segnale $x(t)$, i termini a frequenze minori del doppio della banda del segnale creano repliche dello spettro di $x(t)$ che si sovrappongono alla replica base ed impediscono di ricostruire esattamente il segnale

Campionamento a mantenimento

[modifica | modifica sorgente]

Un altro tipo di campionamento reale consiste nel mantenere il valore assunto dal segnale per un \emph{tempo di mantenimento} $\tau \leq T_{c}$ (spesso $\tau=T_{c}$) ogni tempo di campionamento; uno schema del campionatore a mantenimento o \emph{campionatore sampling-hold} è composto da un campionatore ideale seguito da un filtro con risposta impulsiva costante per un intervallo $\tau$ e quindi da un filtro equalizzatore con funzione di trasferimento $H_{e}(f) = \frac{1/\tau}{\sinc(f\tau)}$ \begin{equation} z(t) = \left( x(t) \sumI{n}\delta(t-nT_{c}) \right)

      \conv \rect{t-\tau/2}{\tau}
      \conv h_{e}(t)

\end{equation} \begin{displaymath} Z(f) = \left( X(f) \conv \sumI{k} \delta(f-kf_{c}) \right)

      \frac{\tau}{T_{c}} \sinc(f\tau) \e{-j\pi f\tau} 
      \frac{\frac{1}{\tau}}{\sinc{f\tau}}

\end{displaymath}

Interpolazione

[modifica | modifica sorgente]

Esistono vari metodi per ricostruire a partire dai campioni $x(nT_{c})$ il segnale $x(t)$; indichiamo con $x'(t)$ il segnale ricostruito

Il \emph{teorema del campionamento} (o teorema di Shannon) afferma che è possibile ricostuire esattamente un segnale $x(t)$ a banda rigorosamente limitata $B_{x(t)}$ se i campioni $x(nT_{c})$ sono ricavati ad una frequenza di campionamento almeno doppia della banda del segnale (\emph{condizione di Nyquist}) \begin{equation} \mbox{se} \phantom{5} f_{c} \geq 2B_{x(t)} \phantom {30} \mbox{allora} \phantom{5} \TCFI{\rect{f}{2B_{x(t)}}\TDF{x(nT_{c})}} = x(t) \end{equation}

un campionamento che non rispetta la condizione di Nyquist causa un errore di \emph{aliasing}, ovvero le repliche dello spettro del segnale si sovrappongono e diventano indistinguibili

Un \emph{filtro interpolatore} $h_I(t)$ è un SLS che compie l'operazioe di interpolazione del segnale campionato \begin{equation} x'(t) = z(t) \conv h_I(t) \end{equation}

Interpolatore cardinale

[modifica | modifica sorgente]

\`E possibile a livello teorico ricostruire esattamente senza approssimazioni un segnale (ovvero $x'(t) = x(t)$) se si filtra il segnale campionato con un \emph{interpolatore cardinale} che è un sistema con risposta \begin{equation} H_{IC}(f) = T_{c}\rect{f}{f_{c}} \phantom{30} h_{IC}(t) = \sinc t f_{c} \end{equation} (ovvero un sistema non causale).

In questo modo il segnale in uscita è \begin{displaymath} x'(t) = \sum _{n = -\infty} ^{+\infty}

       x(nT_{c}) \sinc \left( \frac{t - nT_{c}}{T_{c}} \right)
     = x(t)

\end{displaymath}

poiché (????) \begin{displaymath} \TCFI{\rect{f}{f_{c} \TDF{x(nT_{c})}}} \end{displaymath}

Interpolatore a mantenimento

[modifica | modifica sorgente]

(o \emph{interpolatore di ordine 0}) utilizza l'impulso interpolante \begin{equation} h_{I0}(t) = \rect{t-\frac{T_{c}}{2}}{T_{c}} \phantom{30} H_{I0}(f) = T_{c} \sinc (fT_{c}) \e{-j2\pi f \frac{T_{c}}{2}} \end{equation}

per ridurre l'aliasing che si genera si fa seguire da un \emph{filtro anti-aliasing} passa-basso di banda $B_{aa}$ che viene scelta in genere un po' maggiore della banda del segnale originario (visto che il filtro passa basso non sarà ideale) \begin{equation} H_{aa}(f) = \rect {f}{2\B_{aa}} \end{equation}

Interpolatore lineare

[modifica | modifica sorgente]

(o \emph{interpolatore di ordine 1}) utilizza l'impulso interpolante \begin{equation} h_{I1}(t) = \tri{t}{T_{c}} \phantom{30} H_{I1}(f) = T_{c} \sinc^{2} (fT_{c}) \end{equation} l'errore di aliasing che si genera in questo modo è meno pronunciato rispetto all'interpolatore a mantenimento, ma si può utilizzare comunque u filtro anti-aliasing

Trasformata di una sequenza

[modifica | modifica sorgente]

Quando si calcola numericamente la trasformata di un segnale non è possibile fare una somma infinita di termini, quindi considera il segnale ristretto ad $N$ campioni, calcolando quindi la trasformata finita di Fourier della sequenza (??????) moltiplicato per una \emph{finestra} $w_{r}=(iT_{c})$ che restringe il segnale ad N campioni la finestra più semplice è \begin{equation} w_{r}(iT_{c}) = \drect{n}{N} \phantom{30} |W_{r}|(f+if_{c}) = \left| \frac{\sin(N\pi f T_{c})}{\sin(\pi f T_{c})} \right| \end{equation} la cui trasformata ha una forma a lobi simile ad una $\sinc(\cdot)$ con un lobo centrale elevato e due lobi laterali; è conveniente che il lobo centrale sia più stretto possibile e che i lobi laterali siano più bassi possibile, per evitare \begin{itemize} \item \emph{perdita di definizione}, due delte di dirac a frequenze vicine non sono distinguibili \item \emph{leckage}, interferenza di una componente sull'altra \end{itemize} per ridurre questi problemi si utilizza una finestra più complessa, detta \emph{finestra di Kaiser} \begin{equation} w_{k}(nT_{c}) = \left\{ \begin{array}{cl} I_{0} \left( \beta \left( \sqrt{ 1 - \left( \frac{n-\alpha}{\alpha} \right)^{2} } \right) \right)& \mbox{per $0 \leq n \leq N-1$} \\ 0 & \mbox{altrove} \\ \end{array} \right. \end{equation} dove $I_{0}$ è la funzione di Bessel modificata di ordine 0, $N$ è il numero dei campioni, $\alpha = \frac{N-1}{2}$, $\beta$ è un parametro che varia la forma della finestra

Variando i due parametri $N$ e $\beta$ è possibile regolare la larghezza del luogo principale per ottenere una migliore definizione e il rapporto tra l'altezza del lobo principale e dei lobi laterali (SLL, \emph{side lobe level}) per evitare interferenze \begin{itemize} \item aumentando $\beta$ si cambia la forma della finestra, allargando il lobo centrale ed aumentando il SLL, per $\beta=0$ la finestra diventa rettangolare \item fissato $\beta$ all'aumentare di $N$ si diminuisce la larghezza del lobo centrale lasciando il SLL invariato \end{itemize}

Per evitare che il campionamento causi perdita eccessiva di informazione sulla forma dello spettro, si esegue un'operazione di \emph{zero padding}, aggiungendo una serie di $0$ alla finestra

Filtraggio numerico

[modifica | modifica sorgente]

Un filtro numerico ha risposta impulsiva $h(nT_{c})$ (o $h[n]$, con $N_{h}$ campioni) che può corrispondere alla risposta impulsiva di un filtro naturale campionata con frequenza di campionamento $f_{c}$; se consideriamo $x(nT_{c})$ (con $N_{x}$ campioni) il segnale in ingresso al filtro e $y(nT_{c})$ (che sarà di $N_{y} = N_{x} + N_{h} - 1$ campioni) il segnale in uscita al filtro allora si ha che \begin{equation} y(nT_{c}) = x(nT_{c}) \cconv{N_{y}} h(nT_{c}) \end{equation} se i due vettori $x[n]$ e $h[n]$ sono composti da poche componenti la valutazione della loro convoluzione è conveniente (ha complessità $N^{2}$), altrimenti è possibile avvalersi della trasformata finita di Fourier per diminuire la complessità dell'operazione; si considera in questo caso $x[n]$ e $h[n]$ estesi a $N_{y}$ componenti (si compie una operazione di \emph{zero padding} aggiungendo componenti nulle ai due vettori) e quindi \begin{equation} y[n] = \TFFI{ \TFF{x[n]} \cdot \TFF{h[n]} } \end{equation} ovvero, operativamente. \begin{enumerate} \item si campiona il segnale di ingresso $x(t)$ e la risposta impulsiva del filtro $h(t)$ con rispettando la condizione di Nyquist \item si compie un'operazione di zero padding dei vettori $x[n]$ e $h[n]$ estendendoli a $N_{x} + N_{h} -1$ componenti \item si valutano le trasformate finite dei due vettori estesi \item si calcola il prodotto componente per componente dei due vettori trasformati ottenendo il vettore di uscita trasformato \item si valuta la trasformata finita inversa del vettore trovato, ottenendo $y[n]$ e quindi $y(t)$ \end{enumerate}

Per aumentare la precisione dell'operazione è possibile anche fare uno zero padding differente, aggiungendo campioni nulli tra i campioni del segnale (????)