频域以及时-频域健康指标原理以及c与Python实现

频域健康指标

频域健康特征指标如下表:

部分代码实现如下:

def spectral_gini_index(data, sampling_rate = 1.0):
    # Compute the power spectral density
    freqs, psd = welch(data)

    # Sort PSD in ascending order
    sorted_psd = np.sort(psd)
    # Compute cumulative sum and CDF
    data = np.arange(0, len(sorted_psd))
    shang_sort = data[::-1]

    number_son = np.sum(sorted_psd*shang_sort)
    # Compute spectral Gini index
    
    spectral_gini = number_son / ((len(data)-1)*np.sum(sorted_psd))

    return spectral_gini
#谱峭度
def spectral_kurtosis(data):
    fs = len(data)
    Pxx = []
    nfft = 4
    for i in range(fs//nfft):                                      # 窗与窗之间数据不重叠
        w = np.hanning(nfft)                                      # 加汉尼窗
        p = np.abs(fft(w*data[i*nfft:(i+1)*nfft]))**2/fs/norm(w)**2  # 计算功率谱
        Pxx.append(p) 
    #print(Pxx)
    Pxx1 = np.mean(Pxx,axis=0)     #功率谱密度
    #print(Pxx1)
    f1   = np.array([k*fs/nfft for k in range(nfft//2)])
    #print(f1)
    f_mean =  np.mean(f1)
   # print(f_mean)
    sk = np.sum(((f1 - f_mean)**4)*Pxx1[nfft//2:]) / np.power(np.sum(Pxx1[nfft//2:]),2)
    #sk = np.sum(((f1[nfft//2:] - f_mean)**4)*Pxx1[nfft//2:]) / np.power(np.sum(Pxx1[nfft//2:]),2)
    return sk

C语言部分代码如下:

//傅里叶变换
void change()
{
	complex temp;
	unsigned short i=0,j=0,k=0;
	double t;
	for(i=0;i<size;i++)
	{
		k=i;
		j=0;
		
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值