導航:首頁 > 源碼編譯 > 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