导航:首页 > 源码编译 > ssa的简便算法

ssa的简便算法

发布时间:2025-04-13 10:37:00

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

MATLAB中的SSA奇异谱分析是一种强大的工具,用于非线性时间序列数据的处理和信号分解。该算法通过对时间序列构造特定矩阵进行奇异值分解(SVD),分离出趋势、振荡和噪声成分。

分解流程包括:首先构建协方差矩阵,如通过Toeplitz法和trajectory法计算。接着,通过特征值和特征向量的分析,展示出主要成分,如前四大主成分和重构成分。直观的图表显示了分解结果与原始序列的对比,以便于理解和评估分析效果。

视频教程详细演示了这些步骤的实际操作。对于想要获取MATLAB的SSA开源算法及绘图代码的读者,可以直接访问阿里云盘的资源。分享链接在此,提取码是f0w7。只需按照提示操作,即可获得所需的代码资源。

B. ssa数据降噪算法简易实例

原始数据是[1 9 2 8 3 7]

嵌入:

比如选择的窗口长度L为3,得到的矩阵就是:

[1 9 2]

[9 2 8]

[2 8 3]

[8 3 7]

SVD分解:

Python里自带一个函数进行分解,就不用它参考文献上写的啥X乘X的转置了,函数是这个:

u, s, v = np.linalg.svd(嵌入得到的矩阵)

得到的三个结果是这样的

u是个形状为(4, 4)的矩阵,为啥是4我不知道

[-0.34748861 -0.67722177  0.41306458 -0.5      ]

[-0.62332023  0.4373678  -0.41253036 -0.5      ]

[-0.38669102 -0.52074809 -0.57383924  0.5      ]

[-0.58411781  0.28089413  0.57437346  0.5      ]

s是,形状为(3,) 

[18.29004176  9.97102473  0.23030046]

奇艺谱就是s里取最大值,这里为 18.29004175999194

v是,形状是(3, 3)

[-0.62349202 -0.50409505 -0.59761683]

[ 0.44777196 -0.85683898  0.25559193]

[ 0.64090402  0.10823653 -0.7599519 ]

重构:

重构矩阵的计算方法是 newMatrix = value * u1 * v1

value就是奇艺谱,SVD分解里得到的s里的最大值,上面也提了一下,这里value是: 18.29004175999194

u1是在u的基础上,取第一行,为

[-0.34748861 -0.62332023 -0.38669102 -0.58411781]

v1是在u的基础上,取第一行,为

[-0.62349202 -0.50409505 -0.59761683]

计算时需要对u1进行转置,转置后的u1是:

[-0.34748861]

[-0.62332023]

[-0.38669102]

[-0.58411781]

重构完的矩阵就是:

[3.96265415 3.203817  3.79820225]

[7.10815385 5.74696232 6.81316231]

[4.40970654 3.56526011 4.22670177]

[6.66110146 5.38551921 6.3846628 ]

最后把重构完的矩阵再转变为一维数组:

设这个一维数组叫ret[],对于重构完的矩阵,对每一条次对角线进行计算,并把结果添加到ret[]里

利用两个动态的变量,这里分别叫sigma和alpha,sigma是每条次对角线的数据的和,alpha是次对角线长度

ret.append(sigma/alpha)

就相当于添加了每条次对角线的平均值。

过程大概是这样的:

pos is( 0 , 0 ) sigma+

alpha is 1 now

ret[] append

pos is( 1 , 0 ) sigma+,

pos is( 0 , 1 ) sigma+

alpha is 2 now

ret[] append

pos is( 2 , 0 ) sigma+

pos is( 1 , 1 ) sigma+

pos is( 0 , 2 ) sigma+

alpha is 3 now

ret[] append

pos is( 3 , 0 ) sigma+

pos is( 2 , 1 ) sigma+

pos is( 1 , 2 ) sigma+

alpha is 3 now

ret[] append

pos is( 3 , 1 ) sigma+

pos is( 2 , 2 ) sigma+

alpha is 2 now

ret[] append

pos is( 3 , 2 ) sigma+

alpha is 1 now

ret[] append

处理后的数据ret[]为:

[3.9626541544632476 5.155985423726059 4.651623704998423 5.67984129396347 4.806110489242382 6.384662797164128]

就是最终结果

备注:

因为窗口长度L的选择不宜超过数据长度的1/3,这里数据长度是6,L为了为了算着方便选的3,所以这个例子的效果不好,但是领会精神。

做为参考的话,处理数据的时候,数据长度是300+,L选的4。

源码访问:https://git.twtstudio.com/chenpeiqi/ssa/tree/master

参考文献https://www.ixueshu.com/document/.html

阅读全文

与ssa的简便算法相关的资料

热点内容
pthreads安装linux 浏览:272
androidfragment嵌套 浏览:276
单片机在线升级 浏览:115
程序员吃包子视频 浏览:808
安卓为什么不封app 浏览:465
电车租车app叫什么 浏览:728
编程员英文 浏览:266
负载均衡服务器如何部署项目 浏览:528
迷你世界的程序员怎么获取 浏览:367
洗澡杨绛pdf 浏览:218
程序员的诗词大会 浏览:728
怎么修改建行app名 浏览:815
云终端怎么加密 浏览:610
linuxxserver启动 浏览:97
迅雷把文件分解加密 浏览:89
好玩友app怎么查找游戏 浏览:870
互联网公司java 浏览:527
为什么能上网却提示找不到服务器 浏览:584
基于单片机的多功能门铃 浏览:956
南昌微型往复活塞空气压缩机 浏览:143