Simulazione numerica del white shot noise

SSmile
Ciao a tutti,

devo fare una simulazione numerica del white shot noise con Matlab.

Questo tipo di rumore è composto da degli impulsi che avvengono a tempi casuali. Gli stessi impulsi sono caratterizzati da altezze casuali di durata infinitesima.
Questa introduzione, sempre che sia corretta, l'ho scritta solo per poter spiegare meglio ciò che ho iniziato a fare!

1) ho generato un vettore di numeri casuali uniformi per i tempi {Ti};
2) ho definito la pT(t) --> pdf dei tempi
Vi riporto le righe di programmazione in matlab in diverso colore.

%Definizione pT(t): distribuzione di probabilità dei tempi
pT = inline('l*exp(-l*t)')
l = 1;
T = randn(1,100);

%Ordinare vettore tempi:
T_ord = T;
successivo = 0;
for i = 1:length(T_ord);
for j = 1:length(T_ord);
if T_ord(j) < T_ord(i)
successivo = T_ord(i);
T_ord(i) = T_ord(j);
T_ord(j) = successivo;
end
end
end

pT = pT(l,T_ord);
figure(1)
plot(pT,T_ord)
xlabel('Tempi t');
ylabel('p_T(t)');
title('Pdf intervalli temporali');


3) ho generato un vettore di numeri casuali uniforme relativi alle altezze {Hi};
4) ho definito la pdf delle altezze che è una distribuzione esponenziale;

%Definizione di pH(h): distribuzione (esponenziale) di probabilità delle altezze
pH = inline('(1/a)*exp(-h/a)')
a = 0.5; %Media della distribuzione esponenziale
H = randn(1,100);

%Ordinare vettore altezze:
H_ord = H;
successivo = 0;
for i = 1:length(H_ord);
for j = 1:length(H_ord);
if H_ord(j) < H_ord(i)
successivo = H_ord(i);
H_ord(i) = H_ord(j);
H_ord(j) = successivo;
end
end
end

pH = pH(a,H_ord);
figure(2)
plot(pH,H_ord)
xlabel('Altezze h');
ylabel('p_H(h)');
title('Pdf altezze');


Il rumore shot Rsn(t) in funzione del tempo é:
$ Rsn(t) = sum_(i) hi* delta(t-Ti) $

t = [0:0.1:9.9];
for i = 1:length(t);
for j = 1:length(T);
Rsn(i) = sum(H(j).*dirac(t(i)-T(j)));
end
end
figure(3)
plot(Rsn,t)


scrivento questa relazione in matlab, utilizzando la funzione "dirac(t-T(i))" all'interno di un ciclo for, mi vengono una seria di zeri... a causa della distribuzione di Dirach...

In cosa sbaglio?


Aspetto una vostra risposta!!!

Vi ringrazio tanto!
Silvia

Risposte
DajeForte
Allora fammi vedere se ho capito.
Hai generato un vettore di tempi random; di questi hai detto (ne punto 1) "ho generato un vettore di numeri casuali uniformi per i tempi {Ti}".
Poi nel codice c'è scritto"pT = inline('l*exp(-l*t)') " (non so bene cosa voglia "inline") ma è la densità di un'esponenziale.

Quind, devi simulare un processo di Poisson (Compound)?
Pare di si, ed inoltre mi pare id capire che anche i salti siano esponenziali.

Se così devi:

simulare i tempi d'arresto esponenziali e fargli una somma cumulata (per arrestare la sequenza dei tempi puoi usare un while(ultimo cumulato
fatto questo devi generare i salti (come sopra).

Il processo è $S_t\ =\ sum_{n=1}^(infty)\ a_i1_{T_i<=t}\ =\ sum_(i=0)^(N_t)a_i$,

T sono i tempi; a sono i salti; è il processo di Poisson.

SSmile
Sì, riportando ciò che leggo sulla dispensa è la forma derivata di un homogeneneous compound Poisson process...


inline('espressione') serve a definire una funzione in matlab per poi calcolarne i valori nei punti opportuni...


Cosa vorresti dire con:
"simulare i tempi d'arresto esponenziali e fargli una somma cumulata (per arrestare la sequenza dei tempi puoi usare un while(ultimo cumulato
Mi sento un po' limitata, ma non ho mai fatto un corso di statistica...
ho incontrato medie varianze e distribuzioni fondamentali nel corso di esami che nn erano statistica ed ho cercato di capirne i concetti...
ora mi trovo a lavorare su una tesi che è fondata sulla statistica...
Mi piace molto anche se per il momento e per chissà per quanto ancora, mi muovo nel buio più nero...


Per inquadrare il problema, quello che devo simulare sono degli eventi di pioggia casuali... :?

DajeForte
OK, il matlab te lo lascio a te.

Comunque per generare $S$ devi prima generare i tempi; per questi sai che la distribuzione tra un evento è l'atro è esponenziale. Quindi il secondo evento ad esempio avviene a $T_2=t_1+t_2$ dove $t_1$ è il tempo tra lo 0 ed il primo evento, $t_2$ è il tempo tra il primo ed il secondo.

La maniera usuale di farlo è:

fisso un orizzonte temporale T,


t = 0
while(t<=T)
{
e=genera un esponenziale di parametro l
{
qua in mezzo metti un po' di cose che ti devi fare
}
t=t+e
}

SSmile
Grazie! Molto gentile!!

Quindi se ho capito, quando genero i tempi, è sbagliato generare numeri random uniforme, perchè la distribuzione non è uniforme?

Grazie ancora!
ed alla prossima!

Silvia

DajeForte
La distribuzione di ciascun tempo tra un evento e l'altro è esponenziale (e sono indipendenti), e quindi poi non li devi riordinare, perchè il tempo di accadimento dell'ennesimo evento $T_n=t_1+...+t_n$ e quindi i $T_n$ sono ovviamente crescienti per definizione (i tempi esponenziali $t_i$ sono positivi).

DajeForte
Scusa ti preciso che se confronti quello che ho detto con un abbozzo di codice (citato) due post sopra, i simboli hanno significato diverso.

SSmile
Sì,
grazie ancora!!

Credo che ci risentiremo!

Buona giornata

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.