资源简介

随机子空间法的python实现,用于振动信号模态识别

资源截图

代码片段和文件信息

import  pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy import linalg


class ran_subsid():
    def __init__(selftdata):
        self.tdata=tdata
    def subsid(self):
        print(self.tdata.shape)
        (TimePointNum MesNodeTotalNum) = self.tdata.shape
        MesNodeTotalNum = MesNodeTotalNum - 1
        TimePointNum = TimePointNum
        N = 2 * n
        M = 100  # 将字符串转化为数值
        j = TimePointNum - 2 * M  # Hankel矩阵最后一个矩阵块对应坐标为(2 * i,j) 即2 * i + j需 <= TimePointNum
        Hankel = np.zeros(((2 * M + 1) * MesNodeTotalNum j))
        for col in range(0 j):
            m = 0
            for row in range(0 (2 * M + 1)):
                km = col + row
                m = m + 1
                Hankel[row col] = self.tdata[km 1]
        print(Hankel.shape)
        Yp = Hankel[0:M * MesNodeTotalNum :]
        Yf = Hankel[M * MesNodeTotalNum:2 * M * MesNodeTotalNum :]
        Yf2 = Hankel[(M + 1) * MesNodeTotalNum:(2 * M + 1) * MesNodeTotalNum :]
        # print(Yp.shape Yf.shape Yf2.shape)
        Teop1 = np.dot(Yf np.transpose(Yp)) / j
        # 组成第二个Toeplitz矩阵
        Teop2 = np.dot(Yf2 np.transpose(Yp)) / j
        # print(‘Teop1:‘ Teop1.shape)
        # # 组成第一个Toeplitz矩阵
        [U S V] = np.linalg.svd(Teop1)
        S1 = np.diag(S)
        # print(‘S1:‘S1.shape)
        plt.plot(S ‘k*‘)  # S1Y用黑色的星号表示
        plt.ylabel(‘Singular value‘)
        plt.xlabel(‘Order of system‘)
        plt.title(‘Singular value decomposition results ‘)
        plt.show()
        # # 

评论

共有 条评论