第一章:Python与科学计算环境搭建
各位同学好,我是老张。搞了十几年轴承故障诊断,说实话,最早我也是用MATLAB的。但后来发现Python在数据处理和深度学习方面越来越方便,就彻底转过来了。今天咱们就从零开始,把Python的科学计算环境搭起来。
这一章的内容说白了就是三件事:装软件、用工具、学基础库。别小看这一步,我见过太多人因为环境没配好,后面代码跑不通,白白浪费一整天。嗯,咱们一步步来。
1.1 Anaconda安装——一步到位
为什么要用Anaconda?说白了,它就是个Python全家桶。你想想看,搞信号处理要装NumPy、SciPy、Matplotlib,搞机器学习要装scikit-learn、TensorFlow,一个个手动装多麻烦。Anaconda一次性给你打包好了,还自带包管理工具conda,省心。
安装步骤:
- 去Anaconda官网下载对应系统的安装包(Windows/Mac/Linux)
- 双击安装,一路默认就行
- 注意:安装时勾选"Add Anaconda to my PATH environment variable"
- 安装完成后,打开终端(或cmd),输入
conda --version验证
我个人习惯用conda创建虚拟环境,每个项目一个环境,互不干扰。比如咱们这个轴承故障诊断课程,我就专门建了一个环境:
conda create -n bearing_diag python=3.9
conda activate bearing_diag
这样就算你后面装其他库搞坏了环境,也不会影响其他项目。这个习惯我建议你从一开始就养成。
1.2 Jupyter Notebook——交互式编程利器
搞信号分析,最烦的就是写一大段代码然后运行,发现结果不对,又得从头改。Jupyter Notebook的好处是:你可以一段一段地跑代码,边跑边看结果,特别适合做数据探索和算法验证。
启动方式:
# 在终端输入
jupyter notebook
浏览器会自动打开一个页面,点"New" → "Python 3"就能新建一个笔记本。界面很直观,上面是代码框,下面是输出结果。我在项目中经常用它来做振动信号的实时可视化,一边调参数一边看波形变化,效率很高。
Shift + Enter 运行当前单元格,并自动创建下一个。按 Esc + M 可以把单元格切换成Markdown模式,方便写注释和公式。
你想想看,传统方式写个脚本,改个参数就得重新跑整个文件。用Jupyter Notebook,你只需要重新跑那个单元格就行。这就是为什么很多数据科学家都爱用它。
1.3 NumPy快速入门——数组运算的基础
做轴承故障诊断,振动信号本质上就是一串数字。NumPy就是专门处理这种数字数组的库。它的核心是ndarray(N维数组),比Python自带的列表快得多。
创建数组:
import numpy as np
# 从列表创建
arr = np.array([1, 2, 3, 4, 5])
# 创建全零数组
zeros = np.zeros(10)
# 创建等差数列(模拟时间轴)
time = np.linspace(0, 1, 1000) # 0到1秒,1000个点
常用操作:
| 操作 | 代码 | 说明 |
|---|---|---|
| 数组形状 | arr.shape |
返回维度信息 |
| 索引切片 | arr[0:10] |
取前10个元素 |
| 统计运算 | np.mean(arr) |
计算均值 |
| 傅里叶变换 | np.fft.fft(arr) |
快速傅里叶变换 |
我记得刚开始用NumPy时,最不习惯的就是它没有循环。后来才明白,向量化运算才是它的精髓。比如你要计算所有振动数据的平方和,用 np.sum(arr**2) 一行搞定,比写for循环快几十倍。
1.4 SciPy快速入门——信号处理的瑞士军刀
SciPy建立在NumPy之上,提供了更多高级功能。对于咱们做故障诊断的,最常用的就是signal模块。
信号处理常用函数:
from scipy import signal
# 生成一个模拟的轴承振动信号(正弦波+噪声)
t = np.linspace(0, 1, 1000)
vibration = np.sin(2 * np.pi * 50 * t) + 0.5 * np.random.randn(1000)
# 低通滤波(滤掉高频噪声)
b, a = signal.butter(4, 0.1, 'low') # 4阶巴特沃斯滤波器
filtered = signal.filtfilt(b, a, vibration)
# 计算功率谱密度
f, Pxx = signal.welch(vibration, fs=1000)
为什么会推荐filtfilt而不是lfilter?因为filtfilt是零相位滤波,不会引入相位偏移。这对轴承故障诊断很重要——你想想看,如果滤波后信号的峰值位置都变了,那还怎么准确判断故障时刻?
1.5 本章知识体系
下面这张图总结了咱们这一章的核心内容,我建议你保存下来,后面学习时随时对照:
1.6 动手试试
光看不练可不行。我建议你现在就打开终端,按下面的步骤走一遍:
- 安装Anaconda(大概10分钟)
- 创建虚拟环境
conda create -n bearing_diag python=3.9 - 激活环境,启动Jupyter Notebook
- 新建一个笔记本,输入
import numpy as np和import scipy as sp - 试试生成一个正弦波,画个图看看
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
好了,这一章的内容就这些。环境搭好了,后面咱们就能直接上手处理真实的轴承振动信号了。记住:工欲善其事,必先利其器。把基础打牢,后面学起来才顺畅。