基于Python的信号处理(包络谱,低通、高通、带通滤波,初级特征提取,机器学习,短时傅里叶变换)及轴承故障诊断探索

126 篇文章 1 订阅
125 篇文章 46 订阅

Python是一种广泛使用的解释型、高级和通用的编程语言,众多的开源科学计算软件包都提供了Python接口,如计算机视觉库OpenCV、可视化工具库VTK等。Python专用计算扩展库,如NumPy、SciPy、matplotlab、Pandas、scikit-learn等。

开发工具上可用Spyder,在安装Anaconda时已经安装好,可以从开始菜单或者使用命令行spyder启动。Spyder是一个免费、开源的集成开发环境,用Python编写,用于Python程序的开发,由科学家、工程师和数据分析师设计。它综合开发工具的高级编辑、分析、调试和分析功能与科学软件包的数据探索、交互执行、深入检查和漂亮的可视化功能独特地结合在一起。可以单步执行,查看运行后的各变量的值,查看序列数据线图等,非常方便。其他的集成开发工具(IDE)还包括:

VisualStudioCode(简称VSCode)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称IntelliSense)、代码重构功能,并且内置了命令行工具和Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装扩展以拓展软件功能。VisualStudioCode默认支持非常多的编程语言,要使用Python进行开发,需要先安装相应的Python扩展(PythonextensionforVisualStudioCode)。

PyCharm,主要用于Python语言开发,由捷克公司JetBrains开发,提供代码分析、图形化调试器,集成测试器、集成版本控制系统,并支持使用Django进行网页开发。PyCharm是一个跨平台开发环境,拥有MicrosoftWindows、macOS和Linux版本。社区版在Apache许可证下发布,另外还有专业版在专用许可证下发布,其拥有许多额外功能。

本项目采用Python语言进行简单的信号处理(包络谱,低通、高通、带通滤波,初级特征提取,机器学习,短时傅里叶变换)及轴承故障诊断探索。

n_win_numb = 128;n_win = np.hamming(n_win_numb);n_overlap = 127;nfft = n_win_numb;pad_to = nfft*10;
plt.figure(figsize=(8,6))plt.specgram(y, NFFT = nfft, Fs = fs, window = n_win, noverlap = n_overlap, pad_to=pad_to);plt.title(['Increasing Win Overlap: win=',n_win_numb,' / overlap=',n_overlap, ' / nfft=',nfft, 'pad_to=',pad_to]);plt.xlabel('time(s)');plt.ylabel('freq(Hz)')

图片

n_win_numb = 32;n_win = np.hamming(n_win_numb);n_overlap = 0;nfft = n_win_numb;
plt.figure(figsize=(8,6))plt.specgram(y, NFFT = nfft, Fs = fs, window = n_win, noverlap = n_overlap);plt.title(['Increasing Win Overlap: win=',n_win_numb,' / overlap=',n_overlap, ' / nfft=',nfft]);plt.xlabel('time(s)');plt.ylabel('freq(Hz)')

图片

n_win_numb = 32;n_win = np.hamming(n_win_numb);n_overlap = 30;nfft = n_win_numb;pad_to = nfft*10;
plt.figure(figsize=(8,6))plt.specgram(y, NFFT = nfft, Fs = fs, window = n_win, noverlap = n_overlap, pad_to=pad_to);plt.title(['Increasing Win Overlap: win=',n_win_numb,' / overlap=',n_overlap, ' / nfft=',nfft, 'pad_to=',pad_to]);plt.xlabel('time(s)');plt.ylabel('freq(Hz)')

图片

n_win_numb = 256;n_win = np.hamming(n_win_numb);n_overlap = 250;nfft = n_win_numb;
plt.figure(figsize=(8,6))plt.specgram(y, NFFT = nfft, Fs = fs, window = n_win, noverlap = n_overlap);plt.title(['Increasing Win Overlap: win=',n_win_numb,' / overlap=',n_overlap, ' / nfft=',nfft]);plt.xlabel('time(s)');plt.ylabel('freq(Hz)')

图片

fig = plt.figure(figsize=(12,8))ax = Axes3D(fig,azim=-0.001,elev=80)plt.ylabel('Frequency');plt.xlabel('Div #')for x, y, z, c in zip(plot_x.T, plot_y.T, A_div.T, colors):    ax.plot3D(y,x,z,color=c, linewidth=0.5)plt.gca().invert_xaxis()

图片

colors = cm.rainbow(np.linspace(0, 1, len(plot_y)))
fig = plt.figure(figsize=(12,8))ax = Axes3D(fig,azim=-0.001,elev=85)plt.ylabel('Time (s)');plt.xlabel('Div #')for x, y, z, c in zip(plot_x.T, plot_y.T, y_div.T, colors):    ax.plot3D(y,x,z,color=c, linewidth=0.7)plt.gca().invert_xaxis()

图片

feature_n_mean = np.mean(feature_n,axis=0)feature_f_mean = np.mean(feature_f,axis=0plt.figure(figsize=(8,6))plt.plot(feature_n_mean,'-bo')plt.plot(feature_f_mean,'-rx')plt.title('Average of Features')plt.xticks(np.arange(0,np.size(feature_name)),feature_name,rotation='vertical');plt.show()

图片

from lightgbm import LGBMClassifier, plot_importance
n_estimator = 100
colsample_bytree = 0.1

model = LGBMClassifier(n_estimator=n_estimator,colsample_bytree = colsample_bytree)
model.fit(x_train, y_train)
y_test_pred = model.predict(x_test)
importance = model.feature_importances_

plt.figure(figsize=(4,4))
cm = pd.DataFrame(confusion_matrix(y_test, y_test_pred))
sns.heatmap(cm, annot=True)

plt.figure(figsize=(8,6))
plt.plot(importance,'-ko')
plt.xticks(np.arange(0,np.size(feature_name)),feature_name,rotation='vertical');

fig,ax = plt.subplots()
plot_importance(model,ax=ax)

print(model.score(x_test, y_test))
# print(metrics(y_test,y_test_pred))
plt.figure(figsize=(8,6))
plt.figure(figsize=(8,6))
z_ML_utils.plot_decision_boundaries(x,y,XGBClassifier, idx1=idx1, idx2=idx2, n_estimator=n_estimator,colsample_bytree = colsample_bytree)
完整的项目代码:https://mbd.pub/o/bread/Y5yXmJtt
 

图片

图片

图片

图片

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要对振动信号进行带通滤波包络分析,可以按照以下步骤进行: 1. 读取振动信号数据并进行预处理,如去除直流分量、去除高频噪声等。 2. 设计带通滤波器,可以使用MATLAB中的fir1函数或者iirdesign函数进行设计。需要指定滤波器的通带频率和阻带频率,以及通带和阻带的衰减量或者带宽等参数。 3. 将滤波器应用于振动信号上,得到经过带通滤波后的信号。 4. 对滤波后的信号进行包络分析,可以使用MATLAB中的hilbert函数进行包络提取。hilbert函数可以通过对信号进行解析,得到其解析信号的实部和虚部,从而得到信号的包络。对于一段时域信号x(t),其包络y(t)可以表示为 y(t) = abs(hilbert(x(t)))。 5. 对包络信号进行分析,可以使用MATLAB中的pwelch函数进行功率密度估计。需要指定窗函数、重叠和采样频率等参数,可以根据需求选取适当的参数。 下面给出一个示例代码,可供参考: ```matlab % 读取振动信号数据 data = load('vibration_data.mat'); x = data.x; % 预处理,去除直流分量 x = detrend(x); % 设计带通滤波器 fs = 1000; % 采样频率 fpass = [50 200]; % 通带频率 fstop = [30 250]; % 阻带频率 atten = 60; % 阻带衰减量 Wp = fpass/(fs/2); Ws = fstop/(fs/2); [n,Wn] = iirdesign(Wp,Ws,atten); % 应用滤波器 y = filtfilt(n,1,x); % 包络分析 env = abs(hilbert(y)); % 分析 win = hann(1024); % 窗函数 noverlap = 512; % 重叠 nfft = 1024; % FFT长度 [P,f] = pwelch(env,win,noverlap,nfft,fs); % 功率密度估计 % 绘图 subplot(2,1,1); plot(x); title('原始信号'); subplot(2,1,2); plot(f,P); xlim([0 300]); title('包络'); xlabel('频率(Hz)'); ylabel('功率密度'); ``` 这段代码中,假设振动信号数据已经保存在名为vibration_data.mat的文件中,其中变量名为x。首先对信号进行预处理,去除直流分量。然后使用iirdesign函数设计带通滤波器,指定通带频率为50-200Hz,阻带频率为30-250Hz,阻带衰减量为60dB。应用滤波器后,对滤波后的信号进行包络分析,得到包络信号。最后使用pwelch函数对包络信号进行分析,得到包络。绘制原始信号和包络的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哥廷根数学学派

码字不易,且行且珍惜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值