第一讲:课程导论——FFT频谱分析基础、CNN分类原理与项目概览
各位同学好,我是你们这门课的主讲。在信号处理这个行当摸爬滚打了十几年,我越来越觉得——频谱分析 + 深度学习,这组合简直是工业界的黄金搭档。
今天这第一讲,咱们不急着写代码。先聊聊为什么要学这门课,以及你将会做出什么东西。
1.1 为什么是FFT?为什么是CNN?
先问大家一个问题:
你拿到一段振动信号,怎么判断机器有没有故障?
你拿到一段语音,怎么识别是谁在说话?
传统做法是:
先做FFT,把时域信号变成频域。然后人工提取特征——峰值频率、能量分布、谐波结构……最后扔给SVM或者随机森林去分类。
但这里有个坑。
人工特征提取,太依赖经验了。
我记得刚入行那会儿,为了区分两种轴承故障,我花了整整两周调特征参数。结果换个工况,全废了。
后来我尝试用CNN直接对频谱图做分类。
效果出奇的好。
说白了,CNN擅长从图像里自动学特征。你把FFT结果当成一张“频谱图”喂给它,它自己就能找到那些你肉眼看不出来的模式。
核心思想:
- FFT:把信号从时域变到频域,暴露隐藏的频率成分
- CNN:自动学习频谱图中的判别性特征
- 两者结合:端到端的智能诊断/识别系统
1.2 FFT频谱分析基础——你得知道这些
FFT不是魔法,它只是DFT的快速算法。
但很多初学者容易忽略几个关键点。
第一,采样率决定一切。
根据奈奎斯特定理,你的采样率必须大于信号最高频率的两倍。
我见过一个项目,有人用100Hz采样率去分析50Hz的信号,结果频谱混叠得一塌糊涂。嗯,那是个惨痛的教训。
第二,频谱分辨率取决于采样时长。
分辨率 = 采样率 / FFT点数。
你想分辨两个靠得很近的频率?那就得采足够长的时间。
第三,加窗很重要。
直接对截断信号做FFT,会产生频谱泄漏。
我个人习惯用汉宁窗,大部分场景下表现均衡。
小技巧:
做频谱分析时,先不加窗看一遍,再加窗看一遍。对比一下,你就能直观感受到“泄漏”长什么样。
1.3 CNN分类原理——别被“深度学习”吓到
CNN说白了就是:
用一堆卷积核在图像上滑动,提取局部特征。
它的核心组件就这几个:
| 组件 | 作用 | 我的经验 |
|---|---|---|
| 卷积层 | 提取边缘、纹理等局部模式 | 核大小3×3最常用,5×5也行 |
| 池化层 | 降维,保留主要特征 | 最大池化比平均池化更鲁棒 |
| 全连接层 | 综合全局特征做分类 | 别太多层,容易过拟合 |
| 激活函数 | 引入非线性 | ReLU是默认选择 |
你可能会问:
“为什么CNN能用在频谱图上?”
原因很简单。
频谱图本质上是一张二维图像——横轴是频率,纵轴是时间(或者幅值),颜色深浅代表能量大小。
CNN在图像分类上的能力,直接迁移过来就行。
注意:
千万别把原始时域信号直接扔给CNN。我试过,效果很差。
一定要先做FFT,把信号变成频域表示。这是经验之谈。
1.4 课程目标——学完你能做什么?
这门课不是纯理论课。
我的目标是:学完30讲,你能独立完成一个完整的FFT频谱特征CNN分类项目。
具体来说:
- 掌握FFT频谱分析的核心技能——采样、加窗、分辨率、频谱图绘制
- 理解CNN分类的基本原理——卷积、池化、全连接、训练流程
- 能搭建完整的分类流水线——从信号采集到模型部署
- 学会调优和避坑——过拟合、数据不平衡、模型轻量化
一句话总结:
给你一段振动信号或语音信号,你能用FFT+CNN自动识别出它的类别。这就是这门课的价值。
1.5 项目概览——我们要做什么?
整个课程围绕一个实战项目展开:
基于FFT频谱特征的滚动轴承故障分类
数据集是公开的CWRU轴承数据。
包含四种状态:
- 正常
- 内圈故障
- 外圈故障
- 滚动体故障
我们的流程是这样的:
原始振动信号 → 分段 → FFT → 频谱图 → CNN模型 → 分类结果
每一步我都会带着你手写代码。
从数据加载、预处理,到模型搭建、训练、评估,最后部署成可用的工具。
我记得第一次跑通这个流程时,准确率到了98%以上。
那种感觉,怎么说呢——
就像你亲手造了一台“信号听诊器”,机器哪里坏了,一听就知道。
1.6 你需要准备什么?
技术栈很简单:
| 工具 | 版本建议 | 用途 |
|---|---|---|
| Python | 3.8+ | 主编程语言 |
| NumPy | 1.21+ | 数值计算 |
| SciPy | 1.7+ | FFT和信号处理 |
| Matplotlib | 3.4+ | 频谱图可视化 |
| PyTorch | 1.10+ | 深度学习框架 |
硬件方面,有GPU最好,没有也能跑。
我早期做实验时就用CPU,一个模型训练十几分钟,喝杯咖啡的功夫。
给新手的建议:
别急着装环境。先跟着第一讲把FFT和CNN的概念理清楚。
代码部分从第二讲开始,我会手把手带你配环境。
1.7 写在最后
这门课不会让你成为理论大师。
但会让你成为一个能动手解决问题的工程师。
我见过太多人,理论背得滚瓜烂熟,一上手就懵。
也见过一些人,代码写得飞起,但连频谱泄漏是什么都不知道。
我希望你学完这门课后,
既能讲清楚原理,也能写出能用的代码。
这才是真正的“实战”。
好,第一讲就到这里。
下一讲,我们开始动手——用Python做FFT频谱分析。
公众号:蓝海资料掘金营,微信deep3321