Esercizio - trasformata di un sinc discreto e antitrasformata del coseno al cubo
In questa pagina 5
Testo (dispense del corso Teoria dei Segnali, UniPD, Es. 6.3C e 6.3D).
- 6.3C Dimostrare la relazione illustrata nel testo per . Guida: conviene dimostrare che il secondo membro ha per antitrasformata il primo membro.
- 6.3D Calcolare l'antitrasformata della funzione .
Teoria usata: Trasformata di Fourier a tempo discretoLa trasformata di Fourier di un segnale discreto è $S(f)=\sum_nT,s(nT),e^{-i2\pi fnT}$: una funzione continua e periodica in $f$ di periodo $F_p=1/T$. L'antitrasformata è l'integrale su un periodo, $s(nT)=\int_0^{F_p}S(f)e^{i2\pi fnT}df$. Le regole sono quelle del caso continuo (traslazione, convoluzione $\leftrightarrow$ prodotto, Parseval $\sum T|s|^2=\int_0^{F_p}|S|^2$), con incremento e somma corrente al posto di derivata e integrale. Per segnali reali $S(f)=S^*(-f)$, quindi basta $[0,F_p/2]$. Esempi: $\delta\to1$, $1\to\delta_{F_p}$, rect $\to$ sinc periodico, $a^n\mathbf 1_0\to\frac T{1-ae^{-i2\pi fT}}$.Trasformata di Fourier a tempo discreto → (definizione, antitrasformata su un periodo, trasformata dell'impulso ideale traslato), 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 →, Campionamento e ricostruzioneIl campionamento $s_c(nT)=s(nT)$ trasforma un segnale continuo in uno discreto e, in frequenza, ripete lo spettro con periodo $F_c=1/T$: $S_c(f)=\sum_kS(f-kF_c)$. Se le repliche si sovrappongono si ha aliasing e il segnale non è recuperabile. Un interpolatore $\mathbb Z(T)\to\mathbb R$ con risposta impulsiva $g$ produce $\tilde s(t)=\sum_nT g(t-nT)s(nT)$ e $\tilde S=G,S_c$. Teorema del campionamento: se $s$ ha banda $B$ e $F_c\ge2B$, l'interpolatore ideale $G=\operatorname{rect}(f/F_c)$ ricostruisce esattamente $s(t)=\sum s(nT)\operatorname{sinc}(F_c(t-nT))$. Se le ipotesi non valgono c'è un errore, in banda e fuori banda, riducibile con un prefiltro anti-aliasing.Campionamento e ricostruzione → (aliasing), Numeri complessiI numeri complessi estendono i reali introducendo l'unità immaginaria $i$ ($i^2 = -1$) e possono essere rappresentati in forma algebrica, trigonometrica o polare. Tramite la formula di Eulero e le proprietà del modulo e dell'argomento, è possibile calcolare agilmente prodotti, potenze e radici ennesime.Numeri complessi → (Eulero), Binomio di NewtonLa formula per sviluppare (a+b)^n con i coefficienti binomiali.Binomio di Newton →.
Promemoria
Per un segnale discreto su ():
La ripetizione periodica è . L'impulso ideale discreto vale in e altrove; la sua trasformata è (regola (6.13)). Siccome è periodica, non ci sono due segnali diversi con la stessa : se un'antitrasformata dà , allora è la trasformata di .
Es. 6.3C: il sinc discreto
Sia . Si calcola la sua antitrasformata e si verifica che sia .
Caso (nessuna sovrapposizione). Su un periodo scelto come le repliche del rect (larghe , centrate in ) non si toccano e della ripetizione resta solo la replica centrale, , che vale per . Allora
(Ho usato con , e .) Questo è , con . Per l'integrale vale .
Dimostrazione valida per ogni (si "srotola" la ripetizione). Si scrive e . Siccome per intero , ogni replica, tradotta di nuovo nell'origine con , dà lo stesso integrando:
perché gli intervalli coprono tutto senza sovrapporsi. L'ultimo integrale è il calcolo di sopra: . È la stessa idea della dimostrazione del Teorema 6.1 (campionare = ripetere lo spettro).
Il caso di figura, . Allora : il rect ha larghezza metà del periodo e altezza . Spettro a rettangoli alti larghi , separati da "buchi" larghi ; il segnale è , che vale in , si annulla per pari non nullo e vale per dispari (per esempio in ). Nel grafico (, , altezza ).
Grafico interattivo: Il segnale sinc(nF0T) con F0T = 1/2: campioni di sinc(n/2); zero per n pari non nullo, 2/(πn) per n dispari
Grafico interattivo: Sua trasformata per T = 1 (Fp = 1, F0 = 1/2): rep_Fp di (1/F0) rect(f/F0), rettangoli alti 2 e larghi 1/2 ripetuti ogni Fp = 1, separati da intervalli vuoti
Cosa succede al variare di rispetto a .
| caso | spettro | commento |
|---|---|---|
| rettangoli separati, alti | nessuna sovrapposizione | |
| le repliche si toccano e a ogni la somma è (nei bordi ) | : il segnale è , cioè | |
| le repliche si sovrappongono e si sommano: | aliasing |
Quando la dimostrazione "srotolata" vale ancora, ma lo spettro non è più un rettangolo. Esempio (con : ): la replica centrale occupa e quelle vicine e ; in passa solo la replica centrale (valore ) e in ne passano due (valore ). Interpretazione: è il campionamento del segnale continuo , la cui banda ha estensione (da a ): per non avere aliasing bisogna campionare con (Campionamento e ricostruzioneIl campionamento $s_c(nT)=s(nT)$ trasforma un segnale continuo in uno discreto e, in frequenza, ripete lo spettro con periodo $F_c=1/T$: $S_c(f)=\sum_kS(f-kF_c)$. Se le repliche si sovrappongono si ha aliasing e il segnale non è recuperabile. Un interpolatore $\mathbb Z(T)\to\mathbb R$ con risposta impulsiva $g$ produce $\tilde s(t)=\sum_nT g(t-nT)s(nT)$ e $\tilde S=G,S_c$. Teorema del campionamento: se $s$ ha banda $B$ e $F_c\ge2B$, l'interpolatore ideale $G=\operatorname{rect}(f/F_c)$ ricostruisce esattamente $s(t)=\sum s(nT)\operatorname{sinc}(F_c(t-nT))$. Se le ipotesi non valgono c'è un errore, in banda e fuori banda, riducibile con un prefiltro anti-aliasing.Campionamento e ricostruzione →). Caso estremo: dà per ogni , cioè lo stesso segnale discreto di : dai campioni non si distinguono.
Grafico interattivo: Trasformata di sinc(nF0T) con F0 = 1,5 Fp (T = 1): le repliche del rect (alto 1/F0 = 0,667) si sovrappongono e lo spettro vale 0,667 nel centro e 1,333 dove ne passano due: aliasing
Es. 6.3D: antitrasformata di
Idea. è un polinomio trigonometrico in : se si scrive come somma di esponenziali , ciascuno è la trasformata di un impulso ideale in (regola (6.13)).
1. Sviluppo con Eulero. Con , e, per il cubo del binomio (Binomio di NewtonLa formula per sviluppare (a+b)^n con i coefficienti binomiali.Binomio di Newton →) con , (e ):
(Controllo: per si ha .)
2. Dalle esponenziali agli impulsi. Dalla (6.13), . Quindi:
| termine di | ||||
|---|---|---|---|---|
| è la trasformata di |
e per linearità
3. Valori dei campioni. L'impulso ideale vale nel suo punto di applicazione e altrove. Quindi il segnale ha quattro campioni non nulli:
Il fattore viene dal fatto che (area unitaria con larghezza ); gli impulsi hanno area (coefficiente) e . Tenere a mente che il coseno ha già prodotto un per ogni impulso: se si ragiona con , ciascuna vale e si ritrovano e (non e ).
4. Controlli.
- Con l'integrale. Per : ; per la parità del coseno resta la parte reale (il valor medio di su un periodo è ). ✓
- In : (per simmetria, ha media nulla): . ✓
- Parseval: , e (). ✓
- Simmetria: reale e pari reale e pari; durata limitata () perché è un polinomio trigonometrico di grado nelle esponenziali (ogni esponenziale è un campione in ).
Grafico interattivo: La funzione S(f) = A0 cos^3(2πfT), con A0 = 1, in funzione di fT: periodica di periodo 1 in fT (cioè Fp)
Grafico interattivo: Il segnale s(nT) in unità A0/T: quattro campioni, 3/8 in n = ±1 e 1/8 in n = ±3
Controllo
import numpy as np
# ---------------- Es. 6.3C: sinc(n F0 T) <-> (1/F0) rep_Fp rect(f/F0)
T = 1.0
Fp = 1 / T
def S_rep(f, F0, K=6):
"""(1/F0) * somma_k rect((f - k Fp)/F0), con la regola dell'emivalore"""
f = np.atleast_1d(f).astype(float)
tot = np.zeros_like(f)
for k in range(-K, K + 1):
x = np.abs((f - k * Fp) / F0)
tot += np.where(x < 0.5, 1.0, np.where(np.isclose(x, 0.5), 0.5, 0.0))
return tot / F0
# (1) antitrasformata numerica su un periodo: deve dare sinc(n F0 T) per ogni F0
def antitrasformata(F0, n, N=400001):
f = np.linspace(-Fp / 2, Fp / 2, N)
S = S_rep(f, F0)
return np.array([np.trapezoid(S * np.exp(2j * np.pi * f * m * T), f) for m in n])
n = np.arange(-6, 7)
for F0 in (0.5, 1.0, 1.5, 2.7):
s_num = antitrasformata(F0, n)
print("F0 =", F0, " antitrasformata == sinc(n F0 T):",
np.allclose(s_num.real, np.sinc(n * F0 * T), atol=2e-5))
# (2) trasformata come somma della serie: S(f) = somma di T sinc(n F0 T) cos(2 pi f n T)
# (la serie converge lentamente, come 1/n: si usa una finestra triangolare che attenua Gibbs)
def S_serie(f, F0, Nmax=200000):
m = np.arange(-Nmax, Nmax + 1)
w = 1 - np.abs(m) / (Nmax + 1)
return np.array([np.sum(w * T * np.sinc(m * F0 * T) * np.cos(2 * np.pi * ff * m * T)) for ff in f])
for F0, fs in ((0.5, [0.0, 0.1, 0.4, 0.8]), (1.5, [0.1, 0.4, 0.45])):
fs = np.array(fs)
print("F0 =", F0, " serie:", np.round(S_serie(fs, F0), 4), " formula:", np.round(S_rep(fs, F0), 4))
# energia: somma di T sinc^2 = 1/F0 solo se F0 <= Fp
for F0 in (0.5, 1.0, 1.5):
m = np.arange(-400000, 400001)
print("F0 =", F0, " somma T sinc^2 =", np.sum(T * np.sinc(m * F0 * T)**2), " 1/F0 =", 1 / F0)
# F0 = 2 Fp: stessi campioni di F0 = Fp
m = np.arange(-6, 7)
print("sinc(2n) == sinc(n):", np.allclose(np.sinc(m * 2.0), np.sinc(m * 1.0), atol=1e-12))
# ---------------- Es. 6.3D: antitrasformata di A0 cos^3(2 pi f T)
A0, T = 3.0, 0.2
Fp = 1 / T
f = np.linspace(0, Fp, 200001)
S = A0 * np.cos(2 * np.pi * f * T)**3
n = np.arange(-5, 6)
s = np.array([np.trapezoid(S * np.exp(2j * np.pi * f * m * T), f) for m in n])
for m, v in zip(n, s):
print(m, np.round(v.real, 6), np.round(v.imag, 8))
print("attesi: n=+-1:", 3 * A0 / (8 * T), " n=+-3:", A0 / (8 * T))
print("Parseval:", np.sum(T * np.abs(s)**2), np.trapezoid(S**2, f), 5 / 16 * A0**2 / T)Risultati (eseguito): l'antitrasformata coincide con per (anche con sovrapposizione); la serie dà, per , in e, per , in , come previsto; per (cioè solo quando ; per viene e non , effetto dell'aliasing); con , i campioni sono in e in , zero altrove; Parseval: in tutti e tre i modi.
Errori comuni
- Scrivere un solo rect invece della ripetizione periodica: la trasformata di un segnale discreto è sempre periodica.
- Dimenticare che per i rect si sommano: lo spettro non è più un rettangolo e il segnale non coincide con il segnale a banda da cui è stato campionato.
- In 6.3D, scrivere il coefficiente invece di (e invece di ): il coseno porta un per ogni impulso.
- Dimenticare il : i campioni valgono e , non e ; i coefficienti , sono le aree degli impulsi.
Versione ripasso
- 6.3C antitrasformata: con ("srotolare" la ripetizione, ) . Caso : rect alti larghi . : (segnale ); : repliche sovrapposte, somma , aliasing ( dà gli stessi campioni di ).
- 6.3D , : , cioè , .
- Errori: invece di ; dimenticato; rect non ripetuto.