语境
我想在股票数据(例如MSFT stock )上实现(真实)倒谱并实现这个时间序列的倒谱系数。
如“基于倒谱的金融时间序列聚类”中所述,“ (实)倒谱被定义为时间序列傅立叶变换的(实)对数的傅立叶逆变换”。
因此,通过此参考,应采取以下步骤:
- 计算时间序列的傅里叶变换
- 从第 1 步结果中取(实)对数
- 最后计算上一步的傅里叶逆变换
这些是计算时间序列倒谱的步骤。
代码
在 python 中实现这样的过程应该不难:
# Import Packages
from scipy.fft import rfft , irfft
import numpy as np
# pandas_datareader for reading MSFT stock data
from pandas_datareader import data as web
# ------------------------------------------
# read MSFT stock data and store it as pandas.DataFrame
df = pd.DataFrame(web.get_data_yahoo('MSFT' , start='01-03-2013' , end='12-06-2018')['Adj Close'])
# ------------------------------------------
# define a function to calculate cepstrum of time series
def cepstrum(x: np.array):
"""
This Function calculate cepstrum of a time series
"""
return irfft(np.log(rfft(x)))
# ------------------------------------------
# run cepstrum function
cepstrum(df['Adj Close'].to_numpy())
输出:
array([-0.86680682, -0.0558877 , -0.03134206, ..., -0.01719479, 0.01535661, -0.00099603])
正如我一开始所说,我想实现倒谱系数。我认为倒谱系数是时间序列傅里叶变换的(实)对数的傅里叶逆变换的系数。那么我怎样才能抓住这个过程的系数呢?irfft(np.log(rfft(x)))例如,我想获取此过程的前 5 个系数。但我不知道如何访问它们!因为scipy在后台做事!
附加说明:
如“基于倒谱的金融时间序列聚类”中所述:
倒谱分析是一种非线性信号处理技术。( 实)倒谱定义为时间序列傅里叶变换的(实)对数的傅里叶逆变换。为了定义倒谱,我们将首先考虑自回归移动平均 (ARMA) 过程。特别是 ARMA(p, q) 过程定义为:
其中 ,r = 1, 2, . . . . p 是自回归 (AR) 参数,,r = 1, 2, 。. . , q 是移动平均 (MA) 参数,而是白噪声过程。ARMA(p, q) 过程的谱密度定义为:
其中是的方差。估计的谱密度函数的对数可以使用对数谱密度函数的指数形式来近似,即:
其中 0 < <,其中 r2 和, . . . , 是未知参数。Savvides 等人。(2008) 介绍了对数谱密度函数的对数的以下近似,即对数谱密度函数的谱,的倒谱。
其中 =是白噪声过程的方差的对数。在 log\lambda_x(\omega) 的 (0,1) 上的绝对可积性下,的傅里叶系数 定义为:
对于 k = 0, 1, 2, . . . 和被称为倒谱系数。由于 的均方随着的增加而收敛,因此只有少数倒谱系数可以描述时间序列的二阶特征。
我不熟悉信号处理知识。所以有可能我推断出整个过程有问题。任何帮助,将不胜感激。




