资源简介
基于Python自相关法时间序列的时间延迟计算,用matlab程序翻译成python并修改调试成功,很辛苦的额。
用于混沌系统、故障诊断等的相空间重构中的时间延迟计算。
代码片段和文件信息
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import random
import matplotlib as mpl
import warnings
#混沌时间序列分析源程序
#时间序列的时间延迟计算
def autocorrelation(datatau_max):
“““#data:输入的时间序列
#tau_max:最大时间延迟
#Tau:返回所求时间序列的时间延迟“““
N=len(data)
#时间序列长度
x_mean=np.mean(data)
#时间序列的平均值
data=data-x_mean
SSd=np.dot(datadata)
R_xx=np.zeros((1tau_max))[0]#=zeros(1tau_max)
#自相关函数初始化
for tau in range(0tau_max):#1:tau_max
#计算自相关函数
for ii in range(0N-tau):#1:N-tau
#print(tauiiii+tauN)
R_xx[tau] = R_xx[tau]+data[ii]*data[ii+tau]#
R_xx[tau]=R_xx[tau]/SSd
##end
#print(len(R_xx))
print(R_xx)
#print(np.arange(1tau_max+1))
plt.plot(np.arange(1tau_max+1)R_xx) #plot(1:tau_maxR_xx);
#plt.show()##hold on
#作自相关函数图
plt.plot([1tau_max][00])#line([1tau_max][00])
plt.title(‘自相关法求时间延迟‘)
plt.ylabel(‘自相关函数‘)
plt.xlabel(‘时间延迟‘) ;plt.show()#
Tau=0
#求时间序列的时间延迟
R_tau = list(map(lambda x:x>=0R_xx))
#print(R_tau)
jj = 0;R_jj =R_tau[0]
while jj < tau_max:
jj = jj+1
if R_jj!=R_tau[jj]:
break
tau = jj
#print(‘tau jj:‘tau)
if abs(R_xx[jj-1])>abs(R_xx[jj]):
Tau=Tau+1
#print(‘tau ok:‘tau)
‘‘‘jj = 0
while jj < tau_max:#for jj in range(1tau_max):#2:tau_max
jj = jj+1#print(jj)
Tau=jj;print(Tau)
print(R_xx[jj-1]R_xx[jj]R_xx[jj-1]*R_xx[jj])
if R_xx[jj-1]*R_xx[jj]<=0:
print(jj)
if abs(R_xx[jj-1])>abs(R_xx[jj]):
pass#Tau=jj;print(‘tau1:‘tau) #break
else:
Tau=Tau-1#Tau=jj-1;print(‘tau2:‘tau)#break
print(‘tau:‘tau);break‘‘‘
#end
#end
#end
print(‘tau:‘tau)
return tau
#生成随机数字序列用于测试
def gen_series(n):
result = []
for i in range(n):
t = random.randint(099)#random.uniform(1 10)#random.random()#random.randint(050)#uniform(1 3)
#随机浮点数random.random() #random.uniform(1 10)
#随机字符:random.choice(‘abcdefg#^*f‘)#多个字符中选取特定数量的字符:random.sample(‘abcdefghij‘3)
#随机整数:random.randint(099)#随机选取0到100间的偶数:random.randrange(0 101 2)
result.append(t)
print(result)
return result
if __name__ == “__main__“:
#解决中文的问题
mpl.use(‘TkAgg‘)
mpl.rcParams[‘font.sans-serif‘] = [‘SimHei‘]
mpl.rcParams[‘font.family‘]=‘sans-serif‘
#解决负号‘-‘显示为方块的问题
mpl.rcParams[‘axes.unicode_minus‘] = False
x = gen_series(100)
print(‘autocorrelation:‘)
print(autocorrelation(x20))
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10044356 2008-04-14 20:00 simhei.ttf
文件 3116 2018-02-11 18:06 autocorrelation.py
----------- --------- ---------- ----- ----
10047472 2
评论
共有 条评论