栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python时域信号特征提取(各种因子)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python时域信号特征提取(各种因子)

#######################################计算因子###############################

import csv
import pandas as pd
import matplotlib.pyplot as plt


def psfeatureTime(dataset_url, p1, p2):

    # 建立一个数组来存储某一列的数据
    pending_column = []

    with open(dataset_url) as csv_file:

        row = csv.reader(csv_file, delimiter=',')
        next(row)  # 读取首行
        # 读取除首行之后每一行的第二列数据,并将其加入到数组price之中
        for r in row:
            # r[2]决定求哪一列,比如此时r[2]就是求第三列的相关值
            pending_column.append(float(r[3]))  # 将字符串数据转化为浮点型加入到数组之中
    data = np.array(pending_column)


    # 均值
    df_mean = data[p1:p2].mean()
    df_var = data[p1:p2].var()
    df_std = data[p1:p2].std()
    # 均方根
    df_rms = np.sqrt(pow(df_mean, 2) + pow(df_std, 2))
    # 峰峰值
    fengfengzhi = max(data[p1:p2]) - min(data[p1:p2])
    # 偏度
    df_skew = pd.Series(data[p1:p2]).skew()
    # 峰度
    df_kurt = pd.Series(data[p1:p2]).kurt()
    sum = 0
    for p1 in range(len(data[p1:p2])):
        sum += np.sqrt(abs(data[p1]))

    # 波形因子
    df_boxing = df_rms / (abs(data[p1:p2]).mean())
    # 峰值因子
    df_fengzhi = (max(data[p1:p2])) / df_rms
    # 脉冲因子
    df_maichong = (max(data[p1:p2])) / (abs(data[p1:p2]).mean())
    # 裕度因子
    df_yudu = max(data[p1:p2]) / pow(sum / (p2 - p1), 2)
    # 峭度
    df_qiaodu = (np.sum([x ** 4 for x in data[p1:p2]]) / len(data[p1:p2])) / pow(df_rms, 4)
    featuretime_list = [round(df_rms, 3), round(fengfengzhi, 3), round(df_fengzhi, 3), round(df_boxing, 3),
                        round(df_maichong, 3), round(df_yudu, 3), round(df_qiaodu, 3)]


    print(featuretime_list)
    return featuretime_list



dataset_url = 'E:/PyCharm_workspace/demo/h2o/regression/CNC.csv'
# 当前位置
p1 = 1
# 采样频率
sampl_frequency = 40000
# 按照采样频率下一次到达的位置
p2 = p1 + sampl_frequency


# 统计该文件有多少行?
total_lines = len(open(dataset_url).readlines())
print('The total lines is ', total_lines)

times = total_lines // sampl_frequency
print(times)

divisor_list = []

df_boxing_list = []
df_fengzhi_list = []
df_maichong_list = []
df_yudu_list = []
df_qiaodu_list = []

for i in range(times):
    divisor_list = psfeatureTime(dataset_url, i * sampl_frequency, i * sampl_frequency + sampl_frequency)
    df_boxing_list.append(float(divisor_list[0]))
    df_fengzhi_list.append(float(divisor_list[1]))
    df_maichong_list.append(float(divisor_list[2]))
    df_yudu_list.append(float(divisor_list[3]))
    df_qiaodu_list.append(float(divisor_list[4]))





plt.plot(df_boxing_list)
plt.title('波形因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('波形因子',fontproperties = 'SimHei')
plt.show()

plt.plot(df_fengzhi_list)
plt.title('峰值因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('峰值因子',fontproperties = 'SimHei')
plt.show()

plt.plot(df_maichong_list)
plt.title('脉冲因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('脉冲因子',fontproperties = 'SimHei')
plt.show()


plt.plot(df_yudu_list)
plt.title('裕度因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('裕度因子',fontproperties = 'SimHei')
plt.show()

plt.plot(df_qiaodu_list)
plt.title('峭度因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('峭度因子',fontproperties = 'SimHei')
plt.show()

python时域信号特征提取_狂奔的 蜗牛的博客-CSDN博客_python 信号特征提取

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号