Signal- und Messdatenverarbeitung


Testcodes für Kapitel 5: Zufallsprozesse

Testcodes zu lineare stochastischen Prozessen im Rahmen der Prädiktion und der Prozessidentifikation

weitere Codes zu linearen stochastischen Prozessen sowie zu Verteilungsfunktionen ohne bzw. mit Gewichtung

systematische Zusammenstellung von kombinierbaren Programmabschnitten zur Signal- und Messdatenverarbeitung

Python Matlab/Octave
Vorbereitung (Laden von Modulen/Paketen)
#python -m pip install --upgrade numpy
#python -m pip install --upgrade matplotlib
#pip install --upgrade numpy
#pip install --upgrade matplotlib
from numpy import *
from numpy.random import *
from matplotlib.pyplot import *
%Matlab: erfordert die Statistics and Machine Learning Toolbox
%Octave: pkg load statistics
if exist('OCTAVE_VERSION','builtin')~=0
pkg load statistics
end
Gleichverteilung im Intervall [0,8)
N=poisson(20) #Anzahl der Objekte Poisson-verteilt
a=0
b=8
x=uniform(a,b,N) #Position der Objekte gleichverteilt
plot(x,'o')
show()
N=poissrnd(20); %Anzahl der Objekte Poisson-verteilt
a=0;
b=8;
x=unifrnd(a,b,[1,N]); %Position der Objekte gleichverteilt
plot(x,'o')
kumulative Verteilungsfunktion (linksseitig stetig) und empirische Wahrscheinlichkeitsdichtefunktion
N=poisson(10000)
a=0
b=8
x=uniform(a,b,N)
xi=0.5*arange(-2,19)
F=cumsum(histogram(x,bins=append(append(-inf,xi),inf))[0][0:len(xi)])/float(len(x))
plot([-1,0,8,9],[0,0,1,1],xi,F,'o')
show()
K=len(xi)
f=histogram(x,bins=xi)[0][0:K-1]/float(len(x))/(xi[1:K]-xi[0:K-1])
plot([-1,0,0,8,8,9],[0,0,0.125,0.125,0,0])
step(xi,append(0,f))
show()
N=poissrnd(10000);
a=0;
b=8;
x=unifrnd(a,b,[1,N]);
xi=0.5*(-2:18);
F=cumsum(histc(x,[-inf,xi]))/length(x);
F=F(1:end-1);
plot([-1,0,8,9],[0,0,1,1],xi,F,'o')
waitforbuttonpress
f=histc(x,xi)/length(x);
f=f(1:length(xi)-1);
f=f./reshape(xi(2:length(xi))-xi(1:length(xi)-1),size(f));
plot([-1,0,0,8,8,9],[0,0,0.125,0.125,0,0])
hold on
stairs(xi,[f,0])
hold off
Abstand (exponentialverteilt) aufeinanderfolgender Objekte mit gleichverteilten Positionen
N=poisson(20)
a=0
b=8
x=sort(uniform(a,b,N))
d=x[1:len(x)]-x[0:len(x)-1]
plot(d,'o')
show()
N=poissrnd(20);
a=0;
b=8;
x=sort(unifrnd(a,b,[1,N]));
d=x(2:end)-x(1:end-1);
plot(d,'o')
kumulative Verteilungsfunktion (linksseitig stetig) und empirische Wahrscheinlichkeitsdichtefunktion
N=poisson(10000)
a=0
b=8
x=sort(uniform(a,b,N))
d=x[1:len(x)]-x[0:len(x)-1]
dk=0.0005*arange(-2,19)
F=cumsum(histogram(d,bins=append(append(-inf,dk),inf))[0][0:len(dk)])/float(len(d))
plot(0.00005*arange(-20,181),1-exp(-0.00005*maximum(0,arange(-20,181))/((b-a)/float(N))),dk,F,'o')
show()
K=len(dk)
f=histogram(d,bins=dk)[0][0:K-1]/float(len(d))/(dk[1:K]-dk[0:K-1])
plot([-0.001,0],[0,0])
plot(0.00005*arange(0,181),N/(b-a)*exp(-0.00005*arange(0,181)/((b-a)/float(N))))
step(dk,append(0,f))
show()
N=poissrnd(10000);
a=0;
b=8;
x=sort(unifrnd(a,b,[1,N]));
d=x(2:end)-x(1:end-1);
dk=0.0005*(-2:18);
F=cumsum(histc(d,[-inf,dk]))/length(d);
F=F(1:end-1);
plot(0.00005*(-20:180),1-exp(-0.00005*max(0,(-20:180))/((b-a)/N)),dk,F,'o')
waitforbuttonpress
f=histc(d,dk)/length(d);
f=f(1:length(dk)-1);
f=f./reshape(dk(2:length(dk))-dk(1:length(dk)-1),size(f));
plot([-0.001,0],[0,0])
hold on
plot(0.00005*(0:180),N/(b-a)*exp(-0.00005*(0:180)/((b-a)/N)))
stairs(dk,[f,0])
hold off
Anzahl von Objekte in einem Teilintervall (Poisson-verteilt) mit gleichverteilten Positionen
N=poisson(20)
a=0
b=8
x=uniform(a,b,N)
n=zeros(10)
for i in range(0,N):
  n[int(10*(x[i]-a)/float(b-a))]+=1

plot(n,'o')
show()
N=poissrnd(20);
a=0;
b=8;
x=unifrnd(a,b,[1,N]);
n=zeros(1,10);
for i=1:N
n(fix(10*(x(i)-a)/(b-a))+1)=n(fix(10*(x(i)-a)/(b-a))+1)+1;
end
plot(n,'o')
kumulative Verteilungsfunktion (linksseitig stetig) und empirische Wahrscheinlichkeitsfunktion
N=poisson(10000)
a=0
b=8
x=uniform(a,b,N)
K=5000
n=zeros(K)
for i in range(0,N):
  n[int(K*(x[i]-a)/float(b-a))]+=1

nk=0.2*arange(-20,101)
F=cumsum(histogram(n,bins=append(append(-inf,nk),inf))[0][0:len(nk)])/float(len(n))
plot(nk,F,'o')
show()
nk=arange(0,11)
P=histogram(n,bins=append(nk,nk[len(nk)-1]))[0]/float(len(n))
plot(nk,P,'o')
show()
N=poissrnd(10000);
a=0;
b=8;
x=unifrnd(a,b,[1,N]);
K=5000;
n=zeros(1,K);
for i=1:N
n(fix(K*(x(i)-a)/(b-a))+1)=n(fix(K*(x(i)-a)/(b-a))+1)+1;
end
nk=0.2*(-20:100);
F=cumsum(histc(n,[-inf,nk]))/length(n);
F=F(1:end-1);
plot(nk,F,'o')
waitforbuttonpress
nk=(0:10);
P=histc(n,nk)/length(n);
plot(nk,P,'o')
AR1-Prozess
N=200
phi=0.95
ex=1
vx=1
theta=sqrt((1-phi**2)*vx)
x=zeros(N)
x[0]=normal(ex,sqrt(vx))
for i in range(1,N):
  x[i]=phi*(x[i-1]-ex)+normal(ex,theta)

plot(x,'.')
show()
N=200;
phi=0.95;
ex=1;
vx=1;
theta=sqrt((1-phi^2)*vx);
x=zeros(1,N);
x(1)=normrnd(ex,sqrt(vx));
for i=2:N
x(i)=phi*(x(i-1)-ex)+normrnd(ex,theta);
end
plot(x,'.')
Impulsantwort des AR1-Prozesses
N=200
phi=0.95
ex=1
vx=1
theta=sqrt((1-phi**2)*vx)
x=zeros(N)
x[0]=theta+ex
for i in range(1,N):
  x[i]=phi*(x[i-1]-ex)+ex

plot(x,'.')
show()
N=200;
phi=0.95;
ex=1;
vx=1;
theta=sqrt((1-phi^2)*vx);
x=zeros(1,N);
x(1)=theta+ex;
for i=2:N
x(i)=phi*(x(i-1)-ex)+ex;
end
plot(x,'.')
Random Walk (eindimensional, mit Drift)
N=200
nu=0.2
vx=1
x=cumsum(normal(nu,sqrt(vx),N))
plot(x,'.')
show()
N=200;
nu=0.2;
vx=1;
x=cumsum(normrnd(nu,sqrt(vx),[1,N]));
plot(x,'.')
Lévy Flights (eindimensional, Cauchy-verteilt)
N=200
vx=1
x=cumsum(sqrt(vx)*standard_normal(N)/standard_normal(N))
plot(x,'.')
show()
N=200;
vx=1;
x=cumsum(sqrt(vx)*randn(1,N)./randn(1,N));
plot(x,'.')