|
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
|
periodisches Rauschen mit dem Erwartungswert und der Varianz |
N=1000
x=normal(3,2,N)
dt=1.0
t=arange(0,N)*dt
plot(t,x,'.')
show()
|
N=1000;
x=normrnd(3,2,1,N);
dt=1.0;
t=(0:N-1)*dt;
plot(t,x,'.')
|
Korrelationsfunktion |
R=zeros(N)
tau=arange(0,N)*dt
for k in range(0,N):
sum1=0
for i in range(0,N):
sum1+=x[i]*x[(i+k)%N]
R[k]=sum1/float(N)
plot(tau,R,'.')
show()
|
R=zeros(1,N);
tau=(0:N-1)*dt;
for k=0:N-1
sum1=0;
for i=1:N
sum1=sum1+x(i)*x(mod(i+k-1,N)+1);
end
R(k+1)=sum1/N;
end
plot(tau,R,'.')
|
Kovarianzfunktion |
C=zeros(N)
tau=arange(0,N)*dt
mx=mean(x)
for k in range(0,N):
sum1=0
for i in range(0,N):
sum1+=(x[i]-mx)*(x[(i+k)%N]-mx)
C[k]=sum1/float(N)
plot(tau,C,'.')
show()
|
C=zeros(1,N);
tau=(0:N-1)*dt;
for k=0:N-1
sum1=0;
mx=mean(x);
for i=1:N
sum1=sum1+(x(i)-mx)*(x(mod(i+k-1,N)+1)-mx);
end
C(k+1)=sum1/N;
end
plot(tau,C,'.')
|
Korrelationskoeffizientenfunktion |
rho=zeros(N)
tau=arange(0,N)*dt
mx=mean(x)
for k in range(0,N):
sum1=0
for i in range(0,N):
sum1+=(x[i]-mx)*(x[(i+k)%N]-mx)
rho[k]=sum1/float(N)/var(x)
plot(tau,rho,'.')
show()
|
rho=zeros(1,N);
tau=(0:N-1)*dt;
for k=0:N-1
sum1=0;
mx=mean(x);
for i=1:N
sum1=sum1+(x(i)-mx)*(x(mod(i+k-1,N)+1)-mx);
end
rho(k+1)=sum1/N/var(x,1);
end
plot(tau,rho,'.')
|
periodisches Signal (Beispiel harmonisches Signal, mit Rauschen) |
N=100
x=sin(2*pi*arange(0,N)/20.0)+normal(0,0.1,N)
dt=1.0
t=arange(0,N)*dt
plot(t,x,'.')
show()
|
N=100;
x=sin(2*pi*(0:N-1)/20)+normrnd(0,0.1,1,N);
dt=1.0;
t=(0:N-1)*dt;
plot(t,x,'.')
|
Korrelationsfunktion |
R=zeros(N)
tau=arange(0,N)*dt
for k in range(0,N):
sum1=0
for i in range(0,N):
sum1+=x[i]*x[(i+k)%N]
R[k]=sum1/float(N)
plot(tau,R,'.')
show()
|
R=zeros(1,N);
tau=(0:N-1)*dt;
for k=0:N-1
sum1=0;
for i=1:N
sum1=sum1+x(i)*x(mod(i+k-1,N)+1);
end
R(k+1)=sum1/N;
end
plot(tau,R,'.')
|
Kovarianzfunktion |
C=zeros(N)
tau=arange(0,N)*dt
mx=mean(x)
for k in range(0,N):
sum1=0
for i in range(0,N):
sum1+=(x[i]-mx)*(x[(i+k)%N]-mx)
C[k]=sum1/float(N)
plot(tau,C,'.')
show()
|
C=zeros(1,N);
tau=(0:N-1)*dt;
for k=0:N-1
sum1=0;
mx=mean(x);
for i=1:N
sum1=sum1+(x(i)-mx)*(x(mod(i+k-1,N)+1)-mx);
end
C(k+1)=sum1/N;
end
plot(tau,C,'.')
|
Korrelationskoeffizientenfunktion |
rho=zeros(N)
tau=arange(0,N)*dt
mx=mean(x)
for k in range(0,N):
sum1=0
for i in range(0,N):
sum1+=(x[i]-mx)*(x[(i+k)%N]-mx)
rho[k]=sum1/float(N)/var(x)
plot(tau,rho,'.')
show()
|
rho=zeros(1,N);
tau=(0:N-1)*dt;
for k=0:N-1
sum1=0;
mx=mean(x);
for i=1:N
sum1=sum1+(x(i)-mx)*(x(mod(i+k-1,N)+1)-mx);
end
rho(k+1)=sum1/N/var(x,1);
end
plot(tau,rho,'.')
|
zeitbegrenztes Energiesignal (Beispiel Rechteckimpuls) |
N=100
x=zeros(N)
for i in range(10,90):
x[i]=1
dt=1.0
t=arange(0,N)*dt
plot(t,x,'.')
show()
|
N=100;
x=zeros(1,N);
for i=10:90
x(i)=1;
end
dt=1.0;
t=(0:N-1)*dt;
plot(t,x,'.')
|
Korrelationsfunktion |
RE=zeros(2*N-1)
tau=zeros(2*N-1)
for k in range(-(N-1),N):
tau[k]=k*dt
sum1=0
for i in range(0,N-abs(k)):
sum1+=x[i]*x[i+abs(k)]
RE[k]=sum1*dt
plot(tau,RE,'.')
show()
|
RE=zeros(2*N-1,1);
tau=zeros(2*N-1,1);
for k=-(N-1):N-1
tau(k+N)=k*dt;
sum1=0;
for i=1:N-abs(k)
sum1=sum1+x(i)*x(i+abs(k));
end
RE(k+N)=sum1*dt;
end
plot(tau,RE,'.')
|
Kovarianzfunktion (für Energiesignale nicht sinnvoll) |
CE=zeros(2*N-1)
tau=zeros(2*N-1)
mx=mean(x)
for k in range(-(N-1),N):
tau[k]=k*dt
sum1=0
for i in range(0,N-abs(k)):
sum1+=(x[i]-mx)*(x[i+abs(k)]-mx)
CE[k]=sum1*dt
plot(tau,CE,'.')
show()
|
CE=zeros(2*N-1,1);
tau=zeros(2*N-1,1);
mx=mean(x);
for k=-(N-1):N-1
tau(k+N)=k*dt;
sum1=0;
for i=1:N-abs(k)
sum1=sum1+(x(i)-mx)*(x(i+abs(k))-mx);
end
CE(k+N)=sum1*dt;
end
plot(tau,CE,'.')
|
stationäres Leistungssignal (Beispiel AR1-Prozess) |
N=1000
phi=0.95
mx=1
vx=1
theta=sqrt((1-phi**2)*vx)
x=zeros(N)
x[0]=normal(mx,sqrt(vx))
for i in range(1,N):
x[i]=phi*(x[i-1]-mx)+normal(mx,theta)
dt=1.0
t=arange(0,N)*dt
plot(t,x,'.')
show()
|
N=1000;
phi=0.95;
mx=1;
vx=1;
theta=sqrt((1-phi^2)*vx);
x=zeros(1,N);
x(1)=normrnd(mx,sqrt(vx));
for i=2:N
x(i)=phi*(x(i-1)-mx)+normrnd(mx,theta);
end
dt=1.0;
t=(0:N-1)*dt;
plot(t,x,'.')
|
Korrelationsfunktion (erwartungstreu) |
R=zeros(2*N-1)
tau=zeros(2*N-1)
for k in range(-(N-1),N):
tau[k]=k*dt
sum1=0
for i in range(0,N-abs(k)):
sum1+=x[i]*x[i+abs(k)]
R[k]=sum1/(N-abs(k))
plot(tau,R,'.')
show()
|
R=zeros(2*N-1,1);
tau=zeros(2*N-1,1);
for k=-(N-1):N-1
tau(k+N)=k*dt;
sum1=0;
for i=1:N-abs(k)
sum1=sum1+x(i)*x(i+abs(k));
end
R(k+N)=sum1/(N-abs(k));
end
plot(tau,R,'.')
|
Kovarianzfunktion (asymptotisch erwartungstreu) |
C=zeros(2*N-1)
tau=zeros(2*N-1)
mx=mean(x)
for k in range(-(N-1),N):
tau[k]=k*dt
sum1=0
for i in range(0,N-abs(k)):
sum1+=(x[i]-mx)*(x[i+abs(k)]-mx)
C[k]=sum1/(N-abs(k))
plot(tau,C,'.')
show()
|
C=zeros(2*N-1,1);
tau=zeros(2*N-1,1);
mx=mean(x);
for k=-(N-1):N-1
tau(k+N)=k*dt;
sum1=0;
for i=1:N-abs(k)
sum1=sum1+(x(i)-mx)*(x(i+abs(k))-mx);
end
C(k+N)=sum1/(N-abs(k));
end
plot(tau,C,'.')
|
Korrelationskoeffizientenfunktion (asymptotisch erwartungstreu) |
rho=zeros(2*N-1)
tau=zeros(2*N-1)
mx=mean(x)
for k in range(-(N-1),N):
tau[k]=k*dt
sum1=0
for i in range(0,N-abs(k)):
sum1+=(x[i]-mx)*(x[i+abs(k)]-mx)
rho[k]=sum1/(N-abs(k))/var(x)
plot(tau,rho,'.')
show()
|
rho=zeros(2*N-1,1);
tau=zeros(2*N-1,1);
mx=mean(x);
for k=-(N-1):N-1
tau(k+N)=k*dt;
sum1=0;
for i=1:N-abs(k)
sum1=sum1+(x(i)-mx)*(x(i+abs(k))-mx);
end
rho(k+N)=sum1/(N-abs(k))/var(x,1);
end
plot(tau,rho,'.')
|
Korrelationskoeffizientenfunktion (mit lokaler Normierung, asymptotisch erwartungstreu) |
rho=zeros(2*N-1)
tau=zeros(2*N-1)
mx=mean(x)
for k in range(-(N-1),N):
tau[k]=k*dt
sum1=0
sum2=0
sum3=0
for i in range(0,N-abs(k)):
sum1+=(x[i]-mx)*(x[i+abs(k)]-mx)
sum2+=(x[i]-mx)**2
sum3+=(x[i+abs(k)]-mx)**2
rho[k]=sum1/sqrt(sum2*sum3)
plot(tau,rho,'.')
show()
plot(tau[0:100],rho[0:100],'.',tau[2*N-101:2*N-1],rho[2*N-101:2*N-1],'.')
show()
|
rho=zeros(2*N-1,1);
tau=zeros(2*N-1,1);
mx=mean(x);
for k=-(N-1):N-1
tau(k+N)=k*dt;
sum1=0;
sum2=0;
sum3=0;
for i=1:N-abs(k)
sum1=sum1+(x(i)-mx)*(x(i+abs(k))-mx);
sum2=sum2+(x(i)-mx)^2;
sum3=sum3+(x(i+abs(k))-mx)^2;
end
rho(k+N)=sum1/sqrt(sum2*sum3);
end
plot(tau,rho,'.')
waitforbuttonpress
plot(tau(N-100:N+100),rho(N-100:N+100),'.')
|
|
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 *
|
%Octave: pkg load statistics
%Matlab: erfordert die Statistics and Machine Learning Toolbox
|
Generieren einer korrelierten Zeitreihe (Moving-Average-Prozess) |
N=50
Q=20
mu=3
sigma=1
e=normal(0,sigma/sqrt(Q),int(N+Q))
x=zeros(N)
x[0]=sum(e[0:Q])+mu
for i in range(1,N):
x[i]=x[i-1]-e[i-1]+e[i-1+Q]
plot(x,'o')
show()
|
N=50;
Q=20;
mu=3;
sigma=1;
e=normrnd(0,sigma/sqrt(Q),[1,N+Q]);
x=zeros(1,N);
x(1)=sum(e(1:Q))+mu;
for i=2:N
x(i)=x(i-1)-e(i-1)+e(i-1+Q);
end
plot(x,'o')
|
Bestimmung der primären Kovarianzfunktion |
K=60
mest=mean(x)
tau=zeros(K)
Cprim=zeros(K)
Csim=zeros(K)
for k in range(-(K//2),(K+1)//2):
tau[k]=k
Csim[k]=maximum(0,1-abs(tau[k])/float(Q))
for i in range(0,N-abs(k)):
Cprim[k]+=(x[i]-mest)*(x[i+abs(k)]-mest)/(N-abs(k))
plot(roll(tau,(K+1)//2),roll(Csim,(K+1)//2),tau,Cprim,'o')
show()
|
K=60;
mest=mean(x);
tau=zeros(1,K);
Cprim=zeros(1,K);
for k=-fix(K/2):K-1-fix(K/2)
tau(mod(k,K)+1)=k;
for i=1:N-abs(k)
Cprim(mod(k,K)+1)=Cprim(mod(k,K)+1)+(x(i)-mest)*(x(i+abs(k))-mest)/(N-abs(k));
end
end
plot(circshift(tau,[0;fix(K/2)]),circshift(max(0,1-abs(tau)/Q),[0;fix(K/2)]),tau,Cprim,'o')
|
Bestimmung der Abbildungsmatrix und deren Inversen |
from numpy.linalg import *
A=zeros([K,K])
for i in range(-(K//2),(K+1)//2):
for j in range(-(K//2),(K+1)//2):
A[i,j]=int(i==j)-2*(N-maximum(maximum(abs(i),abs(j)),minimum(N,abs(i-j))))/float(N*(N-abs(i)))+(N-abs(j))/float(N**2)
Ainv=inv(A)
|
A=zeros(K,K);
for i=-fix(K/2):K-1-fix(K/2)
for j=-fix(K/2):K-1-fix(K/2)
A(mod(i,K)+1,mod(j,K)+1)=(i==j)-2*(N-max(max(abs(i),abs(j)),min(N,abs(i-j))))/(N*(N-abs(i)))+(N-abs(j))/N^2;
end
end
Ainv=inv(A);
|
Korrektur der Kovarianzfunktion |
Ccorr=dot(Ainv,Cprim)
plot(roll(tau,(K+1)//2),roll(Csim,(K+1)//2),tau,Cprim,'o',tau,Ccorr,'o')
show()
|
Ccorr=Ainv*Cprim';
plot(circshift(tau,[0;fix(K/2)]),circshift(max(0,1-abs(tau)/Q),[0;fix(K/2)]),tau,Cprim,'o',tau,Ccorr,'o')
|
Nachweis der Erwartungstreue der Korrektur |
from numpy.linalg import *
M=1000
N=50
Q=20
K=60
mu=3
sigma=1
tau=zeros(K)
Csim=zeros(K)
for k in range(-(K//2),(K+1)//2):
tau[k]=k
Csim[k]=maximum(0,1-abs(tau[k])/float(Q))
A=zeros([K,K])
for k in range(-(K//2),(K+1)//2):
for j in range(-(K//2),(K+1)//2):
A[k,j]=int(k==j)+(N-abs(j))/float(N**2)-(minimum(minimum(N,N-j),N-k)-maximum(maximum(0,-j),-k)+minimum(minimum(N,N-j),N+k-j)-maximum(maximum(0,-j),k-j))/float(N*(N-abs(k)))
Ainv=inv(A)
SCprim=zeros(K)
SCcorr=zeros(K)
x=zeros(N)
for m in range(0,M):
e=normal(0,sigma/sqrt(Q),int(N+Q))
x[0]=sum(e[0:Q])+mu
for i in range(1,N):
x[i]=x[i-1]-e[i-1]+e[i-1+Q]
mest=mean(x)
Cprim=zeros(K)
for k in range(-(K//2),(K+1)//2):
for i in range(0,N-abs(k)):
Cprim[k]+=(x[i]-mest)*(x[i+abs(k)]-mest)/(N-abs(k))
SCprim+=Cprim
Ccorr=dot(Ainv,Cprim)
SCcorr+=Ccorr
plot(roll(tau,(K+1)//2),roll(Csim,(K+1)//2),tau,SCprim/float(M),'o',tau,SCcorr/float(M),'o')
show()
|
M=1000;
N=50;
Q=20;
K=60;
mu=3;
sigma=1;
tau=zeros(1,K);
for k=-fix(K/2):K-1-fix(K/2)
tau(mod(k,K)+1)=k;
end
A=zeros(K,K);
for k=-fix(K/2):K-1-fix(K/2)
for j=-fix(K/2):K-1-fix(K/2)
A(mod(k,K)+1,mod(j,K)+1)=(k==j)+(N-abs(j))/N^2-(min(min(N,N-j),N-k)-max(max(0,-j),-k)+min(min(N,N-j),N+k-j)-max(max(0,-j),k-j))/(N*(N-abs(k)));
end
end
Ainv=inv(A);
SCprim=zeros(1,K);
SCcorr=zeros(1,K);
x=zeros(1,N);
for m=1:M
e=normrnd(0,sigma/sqrt(Q),[1,N+Q]);
x(1)=sum(e(1:Q))+mu;
for i=2:N
x(i)=x(i-1)-e(i-1)+e(i-1+Q);
end
mest=mean(x);
Cprim=zeros(1,K);
for k=-fix(K/2):K-1-fix(K/2)
for i=1:length(x)-abs(k)
Cprim(mod(k,K)+1)=Cprim(mod(k,K)+1)+(x(i)-mest)*(x(i+abs(k))-mest)/(N-abs(k));
end
end
SCprim=SCprim+Cprim;
Ccorr=Ainv*Cprim';
SCcorr=SCcorr+Ccorr;
end
plot(circshift(tau,[0;fix(K/2)]),circshift(max(0,1-abs(tau)/Q),[0;fix(K/2)]),tau,SCprim/M,'o',tau,SCcorr/M,'o')
|
Vergleich des mittleren quadratischen Fehlers |
from numpy.linalg import *
M=1000
N=50
Q=20
K=60
mu=3
sigma=1
tau=zeros(K)
Csim=zeros(K)
for k in range(-(K//2),(K+1)//2):
tau[k]=k
Csim[k]=maximum(0,1-abs(tau[k])/float(Q))
A=zeros([K,K])
for k in range(-(K//2),(K+1)//2):
for j in range(-(K//2),(K+1)//2):
A[k,j]=int(k==j)+(N-abs(j))/float(N**2)-(minimum(minimum(N,N-j),N-k)-maximum(maximum(0,-j),-k)+minimum(minimum(N,N-j),N+k-j)-maximum(maximum(0,-j),k-j))/float(N*(N-abs(k)))
Ainv=inv(A)
SCprim=zeros(K)
SCcorr=zeros(K)
x=zeros(N)
for m in range(0,M):
e=normal(0,sigma/sqrt(Q),int(N+Q))
x[0]=sum(e[0:Q])+mu
for i in range(1,N):
x[i]=x[i-1]-e[i-1]+e[i-1+Q]
mest=mean(x)
Cprim=zeros(K)
for k in range(-(K//2),(K+1)//2):
for i in range(0,N-abs(k)):
Cprim[k]+=(x[i]-mest)*(x[i+abs(k)]-mest)/(N-abs(k))
SCprim+=(Cprim-Csim)**2
Ccorr=dot(Ainv,Cprim)
SCcorr+=(Ccorr-Csim)**2
plot(tau,SCprim/float(M),'o',tau,SCcorr/float(M),'x')
show()
|
M=1000;
N=50;
Q=20;
K=60;
mu=3;
sigma=1;
tau=zeros(1,K);
for k=-fix(K/2):K-1-fix(K/2)
tau(mod(k,K)+1)=k;
end
A=zeros(K,K);
for k=-fix(K/2):K-1-fix(K/2)
for j=-fix(K/2):K-1-fix(K/2)
A(mod(k,K)+1,mod(j,K)+1)=(k==j)+(N-abs(j))/N^2-(min(min(N,N-j),N-k)-max(max(0,-j),-k)+min(min(N,N-j),N+k-j)-max(max(0,-j),k-j))/(N*(N-abs(k)));
end
end
Ainv=inv(A);
SCprim=zeros(1,K);
SCcorr=zeros(1,K);
x=zeros(1,N);
for m=1:M
e=normrnd(0,sigma/sqrt(Q),[1,N+Q]);
x(1)=sum(e(1:Q))+mu;
for i=2:N
x(i)=x(i-1)-e(i-1)+e(i-1+Q);
end
mest=mean(x);
Cprim=zeros(1,K);
for k=-fix(K/2):K-1-fix(K/2)
for i=1:length(x)-abs(k)
Cprim(mod(k,K)+1)=Cprim(mod(k,K)+1)+(x(i)-mest)*(x(i+abs(k))-mest)/(N-abs(k));
end
end
SCprim=SCprim+(Cprim-max(0,1-abs(tau)/Q)).^2;
Ccorr=(Ainv*Cprim')';
SCcorr=SCcorr+(Ccorr-max(0,1-abs(tau)/Q)).^2;
end
plot(tau,SCprim/M,'o',tau,SCcorr/M,'x')
|