4. 模态置信准则(MAC)用于模态验证
MAC 矩阵的物理含义与判读边界
模态置信准则(Modal Assurance Criterion, MAC)用两个振型向量的归一化点积衡量其几何相似度,取值 0~1。对角元恒为 1;非对角元越接近 1,说明两阶模态振型形状越相似。工程判读通常采用三条经验阈值:
- MAC < 0.1:两阶模态振型近似正交,可视为独立模态;
- 0.1 ≤ MAC < 0.3:存在轻度相关,需结合频率间隔与阻尼比复核;
- MAC ≥ 0.3:强相关,高度怀疑虚假模态、模态混叠或测点不足导致的振型泄漏。
需要注意:MAC 高并不必然等于虚假模态。对称结构中的重根模态、测点布置过少、参考点恰好落在某阶模态节点附近,都会造成非对角元偏高。因此 MAC 必须与频率、阻尼比、相干函数和物理可解释性联合判断。
计算流程与关键代码
假设已通过最小二乘复指数法(LSCE)从实测 FRF 中识别出 6 阶模态振型矩阵 Phi(尺寸 n_locations × n_modes),下面用 Python 计算 MAC 矩阵并自动标记可疑模态对。
import numpy as np
def compute_mac(Phi):
"""
Phi: 振型矩阵,形状 (n_locations, n_modes)
返回: MAC 矩阵 (n_modes, n_modes)
"""
n_modes = Phi.shape[1]
MAC = np.zeros((n_modes, n_modes))
for i in range(n_modes):
for j in range(n_modes):
num = np.abs(np.dot(Phi[:, i].conj(), Phi[:, j]))**2
den = (np.dot(Phi[:, i].conj(), Phi[:, i]).real *
np.dot(Phi[:, j].conj(), Phi[:, j]).real)
MAC[i, j] = num / den
return MAC
# 示例:6 阶模态,12 个测点
np.random.seed(42)
Phi = np.random.randn(12, 6) + 1j * np.random.randn(12, 6)
# 人为构造第 4、5 阶高度相关(模拟虚假模态/混叠)
Phi[:, 4] = Phi[:, 3] * 0.95 + 0.05 * (np.random.randn(12) + 1j*np.random.randn(12))
MAC = compute_mac(Phi)
np.set_printoptions(precision=3, suppress=True)
print("MAC 矩阵:")
print(MAC)
# 自动标记非对角元 >= 0.3 的模态对
threshold = 0.3
print("\n可疑模态对(MAC >= 0.3):")
for i in range(MAC.shape[0]):
for j in range(i+1, MAC.shape[1]):
if MAC[i, j] >= threshold:
print(f" 模态 {i+1} ↔ 模态 {j+1}: MAC = {MAC[i, j]:.3f}")
运行后预期输出中,模态 4 与模态 5 的 MAC 值会显著高于 0.3(示例中约 0.72),其余非对角元均低于 0.1。这提示第 4、5 阶模态可能来自同一物理模态的重复识别或混叠。
剔除建议与复核步骤
- 检查频率间隔:若两阶模态频率差 Δf 小于频率分辨率的 2 倍,优先怀疑模态混叠。可提高谱线数或改用 PolyMAX 等适合密集模态的方法重新识别。
- 检查阻尼比:虚假模态常伴随异常高或负阻尼比。若 ζ > 20% 或为负值,应直接剔除。
- 检查参考点位置:若参考点恰好落在某阶模态节点附近,该阶振型信噪比极低,MAC 会虚高。建议更换参考点或增加参考点数量。
- 检查测点数量:测点数少于模态阶数时,振型向量空间不足,MAC 矩阵会出现伪相关。确保测点数至少为关注模态数的 2 倍。
- 物理可解释性复核:将保留的模态振型与有限元或工程经验对比,确认振型形状符合结构力学预期。
MAC 阈值不是绝对标准。对于大型柔性结构或高频密集模态区域,可适当放宽至 0.4;对于简单悬臂梁等低阶模态稀疏结构,建议收紧至 0.2。最终剔除决策必须结合频响函数质量、相干函数和物理判断,不能仅依赖单一 MAC 数值。
实操检查清单
| 检查项 | 通过条件 | 不通过时的动作 |
|---|---|---|
| MAC 非对角元最大值 | < 0.3 | 标记对应模态对,进入复核 |
| 频率间隔 Δf | ≥ 2 倍频率分辨率 | 提高谱线数或改用 PolyMAX |
| 阻尼比 ζ | 0 < ζ < 20% | 剔除异常阻尼模态 |
| 测点数 / 模态数 | ≥ 2 | 增加测点或减少识别模态数 |
| 参考点位置 | 不靠近任何关注模态节点 | 更换参考点或增加参考点 |
| 振型物理可解释性 | 与有限元/经验一致 | 重新检查识别参数或测量数据 |