Skip to content

Segnali tempo-discreti

Il segnale Γ¨ una grandezza fisica rappresentata da una funzione di una o piΓΉ variabili a cui Γ¨ associato un contenuto informativo.

Ad esempio, un segnale acustico Γ¨ rappresentato dalla funzione pressione dell’aria P(t)P(t) che varia nel tempo. Un segnale elettrico Γ¨ dato dalla corrente i(t)i(t) che varia nel tempo

Un esempio di segnale multidimensionale Γ¨ il monitor di un computer. L’immagine statica (frame) in B/W (black/white) Γ¨ associata ad un valore di intensitΓ  luminosa punto per punto. Dato uno spazio bidimensionale, si devono descrivere tutti i livelli di intensitΓ  luminosa: la funzione z(x,y)z(x,y) Γ¨ in due variabili (asse orizzontale e verticale). Per passare da un’immagine statica ad una dinamica, si deve aggiungere la variabile temporale: z(x,y,t)z(x,y,t) dove la terza dimensione Γ¨ data dal tempo che scorre.

Inoltre, se si vuole passare da B/W ad RGB (red, green, blue) per apprezzare i colori punto per punto del frame, bisogna operare una trasformazione:

zβ€Ύ=[rgb]=zβ€Ύ(x,y)β†’β€…β€Š2D to 3Dβ€…β€Šzβ€Ύ(x,y,t)\overline{z}=\begin{bmatrix}r\\g\\b\end{bmatrix}= \overline{z}(x,y)\xrightarrow{\;\textrm{2D to 3D}\;}\overline{z}(x,y,t) x:A⟢Bt⟼x(t)\Large \begin{equation} \begin{split} x : & \quad A \longrightarrow B \\ & \quad t \longmapsto x(t) \end{split} \end{equation}

Il segnale xx Γ¨:

  1. tempo-continuo se t∈Rt \in \R, ovvero se A≑RA \equiv \R,
  2. tempo-discreto se t∈Zt \in \Z, ovvero se A≑ZA \equiv \Z.

Inoltre, in base al codominio B, il segnale xx​ Γ¨:

  1. a valori reali (continui) se BβŠ†RB \sube \R
  2. a valori discreti se B={b1,…,bM}βŠ‚ZB = \{b_1,\dots,b_M\}\sub \Z

Ad esempio, un segnale analogico Γ¨ tempo-continuo e a valori continui (reali); mentre un segnale digitale Γ¨ tempo-discreto e a valori discreti. Inoltre, per non lasciare spazio ad ambiguitΓ , i segnali tempo-discreti si esprimono nella forma x[n]x[n] con n∈Zn \in \Z​ che sostituisce la lettera t per convenzione.

I segnali possono essere anche a valori complessi: BβŠ†CB \sube \C. Questa casistica Γ¨ assimilabile, seppur con piΓΉ complessitΓ , ai segnali a valori reali. Si ricorda che RβŠ†C\R \sube \C. Un numero complesso con parte immaginaria nulla Γ¨ un numero reale.

Esempio: un segnale binario Γ¨ tempo-discreto a valori discreti con B={0,β€…β€Š1}B = \{0,\;1\}.

Dato il codice MATLAB che segue:

function binary_signal
figure;
N = 5;
n =-2*N:2*N;
y = rand_binary_gen(length(n));
stem(n,y, LineWidth=1.5)
grid on
set(title('Esempio di segnale binario'),'FontSize',16);
ylim([-0.1 1.1])
% xlim([-0.5 0.5])
hold off
end
% num parameter defines the number length of the 1D array
% or random integer elements (between 0 and 1) to generate
function y = rand_binary_gen(num)
% randi([0,1]) --> random integer between 0 and 1
y = randi([0 1], 1, num);
end

Si ottiene il grafico:

binary_signal

Le operazioni su segnali tempo-discreti si possono comparare alle stesse applicate sui segnali tempo-continui.

L’operazione analoga alla derivata Γ¨ l’incremento.

Ξ”[x[n]]=x[n]βˆ’x[nβˆ’1]nβˆ’(nβˆ’1)=x[n]βˆ’x[nβˆ’1]\Delta \biggl[ x[n] \biggr] = \frac{x[n]-x[n-1]}{n-(n-1)} = x[n]-x[n-1]

L’operazione analoga all’integrazione Γ¨ la sommatoria.

S[x[n]]=βˆ‘k=βˆ’βˆžnx[k]S \biggl[ x[n] \biggr] = \sum_{k = -\infty}^n x[k]

Il campionamento Γ¨ la serie di operazioni che permettono di rappresentare segnali tempo-continui in segnali tempo-discreti. L’operazione inversa del campionamento Γ¨ l’interpolazione.

Dato un segnale tempo-continuo x(t)x(t). Campionare x(t)x(t) significa definire un segnale tempo-discreto x[n]x[n] estraendo i valori che x(t)x(t)​ assume ad istanti di tempo equidistanti.

Le operazioni necessarie per effettuare il campionamento sono:

  1. definire il periodo di campionamento T
  2. definire la sequenza discreta di valori tn=t0+nTt_n=t_0+nT
  3. porre in corrispondenza gli assi temporali tempo-continuo e tempo-discreto

Posto t0=0t_0=0 per far coincidere i segnali, allora:

x(t)β€…β€Šβ†’β€…β€Štn=nTβ€…β€Šβ€…β€Šx[n]β€…β€ŠβŸΉβ€…β€Šx(tn)=x(nT)=x[n]\large x(t)\;\xrightarrow{\; t_n=nT \;}\;x[n] \implies x(t_n) = x(nT) = x[n]

A livello pratico, il campionamento Γ¨ effettuato da convertitori A/D (analogico/digitale) pilotati da un segnale di clock impostato alla frequenza fc=1/Tf_c = 1/T.

Il convertitore A/D Γ¨ un campionatore reale e fornisce una rappresentazione finita del segnale campionato:

xreale:Z⟢Zn⟼x[n]\begin{equation} \begin{split} x_{\text{reale}} : & \quad \Z \longrightarrow \Z \\ & \quad n \longmapsto x[n] \end{split} \end{equation}

In aritmetica binaria, il numero di cifre (bit) usate per la rappresentazione degli elementi di x[n]x[n] varia da 8 a 16.

Un campionatore ideale estrae valori con infinite cifre decimali:

xideale:Z⟢Rn⟼x[n]\begin{equation} \begin{split} x_{\text{ideale}} : & \quad \Z \longrightarrow \R \\ & \quad n \longmapsto x[n] \end{split} \end{equation}

L’errore racchiuso nella rappresentazione della sequenza x[n]∈Rx[n] \in \R Γ¨ detto errore di quantizzazione. In questo articolo si suppone che le operazioni di campionamento siano sempre ideali.

La trasformata di Fourier di una sequenza ottenuta mediante campionamento di un segnale tempo-continuo Γ¨ la periodicizzazione della trasformata di Fourier del segnale tempo-continuo. Il periodo di ripetizione ha frequenza uguale alla frequenza di campionamento.

Xβ€Ύ(f)=1Tβˆ‘m=βˆ’βˆžβˆžX(fβˆ’mT)\overline{X}(f)=\frac{1}{T}\sum_{m=-\infty}^\infty X\bigg(f-\frac{m}{T}\bigg)

Dato il seguente segnale tempo-continuo e F[y(t)]=Y(f)\mathcal{F}[y(t)]=Y(f), si applica un campionamento in frequenza, passando k/T0k/T_0 come argomento di Y:

z(t)=βˆ‘m=βˆ’βˆžβˆžy(tβˆ’mT0)β€…β€Šβ†’Fβ€…β€ŠZk=1T0Y(kT0)z(t)=\sum_{m=-\infty}^\infty y(t-mT_0)\;\xrightarrow{\quad \mathcal{F} \quad}\; Z_k=\frac{1}{T_0}Y\biggl(\frac{k}{T_0}\biggr)

Dato il segnale z~(t)=z(t)T0\widetilde{z}(t)=z(t)T_0, allora:

z~(t)=T0βˆ‘m=βˆ’βˆžβˆžy(tβˆ’mT0)β€…β€Šβ†’Fβ€…β€ŠZ~k=Y(kT0)\widetilde{z}(t)=T_0\sum_{m=-\infty}^\infty y(t-mT_0)\;\xrightarrow{\quad \mathcal{F} \quad}\; \widetilde{Z}_k=Y\biggl(\frac{k}{T_0}\biggr)

La proprietΓ  di dualitΓ  implica:

f⟷tT0⟷1Ty(β‹…)⟷X(β‹…)Y(β‹…)⟷x(β‹…)1Tβˆ‘m=βˆ’βˆžβˆžX(fβˆ’mT)⟷x(kT)\eq{ & f\longleftrightarrow t \\ & T_0\longleftrightarrow\frac{1}{T} \\ & y(\cdot)\longleftrightarrow X(\cdot) \\ & Y(\cdot)\longleftrightarrow x(\cdot) \\ & \frac{1}{T}\sum_{m=-\infty}^\infty X\biggl(f-\frac{m}{T}\biggr)\longleftrightarrow x(kT) }

L’errore di aliasing porta ad una distorsione del segnale campionato x[n]x[n]. Questo errore Γ¨ dovuto dalle repliche dello spettro-base, ovvero gli alias, che vanno a sommarsi introducendo la distorsione.

Se il segnale di partenza x(t)x(t) ha banda limitata, si puΓ² garantire l’assenza di aliasing grazie alla condizione di Nyquist:

fc=1Tβ‰₯2Bf_c = \frac{1}{T} \geq 2B

Con fc=1/Tf_c=1/T frequenza di campionamento.

fcβ‰₯2Bf_c \geq 2B permette di ricostruire un segnale tempo-continuo a partire dai propri campioni tempo-discreti.


Per un segnale radio digitale fC=30f_C = 30 kHz e dunque:

30β‹…103>2Bβ€…β€ŠβŸΉβ€…β€ŠB<15β€…β€Š[kHz]30\cdot 10^3 > 2B \implies B<15 \;\rm [kHz]

Per poter essere trasmesso e ricostruito correttamente, un segnale radio puΓ² avere una banda larga al massimo B=15B=15 kHz.

Se fc<2Bf_c < 2B, Γ¨ opportuno applicare un filtraggio anti-aliasing (passa-basso ideale) al segnale tempo-continuo in ingresso prima di effettuare il campionamento.

x(t)β†’ Low Pass β†’t=nTxF(t)β€…β€ŠxF[n]\large x(t) \xrightarrow{\quad} \boxed{\textrm{ Low Pass }} \xrightarrow[t=nT]{\quad x_F(t) \quad}\;x_F[n]

Questo filtro Γ¨ in grado di eliminare piccoli disturbi fuori banda del segnale.

Esempio: x[n]=cos⁑(2Ο€f0nT)=x(nT)x[n]=\cos(2\pi f_0 nT)=x(nT)

x(t)β€…β€Šβ†’Fβ€…β€ŠX(f)=12[Ξ΄(fβˆ’f0)+Ξ΄(f+f0)]x[n]β€…β€Šβ†’Fβ€…β€ŠXβ€Ύ(f)=1Tβˆ‘m=βˆ’βˆžβˆž[12Ξ΄(fβˆ’f0)+12Ξ΄(f+f0)]\eq{ x(t)\;\xrightarrow{\quad \mathcal{F} \quad}\; &X(f)=\frac{1}{2}\bigg[\delta(f-f_0)+\delta(f+f_0)\bigg] \\ \\ x[n]\;\xrightarrow{\quad \mathcal{F} \quad}\; &\overline{X}(f)=\frac{1}{T}\sum_{m=-\infty}^\infty\bigg[\frac{1}{2}\delta(f-f_0)+\frac{1}{2}\delta(f+f_0)\bigg] \\ }

Es cos time

Nel dominio delle frequenze si possono apprezzare due Ξ΄(t)\delta(t) in corrispondenza di Β±f0\pm f_0:

Es cos f

function es_cos_aliasing
% given x[n]=cos(2*pi*f0*n*T)=x(nT)
N = 10; % durata sul semiasse positivo
f0=2;
T=0.8;
f = linspace(-N, N, 1001); % vettore tempo-continuo
t = f;
n =-N:1:N; % vettore tempo-discreto
x_n = cos(2*pi*f0*n*T);
x_t = cos(2*pi*f0*t);
Xf = 0.5 * (dirac_delta(f-f0)+dirac_delta(f+f0));
overXf = (1/(2*T)) * (dirac_delta(f-f0)+dirac_delta(f+f0));
figure(1)
plot(f,overXf,LineWidth=1.5)
hold on
plot(f,Xf,LineWidth=1.5)
grid on
ylim([-0.2 0.6])
xlim([-2.2 2.2])
legend([{'$\overline{X}(f)$'},{'$X(f)$'}],'Interpreter','latex', 'FontSize', 22)
title('Dominio delle frequenze')
hold off
figure(2)
plot(t,x_t,LineWidth=1.5)
hold on
stem(n,x_n,LineWidth=1.5)
grid on
ylim([-1.1 1.1])
xlim([-2 2])
legend([{'$x(t)$'},{'$x[n]$'}],'Interpreter','latex', 'FontSize', 22)
title('Dominio temporale')
hold off
end
% return a Dirac function without discontinuity
function y = dirac_delta(x)
y = dirac(x);
idx = y == Inf; % find Inf
y(idx) = 1; % set Inf to finite value
end

Il segnale tempo-continuo interpolato si indica con x^(t)\widehat{x}(t). Esistono diversi tipi di interpolazione in base all’impulso di interpolazione p(t)p(t) utilizzato.

cos interpolazione

x^(t)β€…β€Šβ†’Fβ€…β€ŠX^(f)=P(f)Xβ€Ύ(f)\widehat{x}(t)\;\xrightarrow{\quad \mathcal{F} \quad}\;\widehat{X}(f)=P(f)\overline{X}(f)

L’interpolatore ideale Γ¨ detto interpolatore cardinale. Nel campo delle frequenze Γ¨ un rettangolo di altezza unitaria e larghezza pari a T e, nel dominio temporale, Γ¨ dunque un seno cardinale:

P(f)=T rect(fT)β†’Fβˆ’1p(t)=sinc(tT)P(f)=T\,\textrm{rect}(fT)\xrightarrow{\quad \mathcal{F}^{-1}\quad}p(t)=\textrm{sinc}\bigg(\frac{t}{T}\bigg)

Usando questo interpolatore, non c’è bisogno di applicare un equalizzatore (come si vedrΓ  in seguito). Il segnale di partenza si ottiene direttamente con la formula:

x(t)=[βˆ‘n=βˆ’βˆžβˆžx[n]β‹…sinc(tβˆ’nTT)]x(t)=\Bigg[\sum_{n=-\infty}^\infty x[n]\cdot \textrm{sinc}\bigg(\frac{t-nT}{T}\bigg)\Bigg]

A livello pratico, l’interpolatore cardinale puΓ² solo essere approssimato.

function es_cos_interpolation
% given x[n]=cos(2*pi*f0*n*T)=x(nT)
N = 10; % durata sul semiasse positivo
f0=2;
T=0.8;
f = linspace(-N, N, 1001); % vettore tempo-continuo
t = f;
n =-N:1:N; % vettore tempo-discreto
x_n = cos(2*pi*f0*n*T);
% 1-D interpolation: https://www.mathworks.com/help/matlab/ref/interp1.html
hat_x = interp1(n,x_n,t);
hat_x_sp= interp1(n,x_n,t,"spline");
hat_x_p= interp1(n,x_n,t,"previous");
%x_t = cos(2*pi*f0*t);
%Xf = 0.5 * (dirac_delta(f-f0)+dirac_delta(f+f0));
%overXf = (1/(2*T)) * (dirac_delta(f-f0)+dirac_delta(f+f0));
%sum_x_n = my_sum(N, f0, t, T);
% hat_x = sum_x_n .* p_t(t-T, T);
plot(n,x_n,'o',LineWidth=1.5)
hold on
plot(t,hat_x,LineWidth=1.5)
hold on
plot(t,hat_x_sp,LineWidth=1.5)
hold on
plot(t,hat_x_p,LineWidth=1.5)
grid on
ylim([-1.1 1.1])
xlim([-2 2])
legend([{'$x[n]$'}, 'linear', 'spline', 'previous'],'Interpreter','latex', 'FontSize', 22)
title('Different interpolation methods')
hold off
end
%function y = my_sum(sum_limit, f0, t, T)
% domain=-sum_limit:1:sum_limit;
% i = 1; % inizializzazione dell'indice del ciclo for
% y = zeros(1,length(domain));
% for m = -sum_limit:1:sum_limit % k va da -n ad n con uno step di 1
% y(i) = cos(2*pi*f0*m*T)* p_t(t(i)-(m*T), T);
% fprintf("»»» %d) y = %.2f\n", m,y);
% i=i+1; % incremento dell'indice
% end
%end
% interpolation_impulse
%function y = p_t(x,T)
% y = rect((x-(T/2))/T);
%end
% by using x(abs(x)<=1) inside the indexing operation (on the left), you
% ensure that both sides of the assignment have the same dimensions.
%function y = rect(x)
% y=zeros(1, length(x));
% y(abs(x) < 1/2) = 1;
% y(abs(x) == 1/2) = 1/2;
%end

L’obiettivo del paragrafo Γ¨ illustrare la ricostruzione di un segnale tempo-continuo x(t)x(t) a partire dai suoi campioni x[n]x[n].

I passaggi completi, illustrati nel dettaglio in seguito, sono:

  1. interpolazione
  2. filtraggio passa-basso ideale
  3. equalizzazione (opzionale)
β†’β€…β€Šx[n]β€…β€Š interpolazione β†’β€…β€Šx^(t)β€…β€Š Low Pass β†’β€…β€Šx~(t)β€…β€Š equalizzatore β†’β€…β€Šx(t)β€…β€Š\Large \xrightarrow[]{\;x[n]\;} \normalsize \boxed{\text{ interpolazione }} \Large \xrightarrow{\; \widehat{x}(t) \;} \normalsize \boxed{\text{ Low Pass }} \Large \xrightarrow{\; \widetilde{x}(t) \;} \normalsize \boxed{\text{ equalizzatore }} \Large \xrightarrow{\;x(t)\;}

Risulta piΓΉ corretto (e comodo) ragionare nel dominio delle frequenze.

Date le trasformate di Fourier:

X(f)=F[x(t)]Xβ€Ύ(f)=F[x[n]]X(f) = \mathcal{F} \Big[x(t) \Big]\\ \overline{X}(f) = \mathcal{F} \Big[ x[n] \Big]

Si puΓ² affermare che esiste la seguente relazione:

Xβ€Ύ(f)=1Tβˆ‘m=βˆ’βˆžβˆžX(fβˆ’mT)\overline{X}(f)=\frac{1}{T}\sum_{m=-\infty}^\infty X\bigg(f-\frac{m}{T}\bigg)

N.B. T Γ¨ il periodo di campionamento.

Dato l’impulso di interpolazione p(t)p(t) ed il segnale tempo-continuo interpolato x^(t)\widehat{x}(t) e date le corrispondenti trasformate di Fourier:

P(f)=F[p(t)]X^(f)=F[x^(t)]P(f) = \mathcal{F} \Big[p(t) \Big]\\ \widehat{X}(f) = \mathcal{F} \Big[ \widehat{x}(t) \Big]

La trasformata del segnale interpolato Γ¨ data dalla formula:

X^(f)=Xβ€Ύ(f)P(f)\widehat{X}(f)=\overline{X}(f)P(f)

Successivamente si applica un filtro passa-basso ideale con banda B=1/TB=1/T​.

La riposta in frequenza del filtro Γ¨:

HLP(f)=rect(12Bf)=rect(T2f)H_{LP}(f)= \text{rect}\bigg(\frac{1}{2B}f\bigg)= \text{rect}\bigg(\frac{T}{2}f\bigg)

Supponendo che la banda sia limitata: ∣f∣>B|f| >B. L’aliasing si risolve rispettando la condizione di Nyquist. Il filtro passa-basso serve per eliminare le repliche distorte.

Tale filtro fornisce in output il segnale X~(f)\widetilde{X}(f):

X~(f)=X^(f)β‹…HLP(f)==Xβ€Ύ(f)P(f)β‹…HLP(f)==1TX(f)P(f)\eq{ \widetilde{X}(f) &= \widehat{X}(f)\cdot H_{LP}(f)=\\ &=\overline{X}(f)P(f)\cdot H_{LP}(f)=\\ &= \frac{1}{T} X(f) P(f) }

La sommatoria che definisce Xβ€Ύ(f)\overline{X}(f) viene filtrata e passa solo l’elemento posto sull’origine (m=0m=0).

Per togliere la distorsione si applica infine un’equalizzazione: moltiplicazione pari all’inverso di P(f)P(f).

La risposta in frequenza del blocco equalizzatore Γ¨:

HE(f)=Tβ‹…1P(f)H_E (f) =T \cdot \frac{1}{P(f)}

Dal blocco equalizzatore si ottiene X(f)X(f), ovvero la trasformata di Fourier del segnale che si voleva ricostruire:

X(f)=X~(f)β‹…HE(f)==X~(f)β‹…Tβ‹…1P(f)==1TX(f)P(f)β‹…Tβ‹…1P(f)==X(f)\eq{ X(f) &= \widetilde{X}(f)\cdot H_E(f)=\\ &= \widetilde{X}(f)\cdot T \cdot \frac{1}{P(f)}=\\ &= \frac{1}{T} X(f) P(f)\cdot T \cdot \frac{1}{P(f)}=\\ &= X(f) }

I passaggi completi sono:

β†’Xβ€Ύ(f)β€…β€Šx[n]β€…β€ŠP(f)β†’X^(f)β€…β€Šx^(t)β€…β€ŠHLP(f)β†’X~(f)β€…β€Šx~(t)β€…β€ŠHE(f)β†’X(f)β€…β€Šx(t)β€…β€Š\Large \xrightarrow[\overline{X}(f)]{\;x[n]\;} \normalsize \boxed{ P(f)} \Large \xrightarrow[\widehat{X}(f)]{\; \widehat{x}(t) \;} \normalsize \boxed{H_{LP}(f)} \Large \xrightarrow[\widetilde{X}(f) ]{\; \widetilde{x}(t) \;} \normalsize \boxed{H_E(f)} \Large \xrightarrow[X(f)]{\;x(t)\;}

Queste formule dimostrano il teorema di Shannon sul campionamento.

Inoltre, si possono porre HLP(f)H_{LP}(f) e HE(f)H_E(f) in cascata per produrre il filtro equalizzatore H(f)H(f):

β†’Xβ€Ύ(f)β€…β€Šx[n]β€…β€ŠP(f)β†’X^(f)β€…β€Šx^(t)β€…β€ŠH(f)β†’X(f)β€…β€Šx(t)β€…β€Š\Large \xrightarrow[\overline{X}(f)]{\;x[n]\;} \normalsize \boxed{ P(f)} \Large \xrightarrow[\widehat{X}(f)]{\; \widehat{x}(t) \;}\normalsize \boxed{H(f)} \Large \xrightarrow[X(f)]{\;x(t)\;}

Si deve fare molta attenzione a garantire i seguenti vincoli:

H(f)=0βˆ€f<βˆ’1Tβˆ’Bβ€…β€Šβˆ§β€…β€Šf>1Tβˆ’BH(f)=TP(f)βˆ€βˆ’B<f<B\eq{ H(f)&=0\quad \forall f < -\frac{1}{T}-B \;\land\;f > \frac{1}{T}-B\\ H(f)&= \frac{T}{P(f)}\quad \forall -B <f < B }

I sistemi monodimensionali tempo-discreti sono approfonditi nell’articolo Sistemi Fisici.