|
Python |
Matlab/Octave |
Vorbereitung (Laden von Modulen/Paketen) |
from numpy import *
from numpy.random import *
from matplotlib.pyplot import *
|
%Octave: pkg load statistics
%Matlab: erfordert die Statistics and Machine Learning Toolbox
|
Vorgabe einer Korrelationskoeffizientenfunktion (einseitig) |
dt=1.0
K=20
rho=zeros(K)
for k in range(0,K):
rho[k]=exp(-(k/5.0)**2-k/100.0) # rho[0]=1
plot(arange(0,K)*dt,rho,'o')
show()
|
dt=1;
K=20;
rho=zeros(1,K);
for k=1:K
rho(k)=exp(-((k-1)/5)^2-(k-1)/100); % rho(1)=1
end
plot((0:K-1)*dt,rho,'o')
|
Für eine Prozessidentifikation aus einer Zeitreihe von Werten sind die Korrelationskoeffizientenfunktion und die Varianz aus dem Datensatz zu schätzen (für reelle Signale ohne Gewichtung bzw. mit Gewichtung). |
|
|
Entwurf der Koeffizienten eines ARp-Prozesses aus der vorgegebenen Korrelationskoeffizientenfunktion sowie der Varianz |
from numpy.linalg import *
rho/=float(rho[0]) # rho[0]=1
v=1.0 # Varianz
p=len(rho)-1
RHO=zeros([p,p])
for i in range(0,p):
for j in range(0,p):
RHO[i,j]=rho[abs(i-j)];
eq=zeros(p)
for i in range(0,p):
eq[i]=rho[i+1];
phi=real(linalg.solve(RHO,eq))
theta0=real(sqrt(v*(1-sum(phi*rho[1:p+1]))))
plot(phi,'o')
show()
|
rho=rho/rho(1); % rho(1)=1
v=1; % Varianz
p=length(rho)-1;
RHO=zeros(p,p);
for i=1:p
for j=1:p
RHO(i,j)=rho(abs(i-j)+1);
end
end
eq=zeros(1,p);
for i=1:p
eq(i)=rho(i+1);
end
phi=linsolve(RHO,eq')';
theta0=sqrt(v*(1-sum(phi.*rho(2:p+1))));
plot(phi,'o')
|
Einzelrealisierung (inklusive der Initialisierung) |
from numpy.linalg import *
p=len(phi)
PHI=zeros([p,p])
for i in range(0,p):
for j in range(0,p):
PHI[i,j]=0
if (i+j+1>=0) and (i+j+1<p):
PHI[i,j]+=phi[i+j+1]
if (i-j-1>=0) and (i-j-1<p):
PHI[i,j]+=phi[i-j-1]
if i==j:
PHI[i,j]-=1
eq=zeros(p)
for i in range(0,p):
eq[i]=-phi[i]
rho=append([1],linalg.solve(PHI,eq))
RHO=zeros([p,p])
for i in range(0,p):
for j in range(0,p):
RHO[i,j]=rho[abs(i-j)];
A=zeros([p,p])
for i in range(0,p):
A[i,i]=1.0
bl=inf
B=(dot(inv(A.T),RHO)-A)/2.0
b=amax(abs(B))
A=A+B
while b<bl:
bl=b
B=(dot(inv(A.T),RHO)-A)/2.0
b=amax(abs(B))
A=A+B
e=standard_normal(p)
v=theta0**2/float(1-sum(phi*rho[1:p+1]))
u=sqrt(v)*dot(A,e.T)
N=1000
m=3.0 # Erwartungswert
x=zeros(N)
for i in range(0,N):
u=append(sum(u*phi)+normal(0,theta0),u[0:p-1])
x[i]=u[0]+m
t=arange(0,N)*dt
plot(t,x,'o')
show()
|
p=length(phi);
PHI=zeros(p,p);
for i=1:p
for j=1:p
PHI(i,j)=0;
if (i+j>0) && (i+j<=p)
PHI(i,j)=PHI(i,j)+phi(i+j);
end
if (i-j>0) && (i-j<=p)
PHI(i,j)=PHI(i,j)+phi(i-j);
end
if i==j
PHI(i,j)=PHI(i,j)-1;
end
end
end
eq=zeros(1,p);
for i=1:p
eq(i)=-phi(i);
end
rho=[1,linsolve(PHI,eq')'];
RHO=zeros(p,p);
for i=1:p
for j=1:p
RHO(i,j)=rho(abs(i-j)+1);
end
end
A=sqrtm(RHO);
e=randn(1,p);
v=theta0^2/(1-sum(phi.*rho(2:p+1)));
u=(sqrt(v)*A*e')';
N=1000;
m=3 % Erwartungswert
x=zeros(1,N);
for i=1:N
u=[sum(u.*phi)+normrnd(0,theta0),u(1:p-1)];
x(i)=u(1)+m;
end
t=(0:N-1)*dt;
plot(t,x,'o')
|
Kovarianzfunktion des entworfenen Prozesses |
from numpy.linalg import *
p=len(phi)
PHI=zeros([p,p])
for i in range(0,p):
for j in range(0,p):
PHI[i,j]=0
if (i+j+1>=0) and (i+j+1<p):
PHI[i,j]+=phi[i+j+1]
if (i-j-1>=0) and (i-j-1<p):
PHI[i,j]+=phi[i-j-1]
if i==j:
PHI[i,j]-=1
eq=zeros(p)
for i in range(0,p):
eq[i]=-phi[i]
rho=append([1],linalg.solve(PHI,eq))
v=theta0**2/float(1-sum(phi*rho[1:p+1]))
K=100
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
C=zeros(K)
for k in range(maximum(-(K//2),-p),minimum((K+1)//2,p+1)):
C[k]=v*rho[abs(k)]
for k in range(minimum((K+1)//2,p+1),(K+1)//2):
C[k]=0
for j in range(0,p):
C[k]+=phi[j]*C[k-(j+1)]
for k in range(maximum(-(K//2),-p-1),-(K//2)-1,-1):
C[k]=0
for j in range(0,p):
C[k]+=phi[j]*C[k+j+1]
plot(tau,C,'o')
show()
|
p=length(phi);
PHI=zeros(p,p);
for i=1:p
for j=1:p
PHI(i,j)=0;
if (i+j>0) && (i+j<=p)
PHI(i,j)=PHI(i,j)+phi(i+j);
end
if (i-j>0) && (i-j<=p)
PHI(i,j)=PHI(i,j)+phi(i-j);
end
if i==j
PHI(i,j)=PHI(i,j)-1;
end
end
end
eq=zeros(1,p);
for i=1:p
eq(i)=-phi(i);
end
rho=[1,linsolve(PHI,eq')'];
v=theta0^2/(1-sum(phi.*rho(2:p+1)));
K=100;
tau=circshift((-fix(K/2):K-1-fix(K/2))*dt,[0;fix((K+1)/2)]);
C=zeros(1,K);
for k=max(-fix(K/2),-p):min(K-1-fix(K/2),p)
C(mod(k,K)+1)=v*rho(abs(k)+1);
end
for k=min(K-fix(K/2),p+1):K-1-fix(K/2)
C(mod(k,K)+1)=0;
for j=1:p
C(mod(k,K)+1)=C(mod(k,K)+1)+phi(j)*C(mod(k-j,K)+1);
end
end
for k=max(-fix(K/2),-p)-1:-1:-fix(K/2)
C(mod(k,K)+1)=0;
for j=1:p
C(mod(k,K)+1)=C(mod(k,K)+1)+phi(j)*C(mod(k+j,K)+1);
end
end
plot(tau,C,'o')
|
Leistungsdichtespektrums des entworfenen Prozesses |
K=1000
p=len(phi)
df=1/float(K*dt)
f=roll(arange(-(K//2),(K+1)//2)*df,(K+1)//2)
S=zeros(K)
for i in range(0,len(f)):
S[i]=dt*theta0**2/abs(1-sum(phi*exp(-2j*pi*arange(1,p+1)*f[i]*dt)))**2
plot(f,S,'o')
show()
|
K=1000;
p=length(phi);
df=1/(K*dt);
f=circshift((-fix(K/2):fix((K-1)/2))*df,[0;fix((K+1)/2)]);
S=zeros(1,K);
for i=(1:length(f))
S(i)=dt*theta0^2/abs(1-sum(phi.*exp(-2j*pi*(1:p)*f(i)*dt)))^2;
end
plot(f,S,'o')
|
|
Python |
Matlab/Octave |
Vorbereitung (Laden von Modulen/Paketen) |
from numpy import *
from numpy.random import *
from matplotlib.pyplot import *
|
|
Vorgabe des Leistungsdichtespektrums (beliebige, paarweise verschiedene Frequenzen) |
dt=1.0
J=20
df=0.024
f=arange(1,J+1)*df
S=0.1/(0.02+f**(5.0/3.0))*exp(-10*f)
plot(f,S,'o')
show()
|
dt=1.0;
J=20;
df=0.024;
f=(1:J)*df;
S=0.1./(0.02+f.^(5.0/3.0)).*exp(-10*f);
plot(f,S,'o')
|
Entwurf der Koeffizienten eines MAq-Prozesses aus der vorgegebenen Leistungsdichte |
COS=zeros([J,J])
for i in range(0,J):
COS[i,0]=1
for j in range(1,J):
COS[i,j]=2*cos(2*pi*f[i]*j*dt)
eq=sqrt(S/dt)
q=2*J-2
theta=zeros(q+1)
theta[J-1:q+1]=linalg.solve(COS,eq)
for i in range(0,q+1):
theta[i]=theta[abs(q-i)]
plot(theta,'o')
show()
|
COS=zeros(J,J);
for i=1:J
COS(i,1)=1;
for j=2:J
COS(i,j)=2*cos(2*pi*f(i)*(j-1)*dt);
end
end
eq=sqrt(S/dt);
q=2*J-2;
theta=zeros(1,q+1);
theta(J:q+1)=linsolve(COS,eq')';
for i=1:q+1
theta(i)=theta(abs(q-i)+2);
end
plot(theta,'o')
|
Vorgabe der Kovarianzfunktion |
dt=1.0
K=20
tau=arange(0,K)*dt
C=2*(1-arange(0,K)/float(K))*cos(1.5*pi*arange(0,K)/float(K))
plot(tau,C,'o')
show()
|
dt=1.0;
K=20;
tau=(0:K-1)*dt;
C=2*(1-(0:K-1)/K).*cos(1.5*pi*(0:K-1)/K);
plot(tau,C,'o')
|
Entwurf der Koeffizienten eines MAq-Prozesses aus der vorgegebenen Kovarianzfunktion |
from numpy.linalg import *
q=K-1
theta=sqrt(C[0]/float(q+1))*(q+1-arange(0,q+1))/float(q+1)
for l in range(0,20):
J=zeros([q+1,q+1])
e=-C[0:q+1]
for i in range(0,q+1):
for j in range(i,q+1):
e[i]+=theta[j-i]*theta[j]
for j in range(0,q+1):
if (j-i>=0) and (j-i<=q):
J[i,j]+=theta[j-i]
if (j+i>=0) and (j+i<=q):
J[i,j]+=theta[j+i]
theta+=-dot(inv(J),e)
plot(theta,'o')
show()
|
q=K-1;
theta=sqrt(C(1)/(q+1))*ones(1,q+1);
Theta=zeros(q+1,q+1);
for l=1:1000
for i=1:q+1
for j=i:q+1
Theta(i,j)=theta(j-i+1);
end
end
theta=(2*theta+linsolve(Theta,C')')/3;
end
plot(theta,'o')
|
Einzelrealisierung (inklusive der Initialisierung) |
from numpy.fft import *
N=1000
m=3 # Erwartungswert
q=len(theta)-1
e=standard_normal(N+q+1)
xp=real(ifft(fft(e)*fft(append(theta,zeros(N)))))
x=xp[0:N]
t=arange(0,N)*dt
plot(t,x,'o')
show()
|
N=1000;
m=3; % Erwartungswert
q=length(theta)-1;
e=randn(1,N+q+1);
xp=real(ifft(fft(e).*fft([theta,zeros(1,N)])));
x=xp(1:N)+m;
t=(0:N-1)*dt;
plot(t,x,'o')
|
Kovarianzfunktion des entworfenen Prozesses |
K=100
q=len(theta)-1
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
C=zeros(K)
for k in range(-(K//2),(K+1)//2):
C[k]=0
for i in range(0,q+1-abs(k)):
C[k]+=theta[i]*theta[i+abs(k)]
plot(tau,C,'o')
show()
|
K=100;
q=length(theta)-1;
tau=circshift((-fix(K/2):K-1-fix(K/2))*dt,[0;fix((K+1)/2)]);
C=zeros(1,K);
for k=-fix(K/2):K-fix(K/2)
C(mod(k,K)+1)=0;
for i=0:q-abs(k)
C(mod(k,K)+1)=C(mod(k,K)+1)+theta(i+1)*theta(i+1+abs(k));
end
end
plot(tau,C,'o')
|
Leistungsdichtespektrum des entworfenen Prozesses |
K=1000
q=len(theta)-1
df=1/float(K*dt)
f=roll(arange(-(K//2),(K+1)//2)*df,(K+1)//2)
S=zeros(K)
for i in range(0,len(f)):
S[i]=dt*abs(sum(theta*exp(-2j*pi*arange(0,q+1)*f[i]*dt)))**2
plot(f,S,'o')
show()
|
K=1000;
q=length(theta)-1;
df=1/(K*dt);
f=circshift((-fix(K/2):fix((K-1)/2))*df,[0;fix((K+1)/2)]);
S=zeros(1,K);
for i=(1:length(f))
S(i)=dt*abs(sum(theta.*exp(-2j*pi*(0:q)*f(i)*dt)))^2;
end
plot(f,S,'o')
|