Esercizio - variabili aleatorie, istogrammi e momenti in Python (laboratorio 6)
Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.
In questa pagina 4
Testo (laboratorio 6, parti 1-4, corso Teoria dei Segnali, UniPD).
- Generazione e densità. Generare campioni di tre variabili aleatorie: uniforme con , ; gaussiana con , ; esponenziale di media . Rappresentare per ciascuna l'istogramma normalizzato (stima della densità ).
- Funzione di distribuzione. Rappresentare la funzione di distribuzione empirica .
- Momenti. Calcolare, teoricamente e dai campioni, la media , la potenza statistica e la varianza , e verificare .
- Variabile discreta. Alfabeto M-PAM con simboli equispaziati, , simboli estratti in modo indipendente ed equiprobabile: istogramma delle probabilità, funzione di distribuzione, momenti e correlazione della sequenza.
Teoria usata: Variabili aleatorie assolutamente continueX è assolutamente continua se F_X(x) = ∫ da −∞ a x di f_X(t) dt per una densità f_X ≥ 0 con integrale 1; allora P(a < X ≤ b) = ∫ da a a b di f_X, P(X = x) = 0 per ogni x, f_X = F_X' dove F_X è derivabile, E[g(X)] = ∫ g(x) f_X(x) dx, e varianza, momenti e disuguaglianze funzionano come nel caso discreto con gli integrali al posto delle somme.Variabili aleatorie assolutamente continue →, Distribuzioni uniforme continua ed esponenzialeU(a, b) ha densità costante 1/(b − a) su [a, b], media (a + b)/2 e varianza (b − a)²/12; Exp(λ) ha densità λe^(−λx) per x ≥ 0, FdD 1 − e^(−λx), P(X > t) = e^(−λt), media 1/λ, varianza 1/λ², ed è l'unica legge continua senza memoria (versione continua della geometrica).Distribuzioni uniforme continua ed esponenziale →, Distribuzione gaussiana (normale)N(μ, σ²) ha densità e^(−(x−μ)²/(2σ²)) / √(2πσ²), a campana centrata in μ con larghezza σ; media μ, varianza σ²; si standardizza con Z = (X − μ)/σ ~ N(0, 1) e si calcola P(X ≤ x) = Φ((x − μ)/σ), con Φ(−z) = 1 − Φ(z); aX + b è ancora gaussiana, N(aμ + b, a²σ²).Distribuzione gaussiana (normale) →, Funzione di distribuzioneLa funzione di distribuzione (FdD) F_X(x) = P(X ≤ x) è definita per ogni v.a., è crescente, continua a destra, va da 0 a 1 e determina la legge; per una v.a. discreta è a gradini, con salti in corrispondenza dei valori e di altezza pari alla densità.Funzione di distribuzione →, Valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso →, Varianza e momentiI momenti E[X^k] e i momenti centrati E[(X − μ)^k] descrivono la forma di una legge; la varianza Var(X) = E[(X − μ)²] = E[X²] − E[X]² misura quanto X si disperde attorno alla media, vale Var(aX + b) = a² Var(X) e Var(X) = 0 solo se X è costante.Varianza e momenti →, Variabili aleatorie discrete e densità discretaUna variabile aleatoria discreta è una funzione X da Ω in R che assume un insieme finito o numerabile di valori (l'alfabeto); la sua densità discreta p_X(x) = P(X = x) basta a calcolare la probabilità di ogni evento che riguarda X.Variabili aleatorie discrete e densità discreta →, Processi aleatori - definizioni, media e autocorrelazioneUn processo aleatorio x(t), t in I (R o Z(T)), è una famiglia di variabili aleatorie sullo stesso spazio di probabilità; fissato l'esito si ottiene una realizzazione (un segnale). Si descrive con le densità di ordine N (complete), in particolare del primo e del secondo ordine, oppure solo con media m_x(t) e correlazione r_x(t,s) = E[x(t)x*(s)] (descrizione di potenza). Un processo gaussiano è determinato da media e correlazione.Processi aleatori - definizioni, media e autocorrelazione →, Legge dei grandi numeri e metodo Monte CarloSe X₁, X₂, ... sono i.i.d. con media μ, la media campionaria X̄ₙ = (X₁ + ... + Xₙ)/n converge a μ: in probabilità (legge debole, dimostrata con Chebyshev se la varianza è finita: P(|X̄ₙ − μ| > ε) ≤ σ²/(nε²)) e quasi certamente (legge forte). Metodo Monte Carlo: ∫ g = E[g(U)] si stima con la media di g(U₁), ..., g(Uₙ) per uniformi indipendenti.Legge dei grandi numeri e metodo Monte Carlo →.
(1) Teoria da confrontare con i campioni
Per le tre variabili, densità, funzione di distribuzione e momenti sono ( è il gradino):
| densità | |||||
|---|---|---|---|---|---|
| uniforme | su | su | |||
| gaussiana | |||||
| esponenziale (media ) |
Con i dati del laboratorio: uniforme , , ; gaussiana , , ; esponenziale , , . Il legame vale per ogni variabile: (Varianza e momentiI momenti E[X^k] e i momenti centrati E[(X − μ)^k] descrivono la forma di una legge; la varianza Var(X) = E[(X − μ)²] = E[X²] − E[X]² misura quanto X si disperde attorno alla media, vale Var(aX + b) = a² Var(X) e Var(X) = 0 solo se X è costante.Varianza e momenti →). Per l'esponenziale, per esempio, (due integrazioni per parti), quindi .
Grafico interattivo: Le tre densità teoriche del laboratorio: uniforme su [−1, 3] (altezza 1/4), gaussiana N(2, 1,5²) (picco 0,266) ed esponenziale di media 0,99 (valore 1,01 in 0)
Grafico interattivo: Funzioni di distribuzione teoriche dell'uniforme su [−1, 3] (rampa da 0 a 1) e dell'esponenziale di media 0,99 (1 − e^{−a/0,99})
(2) Come si generano i campioni
- Uniforme.
rng.random(N)dà ; la trasformazione affine porta l'intervallo in (Matlabrand). - Gaussiana.
rng.standard_normal(N)dà ; è (Distribuzione gaussiana (normale)N(μ, σ²) ha densità e^(−(x−μ)²/(2σ²)) / √(2πσ²), a campana centrata in μ con larghezza σ; media μ, varianza σ²; si standardizza con Z = (X − μ)/σ ~ N(0, 1) e si calcola P(X ≤ x) = Φ((x − μ)/σ), con Φ(−z) = 1 − Φ(z); aX + b è ancora gaussiana, N(aμ + b, a²σ²).Distribuzione gaussiana (normale) →: trasformazione affine di una gaussiana; Matlabrandn). - Esponenziale.
rng.exponential(mu, N)ha media (Matlabexprnd(mu)). - Il generatore è inizializzato con un seme fisso (
default_rng(1)) per ripetere gli stessi numeri; cambiando il seme cambiano le cifre, non le conclusioni.
Istogramma normalizzato. Si divide l'asse in intervalli (nel laboratorio , , ) di ampiezza , si contano i campioni in ciascuno e si disegna una barra di altezza (density=True, Matlab 'Normalization','pdf'). L'area totale vale e l'altezza approssima perché (Variabili aleatorie assolutamente continueX è assolutamente continua se F_X(x) = ∫ da −∞ a x di f_X(t) dt per una densità f_X ≥ 0 con integrale 1; allora P(a < X ≤ b) = ∫ da a a b di f_X, P(X = x) = 0 per ogni x, f_X = F_X' dove F_X è derivabile, E[g(X)] = ∫ g(x) f_X(x) dx, e varianza, momenti e disuguaglianze funzionano come nel caso discreto con gli integrali al posto delle somme.Variabili aleatorie assolutamente continue →). Con soli campioni e tante barre l'istogramma è molto frastagliato: poche decine di campioni per barra, errore relativo .
Funzione di distribuzione empirica. Si ordinano i campioni, , e si disegna la scalinata che passa a in (np.sort e np.arange(1, N+1)/N): è la frazione di campioni , e per la legge dei grandi numeri tende a (Funzione di distribuzioneLa funzione di distribuzione (FdD) F_X(x) = P(X ≤ x) è definita per ogni v.a., è crescente, continua a destra, va da 0 a 1 e determina la legge; per una v.a. discreta è a gradini, con salti in corrispondenza dei valori e di altezza pari alla densità.Funzione di distribuzione →, Legge dei grandi numeri e metodo Monte CarloSe X₁, X₂, ... sono i.i.d. con media μ, la media campionaria X̄ₙ = (X₁ + ... + Xₙ)/n converge a μ: in probabilità (legge debole, dimostrata con Chebyshev se la varianza è finita: P(|X̄ₙ − μ| > ε) ≤ σ²/(nε²)) e quasi certamente (legge forte). Metodo Monte Carlo: ∫ g = E[g(U)] si stima con la media di g(U₁), ..., g(Uₙ) per uniformi indipendenti.Legge dei grandi numeri e metodo Monte Carlo →). Lo scarto massimo tra la scalinata e la curva teorica (statistica di Kolmogorov-Smirnov) è dell'ordine di .
(3) Momenti: teorici ed empirici
Ogni momento è un valore atteso, e il valore atteso si stima con la media dei campioni (Valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso →): , , . In numpy, x.var() divide per (come x.var(ddof=0)): per riprodurre il comando var di Matlab, che divide per , si scrive x.var(ddof=1). L'errore tipico della stima della media è .
(4) Alfabeto M-PAM e correlazione di una sequenza di simboli
Si costruisce l'alfabeto : con e sono , simboli equispaziati di passo e simmetrici rispetto allo zero. Ogni simbolo è estratto con probabilità , indipendentemente dagli altri. I momenti teorici sono
Correlazione. La sequenza è un processo a tempo discreto a simboli indipendenti (Processi aleatori - definizioni, media e autocorrelazioneUn processo aleatorio x(t), t in I (R o Z(T)), è una famiglia di variabili aleatorie sullo stesso spazio di probabilità; fissato l'esito si ottiene una realizzazione (un segnale). Si descrive con le densità di ordine N (complete), in particolare del primo e del secondo ordine, oppure solo con media m_x(t) e correlazione r_x(t,s) = E[x(t)x*(s)] (descrizione di potenza). Un processo gaussiano è determinato da media e correlazione.Processi aleatori - definizioni, media e autocorrelazione →): per i simboli e sono indipendenti, quindi , mentre per si ha la potenza . Per una sequenza a media nulla:
e la densità spettrale di potenza (Processi stazionari e densità spettrale di potenzaUn processo è stazionario in media, in potenza, nel primo ordine o in correlazione se la rispettiva grandezza non cambia traslando il tempo; stazionario in senso lato (sl) = media costante e r_x(t,s) = r_x(t-s); in senso stretto (ss) = tutte le densità invarianti. La densità spettrale di potenza R_x(f) = F[r_x(τ)] è non negativa e ha integrale = potenza statistica. Rumore bianco: R costante. Ciclostazionario: statistiche periodiche. Ergodico in media: la media temporale di una realizzazione converge a m_x.Processi stazionari e densità spettrale di potenza →) è costante, : la sequenza è un "rumore bianco" a tempo discreto. La stima dai campioni è (divisa per , non per : stima "biased"). Il file del corso chiama xcorr senza l'opzione 'biased': i valori che ne escono sono volte più grandi (), mentre qui si divide per per confrontare con .
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
rng = np.random.default_rng(1) # seme fisso: risultati riproducibili
N = 1000
# 1) generazione
a1, a2 = -1, 3
x_unif = a1 + (a2 - a1) * rng.random(N) # x = a1 + (a2-a1) u, u ~ U[0,1] (MATLAB: rand)
m, sigma = 2, 1.5
x_gauss = m + sigma * rng.standard_normal(N) # x = m + sigma z, z ~ N(0,1) (MATLAB: randn)
mu = 0.99
x_exp = rng.exponential(mu, N) # esponenziale di media mu (MATLAB: exprnd)
# 2) istogrammi normalizzati (densita') con la densita' teorica, e CDF empiriche con la teorica
dist = [("uniforme", x_unif, 60, stats.uniform(a1, a2 - a1)),
("gaussiana", x_gauss, 60, stats.norm(m, sigma)),
("esponenziale", x_exp, 80, stats.expon(scale=mu))]
fig, ax = plt.subplots(2, 3, figsize=(12, 6))
for j, (nome, x, nb, d) in enumerate(dist):
xs = np.linspace(-2, 8, 1000)
ax[0, j].hist(x, bins=nb, density=True) # MATLAB: histogram(..., 'Normalization','pdf')
ax[0, j].plot(xs, d.pdf(xs), "r")
ax[1, j].step(np.sort(x), np.arange(1, N + 1) / N, where="post") # CDF empirica: i-esimo valore ordinato -> i/N
ax[1, j].plot(xs, d.cdf(xs), "r")
# distanza massima tra CDF empirica e teorica (statistica di Kolmogorov-Smirnov)
print(f"{nome:13s} scarto massimo CDF empirica-teorica: {stats.kstest(x, d.cdf).statistic:.4f}")
# 3) momenti: teorici e empirici
casi = {
"uniforme": (x_unif, (a1 + a2) / 2, (a1**2 + a1 * a2 + a2**2) / 3, (a2 - a1)**2 / 12),
"gaussiana": (x_gauss, m, m**2 + sigma**2, sigma**2),
"esponenziale": (x_exp, mu, 2 * mu**2, mu**2),
}
print(f"{'':13s} {'m (teo, emp)':>16s} {'M (teo, emp)':>16s} {'var (teo, emp)':>18s} {'M - m^2':>9s}")
for nome, (x, m_t, M_t, v_t) in casi.items():
m_e, M_e, v_e = x.mean(), (x**2).mean(), x.var(ddof=1) # ddof=1: come MATLAB var (divide per N-1)
print(f"{nome:13s} {m_t:7.4f} {m_e:7.4f} {M_t:7.4f} {M_e:7.4f} {v_t:7.4f} {v_e:7.4f} {M_e - m_e**2:8.4f}")
# 4) alfabeto M-PAM e correlazione di una sequenza a simboli indipendenti
M, d, Nsim = 4, 0.5, 2**18
A = (2 * np.arange(M) - (M - 1)) * d # {-1.5, -0.5, 0.5, 1.5}
x = A[rng.integers(0, M, Nsim)] # simboli indipendenti, equiprobabili (MATLAB: A(randi([1,M],1,N)))
print("alfabeto", A, "| frequenze relative", np.round([np.mean(x == a) for a in A], 4))
print(f"m = {x.mean():.4f}, M_x = {np.mean(x**2):.4f} (teo {d**2 * (M**2 - 1) / 3}), var = {x.var(ddof=1):.4f}")
tau_max = 20
r = np.array([x[: Nsim - k] @ x[k:] / Nsim for k in range(tau_max + 1)]) # r_x(kT) = (1/N) sum x[n] x[n+k] ('biased')
print("r_x(0..4) =", np.round(r[:5], 4), "| max |r_x(k)| per k = 1..20:", round(np.abs(r[1:]).max(), 4))
plt.show()Cosa si vede e valori ottenuti (seme ; cambiando seme le cifre cambiano di poco).
- Istogrammi: l'uniforme è un plateau di altezza circa su (con fluttuazioni tra le barre), la gaussiana una campana centrata in con picco , l'esponenziale parte da in e decade; le curve teoriche passano in mezzo alle barre.
- Funzioni di distribuzione: tre scalinate molto fitte, quasi indistinguibili dalle curve teoriche (rampa lineare, sigmoide, ). Scarto massimo: (uniforme), (gaussiana), (esponenziale), tutti sotto , il limite al del test di Kolmogorov.
- Momenti (teorico, empirico):
| (empirico) | ||||
|---|---|---|---|---|
| uniforme | ; | ; | ; | |
| gaussiana | ; | ; | ; | |
| esponenziale | ; | ; | ; |
Le differenze sono fluttuazioni statistiche di ordine (per la media gaussiana : scarto di ). La verifica è soddisfatta a meno del fattore tra le due definizioni di varianza (per esempio contro ).
- M-PAM: frequenze relative (teoria ); , (teoria ), varianza . Correlazione: e per tutti in modulo , cioè dell'ordine dell'errore standard attorno a zero: un solo impulso in , come per il rumore bianco.
Errori tipici.
- Usare
x.var()e aspettarsi il risultato di Matlab (vardivide per ) oppure, al contrario, confrontare con una varianza calcolata con denominatore diverso. - Non normalizzare l'istogramma: le altezze dipendono da e dalla larghezza delle barre e non sono la densità.
- Confrontare la correlazione empirica non normalizzata (
xcorrsenza'biased') con .
Vedi anche: Esercizio - processi aleatori, media d'insieme, correlazione e potenza temporale in Python (laboratorio 6), Esercizio - rumore bianco gaussiano e filtro passa-basso in Python (laboratorio 6).
Esercizi su questo argomento
Teoria collegata
- Variabili aleatorie assolutamente continue
- Distribuzioni uniforme continua ed esponenziale
- Distribuzione gaussiana (normale)
- Funzione di distribuzione
- Valore atteso
- Varianza e momenti
- Variabili aleatorie discrete e densità discreta
- Processi aleatori - definizioni, media e autocorrelazione
- Legge dei grandi numeri e metodo Monte Carlo
- Processi stazionari e densità spettrale di potenza