【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码,请转文末观看代码获取方式~

1 基本定义

SSA奇异谱分析(Singular Spectrum Analysis)是一种处理非线性时间序列数据的方法,可以对时间序列进行分析和预测。

它基于构造在时间序列上的特定矩阵的奇异值分解(SVD),可以从一个时间序列中分解出趋势、振荡分量和噪声。

具体流程如下:

  1. 根据原始时间序列构建轨迹矩阵X XX。

  2. 对矩阵X进行奇异值分解:X = ∑ i = 1 r σ i U i V i T X=\sum_{i=1}^{r} \sigma_i U_i V_{i}^TX=∑i=1r​σi​Ui​ViT​ 。

  3. 按奇异值生成r rr个子矩阵:X i = σ i U i V i T X_i = \sigma_i U_i V_{i}^TXi​=σi​Ui​ViT​ 。

  4. 根据某一分组原则将子矩阵X i X_iXi​分为m mm个组。

  5. 对子矩阵X i X_iXi​进行对角均值化处理得到子序列。

  6. 对m mm个组中的子序列相加得到分组子序列。

以上就是SSA奇异谱分析信号分解算法的基本步骤。

2 出图效果

附出图效果如下:

Toeplitz 法计算的协方差矩阵 C

trajectory法计算的协方差矩阵C

特征值和特征向量示意图

前四大主成分

前四大重构成分

重建和原始时间序列对比

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SSA奇异谱分析)是一种常用的时间序列分析方法,可以用于提取时间序列中的趋势项、周期项、半周期项等有用信息,也可以实现数据的去噪、插值和外推等。下面是一个SSAMatlab代码实现,其中包括对角线平均函数djx1的实现: function [temp,Xi,X4,X5] = djx1(Xi) [L,K] = size(Xi); m=0; if L > K temp = K; K = L; L =temp; Xi =Xi'; m =1; end fi =zeros(1,L+K-1);% 累积对角线的值 fit = zeros(1,L+K-1); %对对角线值个数计数 X3 = zeros(L,K);%对角线累加矩阵 X4 = zeros(L,K);%对角线累加矩阵 X3(1,:) = Xi(1,:); X3(:,K) = Xi(:,K); X4(1,:) = Xi(1,:); X4(:,K) = Xi(:,K); for i=1:L %遍历Xi矩阵所有行数据 for j=1:K % 遍历Xi矩阵所有列数据 fi(1,i+j-1) = fi(1,i+j-1)+Xi(i,j); fit(1,i+j-1) = fit(1,i+j-1)+1; if fit(1,i+j-1)>1 & j+1<=K X3(i,j) =Xi(i,j)+ X3(i-1,j+1) ; % 当前X3(i,j) 为空 X3(i-1,j-1)为上一个累加值 Xi(i,j) 为此处应该的值 X4(i,j) = X3(i,j)/ fit(1,i+j-1) ; end end end temp = fi./fit; % fi % fit % temp for i=1:L %遍历Xi矩阵所有行数据 for j=1:K % 遍历Xi矩阵所有列数据 Xi(i,j) =Xi(i,j)/fit(1,i+j-1) ; end end % 上个步骤只是矩阵中 单个数据的均值 而矩阵转化为一位序列时 为累加的均值 所以如果想通过图观测曲线则应该用累积的均值 % 把曲线数据所对应的均值填回去 X5 = zeros(L,K+1); for i=1:L %遍历Xi矩阵所有行数据 for j=1:K % 遍历Xi矩阵所有列数据 X5(i,j) = temp(1,i+j-1); end end X5(:,K+1) = []; if m == 1 Xi = Xi'; X4 = X4'; X5 = X5'; end 该代码实现了对角线平均函数djx1,其中输入参数Xi为一个矩阵,输出参数temp为累积对角线的均值,X4为对角线累加矩阵,X5为曲线数据所对应的均值。需要注意的是,该代码实现的SSA方法是基于一维时间序列的,如果需要对多维时间序列进行分析,需要进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lwcah(全网各平台账号同名)

您的鼓励是我创作的最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值