yangysc / Wavelet-HFCM

This repository is the source code for Wavelet-HFCM of the paper 'Time Series Forecasting based on High-Order Fuzzy Cognitive Maps and Wavelet Transform'

Home Page:https://ieeexplore.ieee.org/document/8352858

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于小波变换函数返回值的问题

severous opened this issue · comments

def wavelet_transform(x, J):
    N = len(x)
    C = np.zeros(shape=(J + 1, N))
    # W: wavelet coefficients
    W = np.zeros(shape=(J + 1, N))
    C[0, :] = x.copy()
    for j in range(1, J + 1):
        for k in range(1, N):
            C[j, k] = 1 / 2 * (C[j - 1, k] + C[j - 1, k - np.power(2, j - 1)])
            W[j, k] = C[j - 1][k] - C[j, k]

    W[0, :] = C[J, :]
    return W[:, np.power(2, J):] 

你好,为什么系数在返回时只选取了2^J以后的,这一点让我感觉很疑惑,希望您有时间可以为我解答。十分感谢

你好 , 欢迎对我们的工作感兴趣 ~

你好,为什么系数在返回时只选取了2^J以后的,这一点让我感觉很疑惑,希望您有时间可以为我解答。十分感谢

从小波系数计算过程图 (文中Fig3), 可以看到 N 个节点的HFCM只用到了2^( N -1)个历史时刻点,故如此进行截取。再久远的时刻点的时域信息,通过调整阶数 k 进行利用。

祝好

def wavelet_transform(x, J):
    N = len(x)
    C = np.zeros(shape=(J + 1, N))
    # W: wavelet coefficients
    W = np.zeros(shape=(J + 1, N))
    C[0, :] = x.copy()
    for j in range(1, J + 1):
        for k in range(1, N):
            C[j, k] = 1 / 2 * (C[j - 1, k] + C[j - 1, k - np.power(2, j - 1)])
            W[j, k] = C[j - 1][k] - C[j, k]

    W[0, :] = C[J, :]
    return W[:, np.power(2, J):]