1.问题
工作中一个实际案例,测试人员报告一台振动测试设备,速度积分RMS不对:
实际值应为:5.9mm/s,此时信号频率160Hz。但是实际经由加速度传感器测得是速度RMS是2.36mm/s.
2.构建数学模型,数学实验
2.1 加速度至速度积分的模型
import numpy as np
import matplotlib.pyplot as plt
# 参数设置
A = 1.0 # 加速度信号的振幅
f = 1.0 # 信号频率 (Hz)
omega = 2 * np.pi * f # 角频率
T = 1 / f # 信号周期
Fs = 100 # 采样频率
dt = 1 / Fs # 采样间隔
t = np.arange(0, T, dt) # 时间向量
# 生成加速度信号 (正弦波)
acceleration = A * np.sin(omega * t)
# 对加速度信号进行积分,得到速度信号
velocity = np.cumsum(acceleration) * dt # 使用累积和近似积分
velocity -= np.mean(velocity) # 去除积分常数(以便速度从零开始)
# 绘制加速度和速度曲线
plt.figure(figsize=(12, 6))
# 加速度曲线
plt.subplot(2, 1, 1)
plt.plot(t, acceleration, label='Acceleration')
plt.title(f'Acceleration Signal, {Fs}sa/s')
plt.xlabel('Time [s]')
plt.ylabel('Acceleration [m/s²]')
plt.grid(True)
plt.legend()
# 速度曲线
plt.subplot(2, 1, 2)
plt.plot(t, velocity, label='Velocity', color='orange')
plt.title(f'Velocity Signal')
plt.xlabel('Time [s]')
plt.ylabel('Velocity [m/s]')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
2.1.1 原始程序输出
正弦入,余弦出,符合sin函数的积分特征。
2.2 仅仅改变采样率输出值不变
略,这很容易理解,因为加密采样点数计算只是更精确,但是不会改变积分曲线特征。
上面的代码中,修改Fs = 100
2.3 仅仅改变信号频率,观察速度积分
修改:f
频率提升一倍,速度积分幅值降低至之前的一半。这个理论上也容易理解,加速度振幅一样,作用时间减半,积分效果随之减半。
2.3.1 是否与当前的问题一致?
对于我们的问题,我知道有一个通道数增加,采样设备的最高采样率有明确上限的问题。也就是说,我们虽然设定的目标采样率是10000sa/s,但是因为采样通道数量太多,实际的最高采样率会有一个上限,对于我们的采样设备,这个上限大致是:7812Hz,所以,如果是因为某种配置错误,有可能会造成采集到的信号的实际频率会提高:10000/7812 = 1.28倍,由上面的计算,相关的积分制会响应降低至理论值的1/1.28.
由问题表述,原始信号的RMS是5.9mm/s,如果这个机制在起作用,我们实际测得的数据会是:
4.6mm/s.现在设备显示的是2.36mm/s。所以,还有一个潜在的错误。上文给出的错误,应该是在起作用。因为剔除那个因素后,明显呈现倍数关系。那么,大概率是实际采样时的采样率和参与速度积分运算时的采样率不一致,导致让信号的频率又虚假的增加了一倍,导致计算值降低一半。
3.实验数据分析时呈现的更多的问题
实测发现了一些其他类型的无效数据,对于这些问题,有几个问题要问:
- 这是正常数据还是异常数据?
- 它是什么原因导致的?
- 各自对应的故障是什么吗?
- 如何消除这些无效数据吗?
故障1:加速度爬升曲线
在这个异常帧前后:
前 | 后 |
![]() | ![]() |
故障2:速度积分异常:
上图是一个调试过程中,切换工况,速度积分有一个陡峰,按照前后稳态的数值。那个尖峰显然不正常。我们看看发生了什么:
前 | 故障点 | 后 |
![]() | ![]() | ![]() |
故障前加速度幅度很小 | 故障时 | 故障后的稳态,正弦波 |
4.原始故障数据
4.1 定位故障数据通道
先定位故障的数据,这是一个可能的位置,对应设备第24通道,日期符合,数据基本符合。
看看还有没有其他可能的数据通道:
-- 组合所有需要查询的表
SELECT v_rms FROM xxxxxxch01_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch02_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch03_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch04_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch05_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch06_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch07_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch08_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch09_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch10_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch11_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch12_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch13_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch14_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch15_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch16_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch17_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch18_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch19_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch20_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch21_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch22_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch23_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
UNION ALL
SELECT v_rms FROM xxxxxxch24_h01 WHERE time >= '2024/08/15 14:12:05' AND time <= '2024/08/15 14:12:50'
-- 结束时请确保所有表都已包含在内
数据:
0.27893
0.21764
0.33603
0.61931
0.37384
0.15374
0.53481
0.4973
0.16742
0.28134
0.32636
0.19646
0.34697
0.33999
0.26795
0.27342
0.67385
0.069543
0.024255
0.3373
0.039685
0.056232
0.19911
0.060063
0.056336
0.16916
0.05575
0.036257
0.15947
0.028125
0.041696
0.2466
0.032583
0.037315
0.077063
0.052436
0.056075
0.2517
0.035875
0.081126
0.21611
0.10555
0.19159
0.092775
0.055599
0.2115
0.19574
0.062035
0.077403
0.22477
0.046066
0.08083
0.027202
0.04626
0.14594
0.15801
0.058895
0.02175
0.13566
0.11301
0.070427
2.3643
2.356
2.3625
结论,故障通道就是24通道。查看原始波形和系统输出测量值:
4.2 搜集关键的系统输出:
SELECT v_rms, freq, rms, ppk FROM d_xxxxxxx_ch24_h01 WHERE time >= '2024/08/15 14:00:05' AND time <= '2024/08/15 14:12:50'
v_rms sig_freq acc_rms acc_ppk
0.11786 1289.1 0.0051534 0.024414
0.37284 1333 0.0052974 0.027466
0.29815 1372.1 0.0052334 0.025024
140.2 4.8828 0.54486 1.8866
2.342 161.13 0.24044 0.69824
2.341 161.13 0.24083 0.70312
2.3483 161.13 0.23967 0.70068
2.3594 161.13 0.24166 0.70679
2.358 161.13 0.24147 0.70435
2.3631 161.13 0.24104 0.7019
2.3643 161.13 0.24148 0.70312
2.356 161.13 0.24193 0.70374
2.3625 161.13 0.24126 0.70557
确实计算错误。
4.3 搜集原始数据
4.3.1 对照组,测量值正确
4.3.2 故障时的原始加速度数据
最终的故障加速度值确实是:2.36
因为,这两个信号同频,所以,速度与加速度曲线的幅值会成比例:
应当是:0.85/1.5 * 10.257 = 5.8,与振动台计算基本一致。确实是个计算错误。原始数据没有问题。
4.4 故障定位
其实:5.9/2.36 = 2.5
所以,其实是加速度量程出了问题?类似计算时是以满量程20g来算的,实际的量程是50g。所以,就会造成这个错误。
代码中确认:
这是对g的修正,
PARAM_PPK_g = 20+20 #单位g
配置文件因为打包时的故障,设定值没有被读入:
"sensor":
{
"acc_range":
{
"default":50
}
}
附录A 针对3.13.2故障我的分析结论:
对于3.1 肉眼可以观察到那个爬升曲线上的高频纹波,按照纹波的幅度大致与稳态的随机扰动一致,参考前后采样的数据帧,这大概率是信号源停车时的共振波形,系统采集到了。
对于3.2 这个波形,系统由无信号过度到信号接入,记录到的故障点大概率是采到了传感器磁吸接触振动台的那个瞬态。