Salta al contenuto
Note per Studenti Esercizio - convoluzione di impulsi rettangolari discreti

Esercizio - convoluzione di impulsi rettangolari discreti

In questa pagina 5

Testo (dispense del corso Teoria dei Segnali, UniPD, Esempio 5.4A). Calcolare la convoluzione dei due segnali discreti

x(nT)=A0rect⁡(nT9T),y(nT)=B0rect⁡(nT7T).x(nT)=A_0\operatorname{rect}\left(\frac{nT}{9T}\right),\qquad y(nT)=B_0\operatorname{rect}\left(\frac{nT}{7T}\right).

Come secondo caso si calcola la convoluzione di due rettangoli non centrati nell'origine, x(nT)=A0rect⁡(nT−3T5T)x(nT)=A_0\operatorname{rect}\left(\frac{nT-3T}{5T}\right) e y(nT)=B0rect⁡(nT+T/24T)y(nT)=B_0\operatorname{rect}\left(\frac{nT+T/2}{4T}\right).

Teoria usata: Segnali a tempo discretoUn segnale a tempo discreto è una funzione complessa $s(nT)$ definita sui multipli interi del quanto temporale $T$ (insieme $\mathbb Z(T)$, velocità $F_p=1/T$). Le definizioni sono quelle dei segnali continui con la somma al posto dell'integrale e il quanto $T$ al posto di $dt$: area $\sum T,s(nT)$, energia $\sum T|s(nT)|^2$, convoluzione $\sum T,x(kT)y(nT-kT)$. L'impulso ideale discreto vale $1/T$ nell'origine. Esponenziali e sinusoidi discreti sono periodici solo se $f_0/F_p$ è razionale e hanno frequenza ambigua a meno di multipli di $F_p$. I segnali periodici con periodo $NT$ sono descritti da $N$ valori e si trattano al calcolatore.Segnali a tempo discreto → (convoluzione discreta, estensione, durata, impulso rettangolare discreto), ConvoluzioneLa convoluzione $x*y(t)=\int x(u),y(t-u),du$ combina due segnali ribaltando e traslando il secondo, moltiplicando e integrando. È commutativa, associativa, lineare; l'area del risultato è il prodotto delle aree; l'estensione è la somma delle estensioni (estremo con estremo); l'impulso $\delta$ è l'elemento neutro; la convoluzione con il gradino integra. Per due segnali periodici di uguale periodo si usa la convoluzione ciclica (integrale su un periodo). È l'operazione del filtraggio: l'uscita di un filtro è la convoluzione dell'ingresso con la risposta impulsiva.Convoluzione → (stessa idea del caso continuo), SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →.

La convoluzione discreta e il quanto TT

La convoluzione di due segnali su Z(T)\mathbb Z(T) è

s(nT)=x∗y(nT)=∑k=−∞+∞T x(kT) y(nT−kT).s(nT)=x*y(nT)=\sum_{k=-\infty}^{+\infty}T\,x(kT)\,y(nT-kT).

È la solita convoluzione (ribalto yy, lo trasla di nTnT, moltiplico per xx, sommo), ma la somma è pesata con TT come ogni "integrale" del caso discreto. In pratica: si conta/si somma x(kT) y(nT−kT)x(kT)\,y(nT-kT) su tutti i kk e si moltiplica il risultato per TT. L'impulso ideale δ(nT)\delta(nT) (che vale 1T\frac1T in n=0n=0) è l'elemento neutro: δ∗x=x\delta*x=x, perché ∑kT δ(kT)x(nT−kT)=T⋅1T x(nT)\sum_kT\,\delta(kT)x(nT-kT)=T\cdot\frac1T\,x(nT).

Estensione e durata. Se e(x)={nxT,…,NxT}e(x)=\{n_xT,\dots,N_xT\} ed e(y)={nyT,…,NyT}e(y)=\{n_yT,\dots,N_yT\}, allora e(s)={(nx+ny)T,…,(Nx+Ny)T}e(s)=\{(n_x+n_y)T,\dots,(N_x+N_y)T\}: agli estremi si sommano gli indici. La durata è D=T⋅(numero di campioni)D=T\cdot(\text{numero di campioni}), e quindi

D(s)=D(x)+D(y)−T.D(s)=D(x)+D(y)-T .

Il "−T-T" c'è perché Nx−nx+1N_x-n_x+1 campioni di xx e Ny−ny+1N_y-n_y+1 di yy danno (Nx+Ny)−(nx+ny)+1=(Nx−nx+1)+(Ny−ny+1)−1(N_x+N_y)-(n_x+n_y)+1=(N_x-n_x+1)+(N_y-n_y+1)-1 campioni.

Esempio 5.4A: due rettangoli centrati

1. Le estensioni. rect⁡(nT9T)=rect⁡(n9)\operatorname{rect}\left(\frac{nT}{9T}\right)=\operatorname{rect}\left(\frac n9\right) vale 11 se ∣n∣9<12\frac{|n|}9<\frac12, cioè ∣n∣<4,5|n|<4{,}5, cioè n=−4,…,4n=-4,\dots,4: nove campioni, D(x)=9TD(x)=9T. Allo stesso modo ∣n∣<3,5|n|<3{,}5 per yy: n=−3,…,3n=-3,\dots,3, sette campioni, D(y)=7TD(y)=7T. Quindi

e(s)={−7T,…,7T},D(s)=9T+7T−T=15T.e(s)=\{-7T,\dots,7T\},\qquad D(s)=9T+7T-T=15T .

2. Simmetria. xx e yy sono pari, quindi anche ss è pari (s(nT)=s(−nT)s(nT)=s(-nT)): basta calcolare n=0,…,7n=0,\dots,7.

3. Il termine da sommare. Il prodotto x(kT) y(nT−kT)x(kT)\,y(nT-kT) vale A0B0A_0B_0 se entrambe le condizioni sono vere, altrimenti 00:

∣k∣≤4(campione di x),∣n−k∣≤3(campione di y traslato).|k|\le4\quad\text{(campione di }x),\qquad |n-k|\le3\quad\text{(campione di }y\text{ traslato)}.

Cioè max⁡(−4, n−3)≤k≤min⁡(4, n+3)\max(-4,\,n-3)\le k\le\min(4,\,n+3). Il numero di valori di kk in questo intervallo dà s(nT)=T A0B0⋅(numero di k)s(nT)=T\,A_0B_0\cdot(\text{numero di }k).

  • n=0,1n=0,1: n−3≥−4n-3\ge-4 e n+3≤4n+3\le4: k=n−3,…,n+3k=n-3,\dots,n+3, cioè 77 valori (la finestra di yy, larga 77, sta tutta dentro quella di xx, larga 99). Quindi s(0)=s(T)=7 T A0B0s(0)=s(T)=7\,T\,A_0B_0.
  • n=2,…,7n=2,\dots,7: il limite superiore diventa 44 (finisce xx): k=n−3,…,4k=n-3,\dots,4, cioè 4−(n−3)+1=8−n4-(n-3)+1=8-n valori. Quindi s(nT)=(8−n) T A0B0s(nT)=(8-n)\,T\,A_0B_0: 6,5,4,3,2,16,5,4,3,2,1 per n=2,…,7n=2,\dots,7.
  • n≥8n\ge8: nessun kk valido, s=0s=0.

Per simmetria, in n=−1n=-1 si ha 77, in n=−2n=-2 si ha 66, ecc. Mettendo tutto insieme, in unità di T A0B0T\,A_0B_0:

nn −7-7 −6-6 −5-5 −4-4 −3-3 −2-2 −1-1 00 11 22 33 44 55 66 77
s(nT)/(TA0B0)s(nT)/(TA_0B_0) 11 22 33 44 55 66 77 77 77 66 55 44 33 22 11

È un trapezio isoscele di 1515 campioni. Le sue parti:

  • salita (e discesa) di un campione per volta, di 66 passi;
  • plateau di 9−7+1=39-7+1=3 campioni (n=−1,0,1n=-1,0,1), alto 7 TA0B0=D(y) A0B07\,TA_0B_0=D(y)\,A_0B_0: la posizione in cui il rettangolo più corto sta interamente dentro il più lungo.

(Nota: i "sette" campioni sono l'altezza del plateau in unità TA0B0TA_0B_0, cioè quanti kk si sovrappongono; il plateau ha invece tre campioni.) Come nel caso continuo, convolvere due rect dà un trapezio e, con rect di durata uguale, un triangolo.

Controllo con l'area. L'area della convoluzione è il prodotto delle aree: area⁡(s)=T∑ns(nT)=T⋅TA0B0⋅(1+2+⋯+6+7+7+7+6+⋯+1)\operatorname{area}(s)=T\sum_ns(nT)=T\cdot TA_0B_0\cdot(1+2+\dots+6+7+7+7+6+\dots+1), e la somma tra parentesi vale 21+21+21=63=9⋅721+21+21=63=9\cdot7. Quindi area⁡(s)=63 T2A0B0=(9TA0)(7TB0)=area⁡(x)area⁡(y)\operatorname{area}(s)=63\,T^2A_0B_0=(9TA_0)(7TB_0)=\operatorname{area}(x)\operatorname{area}(y).

Grafico interattivo: s = x*y per x = A0 rect(nT/9T), y = B0 rect(nT/7T), in unità di T·A0·B0: trapezio isoscele di 15 campioni (n da -7 a 7), con plateau di 3 campioni alto 7

Secondo caso: rettangoli non centrati

Sia x(nT)=A0rect⁡(nT−3T5T)x(nT)=A_0\operatorname{rect}\left(\frac{nT-3T}{5T}\right) e y(nT)=B0rect⁡(nT+T/24T)y(nT)=B_0\operatorname{rect}\left(\frac{nT+T/2}{4T}\right).

1. Le estensioni. Per xx: ∣n−3∣<2,5|n-3|<2{,}5, quindi n=1,2,3,4,5n=1,2,3,4,5 (cinque campioni, t0=3Tt_0=3T, D=5TD=5T). Per yy: il centro è t0=−T2t_0=-\frac T2 e la durata D=4TD=4T; la condizione ∣n+12∣<2|n+\frac12|<2 vale per n=−2,−1,0,1n=-2,-1,0,1 (infatti n=−2n=-2 dà 1,5<21{,}5<2 e n=1n=1 dà 1,5<21{,}5<2, mentre n=2n=2 dà 2,52{,}5, no): quattro campioni. Con la (5.16a): n1=−2n_1=-2, n2=1n_2=1 danno t0=−2+12T=−T2t_0=\frac{-2+1}{2}T=-\frac T2 e D=(1+2+1)T=4TD=(1+2+1)T=4T. Un rect con numero pari di campioni ha il centro a metà tra due campioni, ed è proprio per questo che t0t_0 è mezzo-intero in unità TT.

2. L'estensione del risultato. Si sommano gli estremi: da 1+(−2)=−11+(-2)=-1 a 5+1=65+1=6, cioè e(s)={−T,…,6T}e(s)=\{-T,\dots,6T\}, D(s)=8T=5T+4T−TD(s)=8T=5T+4T-T. Il centro di ss è la somma dei centri, 3T+(−T2)=52T3T+\left(-\frac T2\right)=\frac52T: la figura sarà simmetrica rispetto a n=2,5n=2{,}5 (cioè s(nT)=s((5−n)T)s(nT)=s((5-n)T)).

3. Il conteggio. Servono i k∈{1,…,5}k\in\{1,\dots,5\} con n−k∈{−2,…,1}n-k\in\{-2,\dots,1\}, cioè k∈{n−1,…,n+2}k\in\{n-1,\dots,n+2\}. L'intersezione è [max⁡(1,n−1), min⁡(5,n+2)][\max(1,n-1),\ \min(5,n+2)]:

nn −1-1 00 11 22 33 44 55 66
intervallo di kk 11 1..21..2 1..31..3 1..41..4 2..52..5 3..53..5 4..54..5 55
numero di kk 11 22 33 44 44 33 22 11

Dunque s(nT)=T A0B0⋅(1,2,3,4,4,3,2,1)s(nT)=T\,A_0B_0\cdot(1,2,3,4,4,3,2,1): trapezio con plateau di 5−4+1=25-4+1=2 campioni (n=2,3n=2,3, simmetrici rispetto a 2,52{,}5) alto 4 TA0B0=D(y)A0B04\,TA_0B_0=D(y)A_0B_0. Per esempio con T=0,5T=0{,}5, A0=2A_0=2, B0=3B_0=3 il fattore TA0B0TA_0B_0 vale 33 e i valori sono 3,6,9,12,12,9,6,33,6,9,12,12,9,6,3.

Regola generale. Se i rettangoli hanno Nx≥NyN_x\ge N_y campioni, la convoluzione è un trapezio con Nx+Ny−1N_x+N_y-1 campioni: sale di 11 per campione per Ny−1N_y-1 passi, resta al valore NyN_y per Nx−Ny+1N_x-N_y+1 campioni (plateau) e poi scende. Se Nx=NyN_x=N_y il plateau si riduce a un solo campione (triangolo). Le posizioni non cambiano la forma: si sposta solo il centro.

Grafico interattivo: Secondo caso: rettangoli di 5 campioni (n = 1..5) e di 4 campioni (n = -2..1); la convoluzione ha 8 campioni (n da -1 a 6), simmetrica attorno a n = 2,5, con plateau di 2 campioni alto 4

Controllo

np.convolve(x, y) calcola ∑kx[k] y[n−k]\sum_kx[k]\,y[n-k] sui due vettori di campioni senza il fattore TT e restituisce un vettore di lunghezza Lx+Ly−1L_x+L_y-1 il cui primo elemento corrisponde all'indice nx+nyn_x+n_y (somma dei primi indici). Quindi la convoluzione del corso è T * np.convolve(x, y), e l'asse degli indici va costruito a mano.

python
import numpy as np

def rect_discreto(n, t0_n, D_n):
    """rect((nT - t0)/D) con t0 = t0_n*T e D = D_n*T: 1 per |x|<1/2, 1/2 per |x|=1/2"""
    x = (n - t0_n) / D_n
    return np.where(np.abs(x) < 0.5, 1.0, np.where(np.abs(x) == 0.5, 0.5, 0.0))

T, A0, B0 = 0.5, 2.0, 3.0

# --- Esempio 5.4A: x = A0 rect(nT/9T), y = B0 rect(nT/7T)
n = np.arange(-12, 13)                     # indici da -12 a 12
x = A0 * rect_discreto(n, 0, 9)
y = B0 * rect_discreto(n, 0, 7)
s = T * np.convolve(x, y)                  # np.convolve non conosce T: si moltiplica a mano
ns = np.arange(2 * n[0], 2 * n[-1] + 1)    # asse degli indici del risultato: -24..24
print("estensione di s: n da", ns[s != 0].min(), "a", ns[s != 0].max(), " durata", np.count_nonzero(s), "T")
print("conteggi (s / (T A0 B0)):", np.round(s[s != 0] / (T * A0 * B0)).astype(int))
print("area:", np.sum(T * s), " area(x) area(y) =", np.sum(T * x) * np.sum(T * y))

# --- secondo caso: x = A0 rect((nT - 3T)/5T), y = B0 rect((nT + T/2)/4T)
x2 = A0 * rect_discreto(n, 3, 5)
y2 = B0 * rect_discreto(n, -0.5, 4)
s2 = T * np.convolve(x2, y2)
print("e(x2):", n[x2 != 0], " e(y2):", n[y2 != 0])
print("e(s2): n da", ns[s2 != 0].min(), "a", ns[s2 != 0].max())
print("conteggi:", np.round(s2[s2 != 0] / (T * A0 * B0)).astype(int))

# --- l'impulso ideale e' l'elemento neutro: delta = 1/T in n = 0
delta = np.where(n == 0, 1 / T, 0.0)
neutro = T * np.convolve(x, delta)[len(n) // 2 : len(n) // 2 + len(n)]
print("x * delta == x :", np.allclose(neutro, x))

Risultati eseguendolo: e(s)e(s) da −7-7 a 77 (durata 15T15T), conteggi 1,2,3,4,5,6,7,7,7,6,5,4,3,2,11,2,3,4,5,6,7,7,7,6,5,4,3,2,1; area 94,594{,}5 in entrambi i modi (con T=0,5T=0{,}5, A0=2A_0=2, B0=3B_0=3: area⁡(x)=9TA0=9\operatorname{area}(x)=9TA_0=9, area⁡(y)=7TB0=10,5\operatorname{area}(y)=7TB_0=10{,}5, prodotto 94,594{,}5); secondo caso: e(x)={1..5}e(x)=\{1..5\}, e(y)={−2..1}e(y)=\{-2..1\}, e(s)={−1..6}e(s)=\{-1..6\}, conteggi 1,2,3,4,4,3,2,11,2,3,4,4,3,2,1; l'impulso ideale lascia invariato xx (la verifica stampa True).

Errori comuni

  • Dimenticare il fattore TT: np.convolve da solo dà la convoluzione "con T=1T=1".
  • Scrivere D(s)=D(x)+D(y)D(s)=D(x)+D(y) (sarebbe il caso continuo) invece di D(x)+D(y)−TD(x)+D(y)-T: i campioni sono 1515, non 1616.
  • Confondere l'altezza del plateau (numero di campioni sovrapposti, 77) con la sua larghezza (9−7+1=39-7+1=3 campioni).
  • Con rettangoli non centrati, sommare male i centri: il centro del risultato è la somma dei centri, e un numero pari di campioni ha il centro a metà tra due campioni.

Versione ripasso

Testo. Esempio 5.4A: x=A0rect⁡nT9Tx=A_0\operatorname{rect}\frac{nT}{9T}, y=B0rect⁡nT7Ty=B_0\operatorname{rect}\frac{nT}{7T}, s=x∗ys=x*y; poi due rect non centrati (Segnali a tempo discretoUn segnale a tempo discreto è una funzione complessa $s(nT)$ definita sui multipli interi del quanto temporale $T$ (insieme $\mathbb Z(T)$, velocità $F_p=1/T$). Le definizioni sono quelle dei segnali continui con la somma al posto dell'integrale e il quanto $T$ al posto di $dt$: area $\sum T,s(nT)$, energia $\sum T|s(nT)|^2$, convoluzione $\sum T,x(kT)y(nT-kT)$. L'impulso ideale discreto vale $1/T$ nell'origine. Esponenziali e sinusoidi discreti sono periodici solo se $f_0/F_p$ è razionale e hanno frequenza ambigua a meno di multipli di $F_p$. I segnali periodici con periodo $NT$ sono descritti da $N$ valori e si trattano al calcolatore.Segnali a tempo discreto →).

  • s(nT)=∑kT x(kT) y(nT−kT)s(nT)=\sum_kT\,x(kT)\,y(nT-kT); e(s)e(s): gli estremi si sommano; D(s)=D(x)+D(y)−TD(s)=D(x)+D(y)-T.
  • 5.4A: xx su n=−4..4n=-4..4, yy su n=−3..3n=-3..3, e(s)={−7T..7T}e(s)=\{-7T..7T\}, D(s)=15TD(s)=15T. Conta i kk con ∣k∣≤4|k|\le4 e ∣n−k∣≤3|n-k|\le3: valori 7TA0B07TA_0B_0 per ∣n∣≤1|n|\le1, poi (8−∣n∣)TA0B0(8-|n|)TA_0B_0 fino a ∣n∣=7|n|=7. Trapezio isoscele: plateau di 33 campioni alto 7TA0B07TA_0B_0.
  • Non centrati: xx su n=1..5n=1..5, yy su n=−2..1n=-2..1: e(s)={−T..6T}e(s)=\{-T..6T\}, centro 52T\frac52T, valori TA0B0 (1,2,3,4,4,3,2,1)TA_0B_0\,(1,2,3,4,4,3,2,1).
  • Controllo: T*np.convolve(x,y); area == prodotto delle aree; δ∗x=x\delta*x=x.
  • Errori: TT dimenticato; D(x)+D(y)D(x)+D(y) senza −T-T; altezza e larghezza del plateau confuse.

Teoria collegata