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