三角関数の和と積

  • 周期の異なる波を足し合わせると「うなる」(Wiki「うなり」)
    • \sin(w_1t)+\sin(w_2t)=2\sin(\frac{w_1+w_2}{2} t)\cos(\frac{w_1-w_2}{2} t)
      • 等式の右辺(2つの周期関数の積)は、周期的に振幅が変化しつつ、全体も周期的に変化する、という式に読める
  • うなりの幾何学パターンは「モアレ」(Wikiの「モアレ」)
  • 1変数でうならせる
w<-10
delta<-runif(1)*0.1
n<-1
cycle<-10
t<-seq(from=0,to=1,length.out=10000)*2*pi*cycle
x<-matrix(0,length(t),n)

phase<-runif(n)*2*pi
r<-sample(2:5,1)
for(i in 1:n){
	x[,i]<-r*sin((w-delta)*(t+phase[i]))+sin((w+delta)*(t+phase[i]))
}

plot(x[,1],type="l")
  • 複数の要素がサイクルを構成している
  • サイクルは2か所で相互に独立して回っている
  • サイクルは同様なので、そこには「共通する」周期がある
  • ただし、2つのサイクルは、異なる条件で回っているので、「共通するサイクル」から、少しずれる
  • そんなとき、サイクルの要素が描く要素数次元空間の軌道もうなる
  • そのうなり(周期的に変化しつつ、その振幅が周期的に変化する)は3項目について描けばトーラスになる
  • 「共通するサイクル」からのずれが一定ならば、トーラス上のきれいならせん。ずれが変動すれば、トーラス上の酔歩状の動きになる
library(rgl)
library(gtools)
library(MCMCpack)
# 共通周期
w<-100
# ずれの大きさを調整する変数
k<-10
# 変数の数
n<-5
cycle<-10
t<-seq(from=0,to=1,length.out=10000)*2*pi*cycle
# 周期のずれが、時系列で変動し続ける場合
#delta<-runif(length(t))*w/k
# 周期のずれは、「基本ずれ」とそこからの変動とで構成されるとする場合
delta<-runif(1)*w/k+rnorm(length(t))*0.01

x<-matrix(0,length(t),n)

# 複数変数が周期をなすが、変数の周期上の位相を定める
# ランダムに定める
#phase<-runif(n)*2*pi
phase<-c(rdirichlet(1,rep(1,n)))*2*pi
# 均等割りで位相を定める
#phase<-1/(1:n)*2*pi
# 2つのサイクルには、大小がある

r<-sample(2:5,1)
# r<-runif(1)*5
for(i in 1:n){
	x[,i]<-r*sin((w-delta)*(t+phase[i]))+sin((w+delta)*(t+phase[i]))
}



cmb<-combinations(n,3)
xw<-NULL
col<-c()
for(i in 1:length(cmb[,1])){
	ax<-cmb[i,]
	#open3d()
	#plot3d(x[,ax[1]],x[,ax[2]],x[,ax[3]],col=gray((1:length(t))/length(t)))
	col<-c(col,rep(i,length(x[,1])))
	xw<-rbind(xw,cbind(x[,ax[1]],x[,ax[2]],x[,ax[3]]))
}

plot3d(xw[,1],xw[,2],xw[,3],col=col)


plot(as.data.frame(x))
matplot(x,type="l")