導航:首頁 > 源碼編譯 > 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的簡便演算法相關的資料

熱點內容
鴻蒙編譯器系統講授 瀏覽:541
解壓神劇電視劇解說 瀏覽:984
vscodepython遠程解釋器 瀏覽:959
壓力支撐主圖疊加源碼 瀏覽:627
pdf導出pdf 瀏覽:729
命令與征服將軍修改 瀏覽:515
政治生活pdf 瀏覽:735
protel單片機元件庫 瀏覽:928
安卓手機為什麼一直顯示安裝失敗 瀏覽:869
TUB為什麼進不了伺服器 瀏覽:619
簡易加密英文的常用手段 瀏覽:309
手機里a文件夾 瀏覽:612
雲圖計劃演算法重構怎麼用 瀏覽:669
怎麼給pdf加批註 瀏覽:962
冰櫃壓縮機cop為什麼低 瀏覽:927
怎麼創造一個秘密文件夾 瀏覽:976
電腦復制加密門禁卡到華為手機 瀏覽:405
怎麼入駐地圖app 瀏覽:996
學會自我調節和解壓 瀏覽:858
安卓怎麼顯示地區 瀏覽:390