模拟高斯分数噪声

时间:2021-07-12 17:54:41

标签: python random fft gaussian-process covariance-matrix

我正在尝试使用以下代码生成高斯分数噪声:

#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()

但是,在特征分解之后,我找到了分数高斯噪声的累积总和:

enter image description here

这显然不是分数布朗运动,它应该是静止的,赫斯特参数为 0.10。代码有什么问题?

更新
当我通过 CVC* 重新组合循环矩阵时,C* 是逆特征向量矩阵,我发现它给出了原始循环矩阵的转置。

0 个答案:

没有答案