Signal- und Messdatenverarbeitung


Codes für stochastisch und gemeinsam abgetastete, komplexe Leistungssignalpaare, mit Gewichtung

Python Matlab/Octave
Vorbereitung (Laden von Modulen/Paketen)
from numpy import *
from numpy.random import *
from matplotlib.pyplot import *
Generieren von Wertetripeln (ti,xi,yi) mit den Messzeitpunkten ti und den komplexen Messwerten xi und yi (zwei korrelierte AR1-Prozess als Beispiel, mit Erwartungswerten verschieden von null) mit einer vom Wert abhängigen Annahmewahrscheinlichkeit (verschobene Sigmoidfunktion als Beispiel)
T=10000.0
Ti=10.0
dr=1.0
mxs=3.0+1.5j
mys=2.0+0.5j
vxs=1.0
vys=2.0
cc=0.5
c1=sqrt(0.5+0.5*sqrt(1-cc**2/(vxs*vys)))
c2=cc/sqrt(vxs*vys)/(2*c1)
c11=sqrt(vxs)*c1
c12=sqrt(vxs)*c2
c21=sqrt(vys)*c2
c22=sqrt(vys)*c1
t=[]
x=[]
y=[]
te=0.0
ue=normal(0,sqrt(0.5))+1j*normal(0,sqrt(0.5))
ve=normal(0,sqrt(0.5))+1j*normal(0,sqrt(0.5))
while te<T:
  tp=exponential(1.0/(2*dr))
  te+=tp
  phi=exp(-tp/Ti)
  theta=sqrt(0.5*(1-phi**2))
  ue=ue*phi+normal(0,theta)+1j*normal(0,theta)
  ve=ve*phi+normal(0,theta)+1j*normal(0,theta)
  xe=c11*ue+c12*ve+mxs
  ye=c21*ue+c22*ve+mys
  if (te<T) and (random()<1/(1+exp(-real(xe-mxs)-real(ye-mys)))):
    t.append(te)
    x.append(xe)
    y.append(ye)
  

t=array(t)
x=array(x)
y=array(y)
plot(t,real(x),'o',t,imag(x),'o',t,real(y),'o',t,imag(y),'o')
show()
T=10000;
Ti=10;
dr=1;
mxs=3+1.5j;
mys=2+0.5j;
vxs=1;
vys=2;
cc=0.5;
c1=sqrt(0.5+0.5*sqrt(1-cc^2/(vxs*vys)));
c2=cc/sqrt(vxs*vys)/(2*c1);
c11=sqrt(vxs)*c1;
c12=sqrt(vxs)*c2;
c21=sqrt(vys)*c2;
c22=sqrt(vys)*c1;
t=[];
x=[];
y=[];
te=0;
ue=sqrt(0.5)*randn()+1j*sqrt(0.5)*randn();
ve=sqrt(0.5)*randn()+1j*sqrt(0.5)*randn();
while te<T
tp=-log(1-rand())/(2*dr);
te=te+tp;
phi=exp(-tp/Ti);
theta=sqrt(0.5*(1-phi^2));
ue=ue*phi+theta*randn()+1j*theta*randn();
ve=ve*phi+theta*randn()+1j*theta*randn();
xe=c11*ue+c12*ve+mxs;
ye=c21*ue+c22*ve+mys;
if (te<T) && (rand<1/(1+exp(-real(xe-mxs)-real(ye-mys))))
t(end+1)=te;
x(end+1)=xe;
y(end+1)=ye;
end
end
plot(t,real(x),'o',t,imag(x),'o',t,real(y),'o',t,imag(y),'o')
Generieren von reellen Gewichten gi passend zu den (ti,xi,yi) (Inverse der verschobenen Sigmoidfunktion)
g=1+exp(-real(x-mxs)-real(y-mys))
plot(t,g,'o')
show()
g=1+exp(-real(x-mxs)-real(y-mys));
plot(t,g,'o')
Mittelwerte x=i=0N1gixii=0N1gi
y=i=0N1giyii=0N1gi
mxe=sum(g*x)/float(sum(g))
mye=sum(g*y)/float(sum(g))
mxe=sum(g.*x)/sum(g)
mye=sum(g.*y)/sum(g)
Varianzen (ohne Bessel-Korrektur, asymptotisch erwartungstreu) sx2=i=0N1gi(xix)*(xix)i=0N1gi=i=0N1gi|xix|2i=0N1gi
=i=0N1gixi*xii=0N1gix*x=i=0N1gi|xi|2i=0N1gi|x|2
sy2=i=0N1gi(yiy)*(yiy)i=0N1gi=i=0N1gi|yiy|2i=0N1gi
=i=0N1giyi*yii=0N1giy*y=i=0N1gi|yi|2i=0N1gi|y|2
vxe=sum(g*abs(x)**2)/float(sum(g))-abs(sum(g*x)/float(sum(g)))**2
vye=sum(g*abs(y)**2)/float(sum(g))-abs(sum(g*y)/float(sum(g)))**2
vxe=sum(g.*abs(x).^2)/sum(g)-abs(sum(g.*x)/sum(g))^2
vye=sum(g.*abs(y).^2)/sum(g)-abs(sum(g.*y)/sum(g))^2
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über Slotkorrelation (ohne koinzidente Produkte) Ryx,k=Ryx(τk)=Rxy*(τk)=i=0N1j=0N1bk(tjti)gigjxi*yji=0N1j=0N1bk(tjti)gigj
bk(t)={1falls 0<|t|<Δt/20sonst
τk=kΔt
k=K/2(K1)/2
K<2T/Δt
Syx,j=Syx(fj)=ΔtFFT{Ryx,k}=Δtk=K/2(K1)/2Ryx,k𝐞2π𝐢jk/K
(imaginäre Einheit 𝐢)
fj=jKΔt
j=K/2(K1)/2
from numpy.fft import *
N=len(t)
dt=1.0
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
R1=zeros(K)+0j
R0=zeros(K)
i=0
jb=i
while i<N:
  j=jb
  while (jb<N) and (t[jb]<t[i]+((K-1)//2+0.5)*dt):
    jb+=1
  
  j=jb-1
  while (j>=0) and (t[j]>t[i]-(K//2+0.5)*dt):
    k=int(round((t[j]-t[i])/float(dt)))
    R1[k]+=g[i]*g[j]*conj(x[i])*y[j]
    R0[k]+=g[i]*g[j]
    j-=1
  
  i+=1

Ryx=R1/R0
plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
R1=zeros(1,K)+0j;
R0=zeros(1,K);
i=2;
jb=i;
while i<=N
j=jb;
while (jb<=N) && (t(jb)<t(i)+(fix((K-1)/2)+0.5)*dt)
jb=jb+1;
end
j=jb-1;
while (j>0) && (t(j)>t(i)-(fix(K/2)+0.5)*dt)
k=round((t(j)-t(i))/dt);
R1(mod(K+k,K)+1)=R1(mod(K+k,K)+1)+g(i)*g(j)*conj(x(i))*y(j);
R0(mod(K+k,K)+1)=R0(mod(K+k,K)+1)+g(i)*g(j);
j=j-1;
end
i=i+1;
end
Ryx=R1./R0;
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über Slotkorrelation (ohne koinzidente Produkte, mit lokaler Normierung) Ryx,k=Ryx(τk)=Rxy*(τk)=[i=0N1j=0N1bk(tjti)gigj(xix)*(yjy)]sx2sy2[i=0N1j=0N1bk(tjti)gigj|xix|2][i=0N1j=0N1bk(tjti)gigj|yjy|2]+x*y
bk(t)={1falls 0<|t|<Δt/20sonst
τk=kΔt
k=K/2(K1)/2
K<2T/Δt
Syx,j=Syx(fj)=ΔtFFT{Ryx,k}=Δtk=K/2(K1)/2Ryx,k𝐞2π𝐢jk/K
(imaginäre Einheit 𝐢)
fj=jKΔt
j=K/2(K1)/2
from numpy.fft import *
N=len(t)
dt=1.0
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
mxe=sum(g*x)/float(sum(g))
mye=sum(g*y)/float(sum(g))
vxe=sum(g*abs(x)**2)/float(sum(g))-abs(sum(g*x)/float(sum(g)))**2
vye=sum(g*abs(y)**2)/float(sum(g))-abs(sum(g*y)/float(sum(g)))**2
R1=zeros(K)+0j
R2=zeros(K)
R3=zeros(K)
i=0
jb=i
while i<N:
  j=jb
  while (jb<N) and (t[jb]<t[i]+((K-1)//2+0.5)*dt):
    jb+=1
  
  j=jb-1
  while (j>=0) and (t[j]>t[i]-(K//2+0.5)*dt):
    k=int(round((t[j]-t[i])/float(dt)))
    R1[k]+=g[i]*g[j]*conj(x[i]-mxe)*(y[j]-mye)
    R2[k]+=g[i]*g[j]*abs(x[i]-mxe)**2
    R3[k]+=g[i]*g[j]*abs(y[j]-mye)**2
    j-=1
  
  i+=1

Ryx=sqrt(vxe*vye)*R1/sqrt(R2*R3)+conj(mxe)*mye
plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
mxe=sum(g.*x)/sum(g);
mye=sum(g.*y)/sum(g);
vxe=sum(g.*abs(x).^2)/sum(g)-abs(sum(g.*x)/sum(g))^2;
vye=sum(g.*abs(y).^2)/sum(g)-abs(sum(g.*y)/sum(g))^2;
R1=zeros(1,K)+0j;
R2=zeros(1,K);
R3=zeros(1,K);
i=2;
jb=i;
while i<=N
j=jb;
while (jb<=N) && (t(jb)<t(i)+(fix((K-1)/2)+0.5)*dt)
jb=jb+1;
end
j=jb-1;
while (j>0) && (t(j)>t(i)-(fix(K/2)+0.5)*dt)
k=round((t(j)-t(i))/dt);
R1(mod(K+k,K)+1)=R1(mod(K+k,K)+1)+g(i)*g(j)*conj(x(i)-mxe)*(y(j)-mye);
R2(mod(K+k,K)+1)=R2(mod(K+k,K)+1)+g(i)*g(j)*abs(x(i)-mxe)^2;
R3(mod(K+k,K)+1)=R3(mod(K+k,K)+1)+g(i)*g(j)*abs(y(j)-mye)^2;
j=j-1;
end
i=i+1;
end
Ryx=sqrt(vxe*vye)*R1./sqrt(R2.*R3)+conj(mxe)*mye;
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über direkte Spektralschätzung (Fourier-Transformation, mit Abzug der koinzidenten Produkte, ohne Normierung) Eyx,j=Eyx(fj)=T2Xj*Yji=0N1gi2xi*yi(i=0N1gi)2i=0N1gi2
Xj=i=0N1gixi𝐞2π𝐢fjti
Yj=i=0N1giyi𝐞2π𝐢fjti
(imaginäre Einheit 𝐢)
fj=jJΔt
j=J/2(J1)/2
J2T/Δt
RE,yx,k=RE,yx(τk)=1ΔtIFFT{Eyx,j}=1JΔtj=J/2(J1)/2Eyx,j𝐞2π𝐢fjτk/J
Ryx,k=Ryx(τk)=Rxy*(τk)=RE,yx,kT|τk|
τk=kΔt
k=K/2(K1)/2
K<2T/Δt
Syx,j=Syx(fj)=ΔtFFT{Ryx,k}=Δtk=K/2(K1)/2Ryx,k𝐞2π𝐢jk/K
fj=jKΔt
j=K/2(K1)/2
from numpy.fft import *
N=len(t)
dt=1.0
J=int(ceil(2*T/float(dt)))
fp=roll(arange(-(J//2),(J+1)//2)/float(J*dt),(J+1)//2)
X=zeros(size(fp))+0j
Y=zeros(size(fp))+0j
for i in range(0,N):
  X+=g[i]*x[i]*exp(-2j*pi*fp*t[i])
  Y+=g[i]*y[i]*exp(-2j*pi*fp*t[i])

Eyx=T**2*(conj(X)*Y-sum(g**2*conj(x)*y))/float(sum(g)**2-sum(g**2))
REyx=ifft(Eyx)/float(dt)
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
Ryx=zeros(K)+0j
for k in range(-(K//2),(K+1)//2):
  Ryx[k]=REyx[k]/float(T-abs(tau[k]))

plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
J=ceil(2*T/dt);
fp=circshift((-fix(J/2):fix((J-1)/2))/(J*dt),[0;fix((J+1)/2)]);
X=zeros(size(fp))+0j;
Y=zeros(size(fp))+0j;
for i=1:N
X=X+g(i)*x(i)*exp(-2j*pi*fp*t(i));
Y=Y+g(i)*y(i)*exp(-2j*pi*fp*t(i));
end
Eyx=T^2*(conj(X).*Y-sum(g.^2.*conj(x).*y))/(sum(g)^2-sum(g.^2));
REyx=ifft(Eyx)/dt;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
Ryx=zeros([1,K])+0j;
for k=-fix(K/2):fix((K-1)/2)
Ryx(mod(k+K,K)+1)=REyx(mod(k+length(REyx),length(REyx))+1)/(T-abs(tau(mod(k+K,K)+1)));
end
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über direkte Spektralschätzung (Fourier-Transformation, mit Abzug der koinzidenten Produkte, mit Normierung) Eyx,j=Eyx(fj)=T2Xj*Yji=0N1gi2xi*yiX02i=0N1gi2
Eyx,j=Eyx(fj)=T2|Xj|2i=0N1gi2X02i=0N1gi2
Xj=i=0N1gixi𝐞2π𝐢fjti
Yj=i=0N1giyi𝐞2π𝐢fjti
Xj=i=0N1gi𝐞2π𝐢fjti
(imaginäre Einheit 𝐢)
fj=jJΔt
j=J/2(J1)/2
J2T/Δt
RE,yx,k=RE,yx(τk)=1ΔtIFFT{Eyx,j}=1JΔtj=J/2(J1)/2Eyx,j𝐞2π𝐢fjτk/J
RE,yx,k=RE,yx(τk)=1ΔtIFFT{Eyx,j}=1JΔtj=J/2(J1)/2Eyx,j𝐞2π𝐢fjτk/J
Ryx,k=Ryx(τk)=Rxy*(τk)=RE,yx,kRE,yx,k
τk=kΔt
k=K/2(K1)/2
K<2T/Δt
Syx,j=Syx(fj)=ΔtFFT{Ryx,k}=Δtk=K/2(K1)/2Ryx,k𝐞2π𝐢jk/K
fj=jKΔt
j=K/2(K1)/2
from numpy.fft import *
N=len(t)
dt=1.0
J=int(ceil(2*T/float(dt)))
fp=roll(arange(-(J//2),(J+1)//2)/float(J*dt),(J+1)//2)
X=zeros(size(fp))+0j
Y=zeros(size(fp))+0j
Xp=zeros(size(fp))+0j
for i in range(0,N):
  X+=g[i]*x[i]*exp(-2j*pi*fp*t[i])
  Y+=g[i]*y[i]*exp(-2j*pi*fp*t[i])
  Xp+=g[i]*exp(-2j*pi*fp*t[i])

Eyx=T**2*(conj(X)*Y-sum(g**2*conj(x)*y))/(abs(Xp[0])**2-sum(g**2))
Eyxp=T**2*(abs(Xp)**2-sum(g**2))/(abs(Xp[0])**2-sum(g**2))
REyx=ifft(Eyx)/float(dt)
REyxp=real(ifft(Eyxp))/float(dt)
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
Ryx=zeros(K)+0j
for k in range(-(K//2),(K+1)//2):
  Ryx[k]=REyx[k]/float(REyxp[k])

plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
J=ceil(2*T/dt);
fp=circshift((-fix(J/2):fix((J-1)/2))/(J*dt),[0;fix((J+1)/2)]);
X=zeros(size(fp))+0j;
Y=zeros(size(fp))+0j;
Xp=zeros(size(fp))+0j;
for i=1:N
X=X+g(i)*x(i)*exp(-2j*pi*fp*t(i));
Y=Y+g(i)*y(i)*exp(-2j*pi*fp*t(i));
Xp=Xp+g(i)*exp(-2j*pi*fp*t(i));
end
Eyx=T^2*(conj(X).*Y-sum(g.^2.*conj(x).*y))/(abs(Xp(1))^2-sum(g.^2));
Eyxp=T^2*(abs(Xp).^2-sum(g.^2))/(abs(Xp(1))^2-sum(g.^2));
REyx=ifft(Eyx)/dt;
REyxp=real(ifft(Eyxp))/dt;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
Ryx=zeros([1,K])+0j;
for k=-fix(K/2):fix((K-1)/2)
Ryx(mod(k+K,K)+1)=REyx(mod(k+length(REyx),length(REyx))+1)/REyxp(mod(k+length(REyxp),length(REyxp))+1);
end
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über direkte Spektralschätzung (Fourier-Transformation, mit Abzug der koinzidenten Produkte, mit lokaler Normierung) Eyx,j=Eyx(fj)=T2Xj*Yji=0N1gi2(xix)*(yiy)X02i=0N1gi2
Eyx,j=Eyx(fj)=T2Xj*Xji=0N1gi2|xix|2X02i=0N1gi2
Eyx,j=Eyx(fj)=T2Xj*Yji=0N1gi2|yiy|2X02i=0N1gi2
Xj=i=0N1gi(xix)𝐞2π𝐢fjti
Yj=i=0N1gi(yiy)𝐞2π𝐢fjti
Xj=i=0N1gi𝐞2π𝐢fjti
Xj=i=0N1gi|xix|2𝐞2π𝐢fjti
Yj=i=0N1gi|yiy|2𝐞2π𝐢fjti
(imaginäre Einheit 𝐢)
fj=jJΔt
j=J/2(J1)/2
J2T/Δt
RE,yx,k=RE,yx(τk)=1ΔtIFFT{Eyx,j}=1JΔtj=J/2(J1)/2Eyx,j𝐞2π𝐢fjτk/J
RE,yx,k=RE,yx(τk)=1ΔtIFFT{Eyx,j}=1JΔtj=J/2(J1)/2Eyx,j𝐞2π𝐢fjτk/J
RE,yx,k=RE(τk)=1ΔtIFFT{Eyx,j}=1JΔtj=J/2(J1)/2Eyx,j𝐞2π𝐢fjτk/J
Ryx,k=Ryx(τk)=Rxy*(τk)=RE,yx,ksx2sy2RE,yx,kRE,yx,k+x*y
τk=kΔt
k=K/2(K1)/2
K<2T/Δt
Syx,j=Syx(fj)=ΔtFFT{Ryx,k}=Δtk=K/2(K1)/2Ryx,k𝐞2π𝐢jk/K
fj=jKΔt
j=K/2(K1)/2
from numpy.fft import *
N=len(t)
dt=1.0
mxe=sum(g*x)/float(sum(g))
mye=sum(g*y)/float(sum(g))
vxe=sum(g*abs(x)**2)/float(sum(g))-abs(sum(g*x)/float(sum(g)))**2
vye=sum(g*abs(y)**2)/float(sum(g))-abs(sum(g*y)/float(sum(g)))**2
J=int(ceil(2*T/float(dt)))
fp=roll(arange(-(J//2),(J+1)//2)/float(J*dt),(J+1)//2)
X=zeros(size(fp))+0j
Y=zeros(size(fp))+0j
Xp=zeros(size(fp))+0j
Xpp=zeros(size(fp))+0j
Ypp=zeros(size(fp))+0j
for i in range(0,N):
  X+=g[i]*(x[i]-mxe)*exp(-2j*pi*fp*t[i])
  Y+=g[i]*(y[i]-mye)*exp(-2j*pi*fp*t[i])
  Xp+=g[i]*exp(-2j*pi*fp*t[i])
  Xpp+=g[i]*abs(x[i]-mxe)**2*exp(-2j*pi*fp*t[i])
  Ypp+=g[i]*abs(y[i]-mxe)**2*exp(-2j*pi*fp*t[i])

Eyx=T**2*(conj(X)*Y-sum((g*conj(x-mxe)*(y-mye)))/(abs(Xp[0])**2-sum(g**2))
Eyxp=T**2*(conj(Xpp)*Xp-sum((g*abs(x-mxe))**2))/(abs(Xp[0])**2-sum(g**2))
Eyxpp=T**2*(conj(Xp)*Ypp-sum((g*abs(y-mye))**2))/(abs(Xp[0])**2-sum(g**2))
REyx=ifft(Eyx)/float(dt)
REyxp=real(ifft(Eyxp))/float(dt)
REyxpp=real(ifft(Eyxpp))/float(dt)
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
Ryx=zeros(K)+0j
for k in range(-(K//2),(K+1)//2):
  Ryx[k]=sqrt(vxe*vye)*REyx[k]/sqrt(REyxp[k]*REyxpp[k])+conj(mxe)*mye

plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
mxe=sum(g.*x)/sum(g);
mye=sum(g.*y)/sum(g);
vxe=sum(g.*abs(x).^2)/sum(g)-abs(sum(g.*x)/sum(g))^2;
vye=sum(g.*abs(y).^2)/sum(g)-abs(sum(g.*y)/sum(g))^2;
J=ceil(2*T/dt);
fp=circshift((-fix(J/2):fix((J-1)/2))/(J*dt),[0;fix((J+1)/2)]);
X=zeros(size(fp))+0j;
Y=zeros(size(fp))+0j;
Xp=zeros(size(fp))+0j;
Xpp=zeros(size(fp))+0j;
Ypp=zeros(size(fp))+0j;
for i=1:N
X=X+g(i)*(x(i)-mxe)*exp(-2j*pi*fp*t(i));
Y=Y+g(i)*(y(i)-mye)*exp(-2j*pi*fp*t(i));
Xp=Xp+g(i)*exp(-2j*pi*fp*t(i));
Xpp=Xpp+g(i)*abs(x(i)-mxe)^2*exp(-2j*pi*fp*t(i));
Ypp=Ypp+g(i)*abs(y(i)-mye)^2*exp(-2j*pi*fp*t(i));
end
Eyx=T^2*(conj(X).*Y-sum(g.^2.*conj(x-mxe).*(y-mye)))/(abs(Xp(1))^2-sum(g.^2));
Eyxp=T^2*(conj(Xpp).*Xp-sum((g.*abs(x-mxe)).^2))/(abs(Xp(1))^2-sum(g.^2));
Eyxpp=T^2*(conj(Xp).*Ypp-sum((g.*abs(y-mye)).^2))/(abs(Xp(1))^2-sum(g.^2));
REyx=ifft(Eyx)/dt;
REyxp=real(ifft(Eyxp))/dt;
REyxpp=real(ifft(Eyxpp))/dt;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
Ryx=zeros([1,K])+0j;
for k=-fix(K/2):fix((K-1)/2)
Ryx(mod(k+K,K)+1)=sqrt(vxe*vye)*REyx(mod(k+length(REyx),length(REyx))+1)/sqrt(REyxp(mod(k+length(REyxp),length(REyxp))+1)*REyxpp(mod(k+length(REyxpp),length(REyxpp))+1))+conj(mxe)*mye;
end
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
(keine Lomb-Scargle-Methode für Kreuzspektren in Matlab und Python)
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über Zeitquantisierung (mit Abzug der koinzidenten Produkte, ohne Normierung)
from numpy.fft import *
N=len(t)
dt=1.0
J=int(ceil(2*T/float(dt)))
x1=zeros(J)+0j
y1=zeros(J)+0j
for i in range(0,N):
  j=int(floor((t[i]-T*floor(t[i]/float(T)))/float(dt)))
  x1[j]+=g[i]*x[i];
  y1[j]+=g[i]*y[i];

X=fft(x1)
Y=fft(y1)
Eyx=T**2*(conj(X)*Y-sum(g**2*conj(x)*y))/float(sum(g)**2-sum(g**2))
REyx=ifft(Eyx)/float(dt)
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
Ryx=zeros(K)+0j
for k in range(-(K//2),(K+1)//2):
  Ryx[k]=REyx[k]/float(T-abs(tau[k]))

plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
J=ceil(2*T/dt);
x1=zeros([1,J])+0j;
y1=zeros([1,J])+0j;
for i=1:N
j=fix((t(i)-T*fix(t(i)/T))/dt)+1;
x1(j)=x1(j)+g(i)*x(i);
y1(j)=y1(j)+g(i)*y(i);
end
X=fft(x1);
Y=fft(y1);
Eyx=T^2*(conj(X).*Y-sum(g.^2.*conj(x).*y))/(sum(g)^2-sum(g.^2));
REyx=ifft(Eyx)/dt;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
Ryx=zeros([1,K])+0j;
for k=-fix(K/2):fix((K-1)/2)
Ryx(mod(k+K,K)+1)=REyx(mod(k+length(REyx),length(REyx))+1)/(T-abs(tau(mod(k+K,K)+1)));
end
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über Zeitquantisierung (mit Abzug der koinzidenten Produkte, mit Normierung)
from numpy.fft import *
N=len(t)
dt=1.0
J=int(ceil(2*T/float(dt)))
x0=zeros(J)
x1=zeros(J)+0j
y1=zeros(J)+0j
for i in range(0,N):
  j=int(floor((t[i]-T*floor(t[i]/float(T)))/float(dt)))
  x0[j]+=g[i];
  x1[j]+=g[i]*x[i];
  y1[j]+=g[i]*y[i];

X=fft(x1)
Y=fft(y1)
Xp=fft(x0)
Eyx=T**2*(conj(X)*Y-sum(g**2*conj(x)*y))/(abs(Xp[0])**2-sum(g**2))
Eyxp=T**2*(abs(Xp)**2-sum(g**2))/(abs(Xp[0])**2-sum(g**2))
REyx=ifft(Eyx)/float(dt)
REyxp=real(ifft(Eyxp))/float(dt)
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
Ryx=zeros(K)+0j
for k in range(-(K//2),(K+1)//2):
  Ryx[k]=REyx[k]/float(REyxp[k])

plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
J=ceil(2*T/dt);
x0=zeros([1,J]);
x1=zeros([1,J])+0j;
y1=zeros([1,J])+0j;
for i=1:N
j=fix((t(i)-T*fix(t(i)/T))/dt)+1;
x0(j)=x0(j)+g(i);
x1(j)=x1(j)+g(i)*x(i);
y1(j)=y1(j)+g(i)*y(i);
end
X=fft(x1);
Y=fft(y1);
Xp=fft(x0);
Eyx=T^2*(conj(X).*Y-sum(g.^2.*conj(x).*y))/(abs(Xp(1))^2-sum(g.^2));
Eyxp=T^2*(abs(Xp).^2-sum(g.^2))/(abs(Xp(1))^2-sum(g.^2));
REyx=ifft(Eyx)/dt;
REyxp=real(ifft(Eyxp))/dt;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
Ryx=zeros([1,K])+0j;
for k=-fix(K/2):fix((K-1)/2)
Ryx(mod(k+K,K)+1)=REyx(mod(k+length(REyx),length(REyx))+1)/REyxp(mod(k+length(REyxp),length(REyxp))+1);
end
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
Kreuzkorrelationsfunktion und Kreuzleistungsdichtespektrum über Zeitquantisierung (mit Abzug der koinzidenten Produkte, mit lokaler Normierung)
from numpy.fft import *
N=len(t)
dt=1.0
mxe=sum(g*x)/float(sum(g))
mye=sum(g*y)/float(sum(g))
vxe=sum(g*abs(x)**2)/float(sum(g))-abs(sum(g*x)/float(sum(g)))**2
vye=sum(g*abs(y)**2)/float(sum(g))-abs(sum(g*y)/float(sum(g)))**2
J=int(ceil(2*T/float(dt)))
x0=zeros(J)
x1=zeros(J)+0j
y1=zeros(J)+0j
x2=zeros(J)
y2=zeros(J)
for i in range(0,N):
  j=int(floor((t[i]-T*floor(t[i]/float(T)))/float(dt)))
  x0[j]+=g[i];
  x1[j]+=g[i]*(x[i]-mxe);
  y1[j]+=g[i]*(y[i]-mye);
  x2[j]+=g[i]*abs(x[i]-mxe)**2;
  y2[j]+=g[i]*abs(y[i]-mye)**2;

X=fft(x1)
Y=fft(y1)
Xp=fft(x0)
Xpp=fft(x2)
Ypp=fft(y2)
Eyx=T**2*(conj(X)*Y-sum(g**2*conj(x-mxe)*(y-mye)))/(abs(Xp[0])**2-sum(g**2))
Eyxp=T**2*(conj(Xpp)*Xp-sum((g*abs(x-mxe))**2))/(abs(Xp[0])**2-sum(g**2))
Eyxpp=T**2*(conj(Xp)*Ypp-sum((g*abs(y-mye))**2))/(abs(Xp[0])**2-sum(g**2))
REyx=ifft(Eyx)/float(dt)
REyxp=real(ifft(Eyxp))/float(dt)
REyxpp=real(ifft(Eyxpp))/float(dt)
K=200
K=minimum(int(ceil(2*T/float(dt)))-1,K)
tau=roll(arange(-(K//2),(K+1)//2)*dt,(K+1)//2)
Ryx=zeros(K)+0j
for k in range(-(K//2),(K+1)//2):
  Ryx[k]=sqrt(vxe*vye)*REyx[k]/sqrt(REyxp[k]*REyxpp[k])+conj(mxe)*mye

plot(tau,real(Ryx),'o',arange(-5*K,5*K)*dt/10.0,cc*sqrt(vxs*vys)*exp(-abs(arange(-5*K,5*K)*dt/10.0/float(Ti)))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
show()
f=roll(arange(-(K//2),(K+1)//2)/float(K*dt),(K+1)//2)
Syx=dt*fft(Ryx)
p1=1-dt/float(Ti)
loglog(f,real(Syx),'o',arange(1,5*K)/float(10*K*dt),cc*sqrt(vxs*vys)*(1-p1**2)*dt/(1+p1**2-2*p1*cos(2*pi*arange(1,5*K)/float(10*K*dt)*dt)),f,imag(Syx),'o')
show()
N=length(t);
dt=1.0;
mxe=sum(g.*x)/sum(g);
mye=sum(g.*y)/sum(g);
vxe=sum(g.*abs(x).^2)/sum(g)-abs(sum(g.*x)/sum(g))^2;
vye=sum(g.*abs(y).^2)/sum(g)-abs(sum(g.*y)/sum(g))^2;
J=ceil(2*T/dt);
x0=zeros([1,J]);
x1=zeros([1,J])+0j;
y1=zeros([1,J])+0j;
x2=zeros([1,J]);
y2=zeros([1,J]);
for i=1:N
j=fix((t(i)-T*fix(t(i)/T))/dt)+1;
x0(j)=x0(j)+g(i);
x1(j)=x1(j)+g(i)*(x(i)-mxe);
y1(j)=y1(j)+g(i)*(y(i)-mye);
x2(j)=x2(j)+g(i)*abs(x(i)-mxe)^2;
y2(j)=y2(j)+g(i)*abs(y(i)-mye)^2;
end
X=fft(x1);
Y=fft(y1);
Xp=fft(x0);
Xpp=fft(x2);
Ypp=fft(y2);
Eyx=T^2*(conj(X).*Y-sum(g.^2.*conj(x-mxe).*(y-mye)))/(abs(Xp(1))^2-sum(g.^2));
Eyxp=T^2*(conj(Xpp).*Xp-sum((g.*abs(x-mxe)).^2))/(abs(Xp(1))^2-sum(g.^2));
Eyxpp=T^2*(conj(Xp).*Ypp-sum((g.*abs(y-mye)).^2))/(abs(Xp(1))^2-sum(g.^2));
REyx=ifft(Eyx)/dt;
REyxp=real(ifft(Eyxp))/dt;
REyxpp=real(ifft(Eyxpp))/dt;
K=200;
K=min(ceil(2*T/dt)-1,K);
tau=circshift((-fix(K/2):fix((K-1)/2))*dt,[0;fix((K+1)/2)]);
Ryx=zeros([1,K])+0j;
for k=-fix(K/2):fix((K-1)/2)
Ryx(mod(k+K,K)+1)=sqrt(vxe*vye)*REyx(mod(k+length(REyx),length(REyx))+1)/sqrt(REyxp(mod(k+length(REyxp),length(REyxp))+1)*REyxpp(mod(k+length(REyxpp),length(REyxpp))+1))+conj(mxe)*mye;
end
plot(tau,real(Ryx),'o',(-5*K:5*K)*dt/10,cc*sqrt(vxs*vys)*exp(-abs((-5*K:5*K)*dt/10/Ti))+real(conj(mxs)*mys),tau,imag(Ryx),'o')
f=circshift((-fix(K/2):fix((K-1)/2))/(K*dt),[0;fix((K+1)/2)]);
Syx=dt*fft(Ryx);
p1=1-dt/Ti;
loglog(f,real(Syx),'o',(1:5*K)/(10*K*dt),cc*sqrt(vxs*vys)*(1-p1^2)*dt./(1+p1^2-2*p1*cos(2*pi*(1:5*K)/(10*K*dt)*dt)),f,imag(Syx),'o')
(keine Gewichtung für Interpolation)