我正在尝试使用以下代码生成高斯分数噪声:
#autocovariance of Gaussian Noise
import numpy as np
from scipy.linalg import circulant,eigvals,eig,inv
import matplotlib.pyplot as plt
def autocovG(H,n):
empty_mt = np.zeros(n)
for m in range(n):
empty_mt[m] = (np.abs((m-1)/252)**(2*H) - 2 * np.abs(m/252)**(2*H) + np.abs((m+1)/252)**(2*H))*0.5
return empty_mt
H = 0.10 #Hurst Parameter
first_columns = autocovG(H,1024)
C = circulant(first_columns)
eigen = np.diag(np.fft.fft(first_columns))
eigenv = np.array([[(np.exp((-2*np.pi*1j/eigen.shape[0])*j*k))/eigen.shape[0] for j in range(0,eigen.shape[0])] for k in range(0,eigen.shape[0])])
M = np.dot(eigenv,np.dot(np.sqrt(eigen),inv(eigenv)))
G = np.dot(M,np.random.default_rng().normal(0,scale = 1,size=(1024,1))).real
plt.plot(np.cumsum(G))
plt.show()
然而,在特征分解之后,我发现分数高斯噪声的累积和产生了:
这显然不是分数布朗运动,它应该是静止的,赫斯特参数为 0.10。代码有什么问题?
更新
当我通过 CVC* 重构我的循环矩阵时,C* 是反向特征向量的矩阵,我发现它给出了我原始循环矩阵的转置。