Esercizio - trasformata di impulsi discreti e teorema di Parseval
In questa pagina 5
Testo (dispense del corso Teoria dei Segnali, UniPD, Es. 6.3A e 6.3B, con costante reale).
- 6.3A Valutare le trasformate di Fourier dei segnali e verificare che ed sono funzioni periodiche di periodo , reali e pari.
- 6.3B Con riferimento all'esercizio precedente, verificare il teorema di Parseval.
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, periodicità, simmetrie, area, Parseval), 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 → (impulso ideale discreto), 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 → (formula di Eulero).
Promemoria: la trasformata di un segnale discreto
Con il quanto temporale (e ) la trasformata è
Il fattore davanti a ogni campione è lo stesso peso che compare nell'area e nell'energia. Per un segnale a durata limitata la serie è una somma finita, quindi si calcola in forma chiusa. Il teorema di Parseval (6.11) dice
cioè l'energia calcolata nel tempo è uguale all'area di su un periodo (qualunque, perché è periodica).
Es. 6.3A: calcolo di e
. Ha solo due campioni non nulli, in e in , entrambi uguali a . Nella somma sopravvivono quei due termini:
Per la formula di Eulero , quindi
(Stesso risultato con gli impulsi: perché l'impulso ideale vale e il suo coefficiente deve essere ; e dalla regola (6.13) .)
. Rispetto a c'è in più il campione , che contribuisce con :
Forma chiusa equivalente. è un impulso rettangolare di campioni () e la formula (6.15)-(6.16) del testo dà . È la stessa funzione: con vale (perché ), da cui con . Il punto è una forma e il valore va preso come limite: .
Verifica delle tre proprietà.
- Periodicità di periodo . . È un fatto generale: ogni termine con intero non cambia se , perché .
- Reali. In e le esponenziali compaiono in coppie coniugate , con lo stesso coefficiente reale , la cui somma è , reale (si ricordi che è reale).
- Pari. Il coseno è pari: .
Queste proprietà sono la conseguenza della regola generale: segnale reale e pari trasformata reale e pari (Fig. 6.2 del testo).
Qualche valore (in unità ) per leggere la forma:
In si riconosce l'area del segnale: , . Il primo zero di è in .
Grafico interattivo: Trasformate di s1 e s2 in unità A0·T, in funzione di fT (periodo 1 in fT, cioè Fp): S1 = 2cos(2πfT) e S2 = 1 + 2cos(2πfT); reali, pari e periodiche
Es. 6.3B: teorema di Parseval
Si confronta, per ciascun segnale, l'energia nel tempo con l'integrale di su un periodo .
Energia nel tempo. Solo i campioni non nulli contano, ciascuno con peso :
Energia in frequenza per . Poiché è reale, . Si usa :
perché compie esattamente due periodi su e il suo integrale su un numero intero di periodi è nullo. Quindi
Energia in frequenza per . con . Su : , (un periodo intero), (come sopra). Perciò
Il teorema è verificato in entrambi i casi. Si noti come tornano i fattori : il quadrato di porta , l'integrale su un periodo porta , e il prodotto è esattamente il peso dell'energia nel tempo.
Le due regole "area" collegate (6.10). Valgono anche (già visto) e la proprietà duale . Per : ✓. Per : ✓.
Controllo
Il codice calcola sommando davvero la serie (6.1) su una griglia di frequenze (non usa la forma chiusa) e poi confronta con le formule trovate e con Parseval.
import numpy as np
A0, T = 2.0, 0.3
Fp = 1 / T
n = np.arange(-1, 2) # n = -1, 0, 1
s1 = np.array([A0, 0.0, A0]) # A0 per n = +-1
s2 = np.array([A0, A0, A0]) # A0 per n = -1, 0, 1
f = np.linspace(0, Fp, 20001) # un periodo
def trasformata(s, f):
"""S(f) = somma di T s(nT) e^{-i 2 pi f n T}, calcolata punto per punto"""
return np.array([np.sum(T * s * np.exp(-2j * np.pi * ff * n * T)) for ff in f])
S1, S2 = trasformata(s1, f), trasformata(s2, f)
print("S1 reale:", np.max(np.abs(S1.imag)), " S2 reale:", np.max(np.abs(S2.imag)))
print("S1 = 2 A0 T cos:", np.allclose(S1.real, 2 * A0 * T * np.cos(2 * np.pi * f * T)))
print("S2 = A0 T (1 + 2 cos):", np.allclose(S2.real, A0 * T * (1 + 2 * np.cos(2 * np.pi * f * T))))
print("S2 = A0 T sin(3 pi fT)/sin(pi fT):", np.allclose(S2.real[1:-1], A0 * T * np.sin(3 * np.pi * f[1:-1] * T) / np.sin(np.pi * f[1:-1] * T)))
# periodicita' Fp e parita'
fx = np.array([0.37, 1.1, 2.9])
print("periodica:", np.allclose(trasformata(s2, fx), trasformata(s2, fx + Fp)))
print("pari:", np.allclose(trasformata(s2, fx), trasformata(s2, -fx)))
# Parseval
for nome, s, S in (("s1", s1, S1), ("s2", s2, S2)):
E_tempo = np.sum(T * np.abs(s)**2)
E_freq = np.trapezoid(np.abs(S)**2, f) # integrale su un periodo
print(nome, "energia nel tempo", E_tempo, " integrale di |S|^2 su un periodo", E_freq)
print("attese: 2 A0^2 T =", 2 * A0**2 * T, " 3 A0^2 T =", 3 * A0**2 * T)
# area e proprieta' duale
print("S1(0) =", S1[0].real, " area =", np.sum(T * s1), " S2(0) =", S2[0].real, " area =", np.sum(T * s2))
print("s1(0) = int S1 df =", np.trapezoid(S1.real, f), " s2(0) = int S2 df =", np.trapezoid(S2.real, f))Risultati con , : parte immaginaria nulla; le tre uguaglianze di forma chiusa risultano vere; periodicità e parità vere; e (coincidono a meno di ); , ; e . (np.trapezoid è np.trapz nelle versioni di NumPy precedenti alla 2.0.)
Errori comuni
- Dimenticare il peso davanti a ogni campione in : si otterrebbe e Parseval non tornerebbe.
- Integrare su tutto l'asse reale invece che su un periodo: è periodica e l'integrale su sarebbe infinito.
- Dire che si annulla in : lì vale ; il primo zero è in .
- Dimenticare che deve essere reale perché sia reale: per complesso è complessa (ma resta pari).
Versione ripasso
- : , .
- Periodiche di periodo (il coseno ha periodo ), reali e pari (segnale reale e pari). Valori: , (aree); primo zero di in .
- Parseval: , ; , danno e .
- Duale: ( e ).
- Errori: dimenticato; integrale di su invece che su un periodo.