设为首页收藏本站

52matlab技术网站,matlab教程,matlab安装教程,matlab下载

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 218|回复: 0

振动信号常用的时域和频域指标

[复制链接]
  • TA的每日心情
    开心
    2015-3-12 11:57
  • 签到天数: 1 天

    [LV.1]初来乍到

    87

    主题

    151

    帖子

    1514

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1514
    发表于 2019-3-8 07:42:36 | 显示全部楼层 |阅读模式
    本帖最后由 matlab的旋律 于 2019-3-11 06:36 编辑

    通常振动信号为一时间序列,衡量振动信号的指标包括时域指标和频域指标,网上分享计算公式和源程序的比较少,本文给出了公式定义以及matlab/python源码。常见时域指标包括:

    对应的Matlab程序如下:

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%matlab程序
    close all
    clear
    clc

    st = 0.01;
    data = sin(0:st:10);
    Xr = mean(sqrt(abs(data)))*mean(sqrt(abs(data)));
    Xmean = mean(abs(data));
    Xrms = rms(data);
    Xp=max(max(data), -min(data));

    disp(['均方根值:',num2str(Xrms)]);
    disp(['峰值指标:',num2str(max(max(data), -min(data)))]);
    disp(['峰值因子:',num2str(Xp/Xrms)]);
    disp(['峭度因子:',num2str(kurtosis(data))]);
    disp(['峰度因子:',num2str(skewness(data))]);
    disp(['方根幅度:',num2str(Xr)]);
    disp(['裕度系数:',num2str(Xp/Xr)]);
    disp(['绝对平均值:',num2str(Xmean)]);
    disp(['脉冲因子:',num2str(Xp/mean(abs(data)))]);
    disp(['波形指标:',num2str(Xrms/Xmean)]);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


    ########################################################################################
    ###python程序
    import numpy as np
    from scipy import stats

    st = 0.01
    data = np.sin(np.array([st*i for i in range(1001)]))
    Xr = np.mean(np.sqrt(abs(data)))*np.mean(np.sqrt(abs(data)))
    Xmean = np.mean(abs(data))
    Xrms = np.sqrt(np.dot(data,data)/len(data))
    Xp = max(max(data), -min(data))

    print('均方根值:',Xrms)
    print('峰值指标:',Xp);
    print('峰值因子:',Xp/Xrms)
    print('峭度因子:',stats.kurtosis(data))
    print('峰度因子:',stats.skew(data))
    print('方根幅度:',Xr)
    print('裕度系数:',Xp/Xr)
    print('绝对平均值:',Xmean)
    print('脉冲因子:',Xp/np.mean(abs(data)))
    print('波形指标:',Xrms/Xmean)
    print('方差为:',np.var(data))
    print('标准差为:',np.std(data))
    ########################################################################################



    对应的Matlab程序如下:
    close all
    clear
    clc

    st = 0.01;
    data = sin(0:st:10);

    fs = 1/st;
    N = length(data);
    y = 2*abs(fft(data))/N;
    f = fs*[1:N]/N;

    FC = sum(f.*y)/sum(y);
    MSF = sum(f.^2.*y)/sum(y);
    RMSF = sqrt(
    MSF);
    VF = sum((f-FC).^2.*y)/sum(y);
    RVF = sqrt(VF);

    disp(['重心频率:',num2str(FC)]);
    disp(['均方频率:',num2str(MSF)]);
    disp(['均方根频率:',num2str(RMSF)]);
    disp(['频率方差:',num2str(VF)]);
    disp(['频率标准差:',num2str(RVF)]);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


    ########################################################################################
    ###python程序

    fs = 1/st
    N = len(data)
    y = 2*abs(fft(data))/N
    f = np.array([(i+1)*fs/N for i in range(N)])
    FC = np.dot(f,y)/np.sum(y)
    MSF = np.dot(np.multiply(f,f),y)/np.sum(y)
    RMSF = np.sqrt(MSF)
    VF = np.dot(np.multiply(f-FC,f-FC),y)/np.sum(y);
    RVF = np.sqrt(VF)

    print('重心频率:',FC)
    print('均方频率:',MSF)
    print('均方根频率:',RMSF)
    print('频率方差:',VF)
    print('频率标准差:',RVF)
    ########################################################################################


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|52matlab技术网站 ( 粤ICP备14005920号-5  

    GMT+8, 2019-5-22 23:17 , Processed in 0.119387 second(s), 30 queries .

    Powered by Discuz! X3.2 Licensed

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表