import math
import matplotlib.pyplot as plt
import pywt
import pandas as pd
import numpy as np
import scipy as signal
def WaveletDeNoising(path):
xy = pd.read_csv(path, sep=', ') # 读取CSV文件
s = []
for each in list(xy):
s.append(float(each))
# 将需要的数据保存在列表s中
w = pywt.wavedec(s, 'sym7', level=6) # 小波分解,pywt.wavedec(数据, 小波基, 分解尺度)
# 分解得到的w是一个列表,w[0]是最大尺度的近似系数,w[1]是最大尺度的细节系数,w[2]是次大尺度的细节系数,以此类推
n = len(s)
thr = round(np.sqrt(2 * np.log(n)), 4) # 阈值获取,方式为sqtwolog
for i in range(1, len(w)):
w[i] = pywt.threshold(w[i], thr, mode='soft')
# 阈值处理函数
rec_s = pywt.waverec(w, 'sym7') # 小波重构
plt.subplot(211)
plt.plot(s, linewidth=0.5)
plt.subplot(212)
plt.plot(rec_s, linewidth=0.5)
plt.show()
print(f'Hi, process success!')
def WaveFiltering(path):
xy = pd.read_csv(path, sep=', ') # 读取CSV文件
s = []
for each in list(xy):
s.append(float(each))
b, a = signal.butter(8, [0.01, 0.4], 'bandpass') # 配置滤波器 8 表示滤波器的阶数
rec_s = signal.filtfilt(b, a, s) # data为要过滤的信号
plt.subplot(211)
plt.plot(s, linewidth=0.5)
plt.subplot(212)
plt.plot(rec_s, linewidth=0.5)
plt.show()
print(f'Hi, process success!')
def TimeThresholdAnalysis(path):
xy = pd.read_csv(path, sep=', ') # 读取CSV文件
s = []
for each in list(xy):
s.append(float(each))
df_mean = np.mean(s) # 均值
df_var = np.var(s) # 方差
df_std = np.std(s) # 标准差
df_max = np.max(s) # 最大值
df_rms = np.sqrt(pow(df_mean, 2) + pow(df_std, 2)) # 均方根
df_skew = pd.Series(s).skew() # 偏度
df_kurt = pd.Series(s).kurt() # 峭度
df_boxing = df_rms / np.abs(s).mean() # 波形因子
df_fengzhi = np.max(s) / df_rms # 峰值因子
df_maichong = np.max(s) / np.abs(s).mean() # 脉冲因子
sum_size = 0
for i in range(2000):
sum_size += math.sqrt(abs(s[i]))
df_yudu = (np.max(s)) / pow((sum_size / 2000), 2) # 裕度因子
print(f'峰值因子:%f' % df_fengzhi)
print(f'波形因子:%f' % df_boxing)
print(f'脉冲因子:%f' % df_maichong)
print(f'峭度:%f' % df_kurt)
print(f'裕度因子:%f' % df_yudu)
print(f'最大值:%f' % df_max)
print(f'均值:%f' % df_mean)
print(f'均方根:%f' % df_rms)
print(f'偏度:%f' % df_skew)
print(f'标准差:%f' % df_std)
print(f'Hi, process success!')
def FFTConversion(path):
xy = pd.read_csv(path, sep=', ') # 读取CSV文件
s = []
for each in list(xy):
s.append(float(each))
data_freq = np.fft.fft(s)
m_data = np.abs(data_freq) # magnitude
# p_data = np.angle(data_freq) # phase
plt.subplot(2, 1, 1)
plt.plot(m_data, linewidth=0.5)
# plt.subplot(2, 2, 2)
# plt.plot(p_data, linewidth=0.5)
plt.show()
if __name__ == '__main__':
WaveletDeNoising('F:/xxxx.txt') # 小波降噪
WaveFiltering('F:/xxxx.txt') # 带通滤波
TimeThresholdAnalysis('F:/xxxx.txt') # 时阈分析
FFTConversion('F:/xxxx.txt') # FFT波形转换
版权声明:本文为yhj_911原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。