更新时间:2025-12-01 GMT+08:00
分享

大模型特征算子

大模型特征算子以extension形式封装为文件置于DWS系统,通过CREATE EXTENSION命令创建,大模型直接调用封装好的Python UDF函数。

使用示例:建立一个简单的故障预测模型,使用均方根值作为特征值。

  1. 用户创建EXTENSION,加载大模型特征算子bq_ops。

    CREATE EXTENSION bq_ops;

    创建完成后,Python UDF函数自动完成加载,大模型特征算子函数及功能如下表。函数类型均为pythonUDF,返回值类型均为double,反映当前信号的某些特征值。

    表1 函数列表

    函数名

    算子功能

    get_sharpness(signal double precision[], fs int)

    尖锐度,例如声音信号反映了中高频成分的多少及其对人耳的刺激程度,数值越大声音听起来越尖锐。

    get_roughness(signal double precision[], fs int)

    粗糙度,例如声音信号感知粗糙程度的指标,主要用于描述声音在时间上的快速波动对人耳的影响。

    get_mean_square(signal double precision[])

    均方值,反映了振动信号在时间域内的平均能量水平。

    get_rms(signal double precision[])

    均方根值(有效值),一般表征振动信号能量或强度。

    get_var(signal double precision[])

    方差值,反映了信号幅值相对于其平均值的离散程度。

    get_pk_pk(signal double precision[])

    峰峰值,表征振动信号幅值波动范围的一个重要指标。

    get_shape_factor(signal double precision[])

    波形指标,衡量振动信号波形平坦程度的无量纲指标,计算为均方根值与绝对平均值的比值。它表征的是信号幅值分布的集中特性,反映波形与理想正弦波的偏离程度,对信号中的冲击成分和非高斯特性敏感。

    get_crest(signal double precision[])

    峰值因数,反映了信号峰值与有效值(RMS值)之间的比例关系,用于描述信号的冲击特性或波形尖锐程度。

    get_impulse(signal double precision[])

    脉冲因数,反映了信号峰值与平均值之间的比例关系,主要用于评估信号中的冲击特性或瞬时能量集中程度。

    get_clearance(signal double precision[])

    裕度,衡量振动信号中极端冲击强度的无量纲指标,计算为峰值与方根幅值的比值。它表征的是信号中最大峰值相对于典型幅值水平的突出程度,对严重局部故障(如严重剥落、断裂)产生的剧烈冲击异常敏感。

    get_skewness(signal double precision[])

    偏斜度,反映了信号幅值分布相对于其平均值的偏斜方向和程度。

    get_kurt(signal double precision[])

    峭度,通过振动信号幅值分布尖锐程度或尾部特性,反映信号幅值分布相对于正态分布的尖锐程度和异常值(如冲击或瞬态事件)的存在。

    get_gini(signal double precision[])

    基尼指数,表征信号能量分布均匀性或集中程度的指标。它最初来源于经济学中的收入不平等度量,在信号处理领域被广泛应用于评估信号的能量分布特性。

    get_spec_ctrd(signal double precision[], fs int)

    重心频率,信号功率谱的质量中心,反映了信号中能量的集中位置。

    get_spec_ms(signal double precision[], fs int)

    均方频率,信号频谱各频率分量的平方的加权平均,反映信号能量的频率分布特性。

    get_spec_rms(signal double precision[], fs int)

    均方根频率,信号频谱的平方和的平方根,用于描述信号频谱的总体分布情况。

    get_spec_var_ctrd(signal double precision[], fs int)

    频谱方差,信号频谱分布的方差,反映了信号频率成分的分散程度。

    get_spec_std_ctrd(signal double precision[], fs int)

    频谱标准差,频率方差的平方根,用于描述信号频谱分布的离散程度。

    get_pse(signal double precision[], fs int)

    谱熵,表征信号频域能量分布复杂度或无序程度的一个重要指标。它基于信息熵的概念,用于描述信号在频域中的能量分布特性。

    get_env_rms(signal double precision[])

    包络谱均方根,表征信号包络谱能量水平,反映了信号中调制成分(如故障特征频率)的整体能量强度。

    get_ehr(signal double precision[])

    谐波率,用于评估信号中谐波成分的强度,反映信号的周期性特征或非线性特性。

    get_kurt_aver(signal double precision[])

    平均峭度,对一段信号或多组信号的峭度值进行平均,用于评估长期内信号的冲击特性变化。

    get_mpf(signal double precision[], fs int)

    转速,指在单位时间内的旋转次数,通常以每分钟转数 (RPM) 表示。

    get_bpf_0_500_rms(signal double precision[], fs int)

    低频有效值(均方根),对信号做0-500Hz低通滤波后,计算有效值,描述低频信号的能量或强度。

    get_bpf_500_2000_rms(signal double precision[], fs int)

    中频有效值(均方根),对信号做500-2000Hz带通滤波后,计算有效值,描述中频信号的能量或强度。

    get_bpf_2000_inf_rms(signal double precision[], fs int)

    高频有效值(均方根),对信号做2000-fs/2Hz高通滤波后,计算有效值,描述高频信号的能量或强度。

    get_bpf_0_500_kurt(signal double precision[], fs int)

    低频峭度,对信号做0-500Hz低通滤波后,计算峭度指标,描述低频信号中冲击性的强弱。

    get_bpf_500_2000_kurt(signal double precision[], fs int)

    中频峭度,对信号做500-2000Hz带通频滤波后,计算峭度指标,描述中频信号中冲击性的强弱。

    get_bpf_2000_inf_kurt(signal double precision[], fs int)

    高频峭度,对信号做2000-fs/2Hz高通滤波后,计算峭度指标,描述高频信号中冲击性的强弱。

    get_bpf_0_500_ehr(signal double precision[], fs int)

    低频谐波率,对信号做0-500Hz低通滤波后,计算谐噪比,描述低频信号中谐波成分与噪声成分强度比。

    get_bpf_500_2000_ehr(signal double precision[], fs int)

    中频谐波率,对信号做500-2000Hz带通滤波后,计算谐噪比,描述中频信号中谐波成分与噪声成分强度比。

    get_bpf_2000_inf_ehr(signal double precision[], fs int)

    高频谐波率,对信号做2000-fs/2Hz高通滤波后,计算谐噪比,描述高频信号中谐波成分与噪声成分强度比。

  2. 创建表bq_col_table,device_code表示当前设备号,measuring_point_code表示测量点编码,date_time表示信号采集日期,high_array列表示当前接收的信号

    CREATE TABLE bq_col_table(device_code varchar, measuring_point_code text,date_time timestamp with time zone, high_array double precision[]) with (orientation=column, enable_hstore_opt=true);

    每过1小时采集10秒钟信号,假设当前入库时数据如下。

    INSERT INTO bq_col_table VALUES
    ('10098819','3a138131-344a-af96-9e9d-da049656d905','2024-07-13 17:59:59+08:00','{0.527995824813842,-0.62188184261322,-0.332374721765518,-0.139671847224235,-0.308928370475769,-0.165734529495239,0.137558653950691,-0.923967480659484,-0.398990541696548,0.620271801948547,0.366085141897201,-0.873452186584472,-1.00577819347381,-0.581831872463226,0.0675214752554893,0.789226412773132,-0.643114387989044,-0.779465496540069,0.913703441619873,1.33372521400451,-0.0830182060599327,0.621579945087432,1.48476803302764}');

  3. 调用算子get_rms()计算信号均方根值,当前样本信号的振动信号能量强度。上述样例数据结果为:

    SELECT device_code, measuring_point_code, date_time, get_rms(high_array) FROM bq_col_table;
     device_code |         measuring_point_code         |       date_time        |     get_rms
    -------------+--------------------------------------+------------------------+------------------
     10098819    | 3a138131-344a-af96-9e9d-da049656d905 | 2024-07-13 17:59:59+08 | .705324261533061
    (1 row)

  4. 重复上述步骤,采集10天信号数据为样本,设定rms的正常取值区间,假设为[0.5, 0.8]。
  5. 如果有异常信号入库。

    INSERT INTO bq_col_table VALUES
    ('10098819','3a138131-344a-af96-9e9d-da049656d905','2024-07-13 07:59:59+08:00','{0.544054210186004,-0.769003570079803,-1.79972970485687,0.659896433353424,1.65061652660369,-0.221043065190315,-1.83933162689208,-2.58152985572814,-0.627029538154602,2.1537218093872,2.14685225486755,-0.0429693721234798,-1.21243667602539,-1.02749335765838,-0.526543200016021,-0.0408141687512397,1.96406400203704,2.1080584526062,0.257277429103851,-1.36532151699066,-2.31293749809265,-0.803890943527221,1.13646578788757}');

    此时库中将存在异常的rms值1.43,据此可以分析该异常信号。

    SELECT device_code, measuring_point_code, date_time, get_rms(high_array) FROM bq_col_table;
     device_code |         measuring_point_code         |       date_time        |     get_rms
    -------------+--------------------------------------+------------------------+------------------
     10098819    | 3a138131-344a-af96-9e9d-da049656d905 | 2024-07-13 17:59:59+08 | .705324261533061
     ……
     10098819    | 3a138131-344a-af96-9e9d-da049656d905 | 2024-07-13 07:59:59+08 | 1.43480152874657

使用上述算子时,会引用第三方库numpy、scipy等,将会导致udf进程的内存占用增大。典型的算子如:get_skewness、get_kurt、get_env_rms、get_ehr、get_kurt_aver、get_bpf_0_500_rms、get_bpf_500_2000_rms、get_bpf_2000_inf_rms、get_bpf_0_500_kurt、get_bpf_500_2000_kurt、get_bpf_2000_inf_kurt、get_bpf_0_500_ehr、get_bpf_500_2000_ehr、get_bpf_2000_inf_ehr。使用时请保证参数udf_memory_limit不少于2GB。

相关文档