レギュラー・イレギュラー サンプリング

  • ここの話しの続き
  • 資料はこちら
  • 総期間T、サンプル数N、サンプル番号n=0,1,...,N-1、サンプリング時刻t_0,t_1,...,t_{N-1}(Regular samplingの場合はt_n=\frac{n}{T})、時刻t_nでの観測値p_n
  • j虚数単位
    • Regular sampling
      • P(m)=\sum_{n=0}^{N-1} p_n e^{-j\frac{2\pi}{N}m n
    • IRRegular sampling
      • P(m)=\sum_{n=0}^{N-1} p_n e^{-j\frac{2\pi}{T}m t_n
  • 2式の違いを強調した表示
    • Regular sampling
      • P(m)=\sum_{n=0}^{N-1} p_n e^{-j2\pi m \Huge{\frac{n}{N}}
    • IRRegular sampling
      • P(m)=\sum_{n=0}^{N-1} p_n e^{-j2 \pi m \Huge{\frac{t_n}{T}}
  • Regular sampling
fourier.reg.disc<-function(ps,m=NULL,inverse=FALSE){
	x<-1
	v<-1

	
	J<-complex(real=0,imaginary=1)
	n<-length(ps)
	if(is.null(m)){
		m<-0:(n-1)
	}
	if(inverse){
		x<--1
		v<-n
	}

	ret<-rep(0,length(m))
	for(i in 1:length(m)){
		for(j in 1:n){
			#print(j/n)
			ret[i]<-ret[i]+ps[j]*exp(-x*J*2*pi*(m[i])*(j-1)/n)
		}
	}
	ret/v
}
fft(fft(1:4),inverse=TRUE)/4
fourier.reg.disc(fourier.reg.disc(1:4),inverse=TRUE)
  • irregular sampling
fourier.irreg.disc<-function(ps,ts,m=NULL,inverse=FALSE){
	x<-1
	v<-1

	J<-complex(real=0,imaginary=1)
	#tw<-max(ts)-min(ts)
	tw<-ts[length(ts)]
	n<-length(ps)
	if(is.null(m)){
		m<-0:(n-1)
	}
	if(inverse){
		x<--1
		v<-n
	}

	ret<-rep(0,length(m))
	for(i in 1:length(m)){
		for(j in 1:n){
			#print(ts[j]/tw)
			#ret[i]<-ret[i]+ps[j]*exp(-x*J*2*pi*(m[i])*(1-(max(ts)-ts[j])/tw))
			#ret[i]<-ret[i]+ps[j]*exp(-x*J*2*pi*(m[i])*(ts[j]-min(ts))/tw)
			ret[i]<-ret[i]+ps[j]*exp(-x*J*2*pi*(m[i])*(ts[j]-ts[1])/tw)
		}
	}
	ret/v
}
ts<-1:length(ts)
f.irreg.out<-fourier.irreg.disc(ps,ts)
f.reg.out<-fourier.reg.disc(ps)
fft.out<-fft(ps)

f.irreg.out-f.reg.out

f.reg.out-fft.out

fft.out<-fft(ps)

f.irreg.out-fft(ps)
fourier.reg.disc(fourier.reg.disc(1:4),inverse=TRUE)
fourier.irreg.disc(fourier.irreg.disc(1:4,1:4),1:4,inverse=TRUE)
fourier.reg.disc(fourier.irreg.disc(1:4,1:4),inverse=TRUE)