模态参数识别中的特征实现算法

模态参数识别中的特征实现算法(ERA)是一种基于状态空间系统识别的方法,适用于从响应信号中提取固有频率、阻尼比和模态振型。

ERA算法步骤

  1. 数据预处理
  • 去除信号均值,消除直流分量。
  • 截断信号长度,确保足够的数据点。
  1. 构建Hankel矩阵
    使用时域响应数据构造Hankel矩阵,形式为:

H=​y(t1​)y(t2​)⋮y(tn​)​y(t2​)y(t3​)⋮y(tn+1​)​⋯⋯⋱⋯​y(tm​)y(tm+1​)⋮y(tn+m−1​)​​

其中,n为行数,m为列数,通常满足 n+m−1=N(总采样点数)。

  1. 奇异值分解(SVD)​
    对Hankel矩阵进行SVD分解:

H=UΣV∗

选择有效奇异值(对应真实模态),舍弃噪声主导的小奇异值。

  1. 计算留数矩阵
    利用有效奇异向量构建状态空间矩阵 A,并通过留数矩阵 R 提取极点:

R=i=1∑r​σi​ui​vi∗​

其中,σi​、ui​、vi​ 分别为第i个奇异值及其对应的左右奇异向量。

  1. 提取极点(自然频率和阻尼比)​
    求解留数矩阵的特征方程:

det(sI−A)=0

解得极点 s=−ζωn​±jωd​,其中 ζ 为阻尼比,ωn​ 为固有频率,ωd​ 为阻尼固有频率。

  1. 计算模态振型
    通过留数矩阵中的元素计算振型系数:

ϕ=Ur​RVr∗​

Python代码

import numpy as np
from scipy.linalg import hankel, svd

def era_modal_parameter_identification(response, fs, max_modes=10):
    """
    ERA算法实现模态参数识别
    :param response: 响应信号 (1D numpy array)
    :param fs: 采样频率 (Hz)
    :param max_modes: 最大提取模态数
    :return: 固有频率 (rad/s), 阻尼比, 模态振型
    """
    # 1. 数据预处理
    response = response - np.mean(response)
    N = len(response)

    # 2. 构建Hankel矩阵
    L = min(max_modes * 2, N // 2)  # 行数
    H = hankel(response[:L], response[N-L:])

    # 3. SVD分解
    U, S, Vh = svd(H)

    # 4. 选择有效奇异值(根据能量阈值或固定数量)
    r = min(max_modes, np.sum(S > 1e-6))  # 自动选择有效秩
    U_r = U[:, :r]
    S_r = np.diag(S[:r])
    V_r = Vh[:r, :]

    # 5. 计算留数矩阵
    R = U_r @ S_r @ V_r

    # 6. 提取极点(自然频率和阻尼比)
    poles = np.linalg.eigvals(-R)  # 极点s = -sigma(假设R为状态矩阵)
    freq = np.angle(poles) * fs / (2 * np.pi)  # 固有频率 (Hz)
    zeta = -np.real(poles) / np.abs(poles)     # 阻尼比

    # 7. 计算模态振型(示例简化,实际需结合留数矩阵)
    modes = U_r @ R  # 振型近似

    return freq, zeta, modes

# 示例使用
if __name__ == "__main__":
    # 生成模拟响应信号(示例)
    t = np.linspace(0, 10, 1000)
    fs = 100  # Hz
    # 单自由度系统响应(示例)
    omega_n = 2 * np.pi * 5  # 5 Hz
    zeta = 0.05
    response = np.exp(-zeta * omega_n * t) * np.sin(omega_n * np.sqrt(1 - zeta**2) * t)

    # 调用ERA
    freq, zeta_est, modes = era_modal_parameter_identification(response, fs)

    print("Estimated Natural Frequencies (Hz):", freq)
    print("Estimated Damping Ratios:", zeta_est)

关键说明

  1. Hankel矩阵构造​:行数 L 的选择影响模态提取精度,通常取 2*max_modes
  2. SVD截断​:通过奇异值阈值或固定模态数过滤噪声。
  3. 极点计算​:实际应用中需区分共轭极点对,并转换为物理频率。
  4. 振型计算​:需结合留数矩阵的详细计算,示例中为简化版本。

此代码为简化实现,实际应用中需进一步优化,如噪声抑制、迭代精炼(如Levenberg-Marquardt)等。

matlab参考代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值