第一章:信号与系统基础回顾
各位同学,欢迎来到《信号生成与机器学习融合实战》。我是你们的老朋友,一个在信号处理领域摸爬滚打十几年的工程师。今天咱们先不急着上机器学习,得把地基打牢。信号与系统,说白了就是这门课的“普通话”。你连信号长什么样、怎么拆解它都不清楚,后面那些花哨的模型根本跑不起来。
我个人习惯是,每接手一个新项目,第一件事就是盯着原始波形看十分钟。别笑,这比跑任何算法都管用。好,咱们开始。
1.1 连续信号与离散信号:两个世界的故事
现实世界是连续的。温度、电压、声音,这些物理量随时间平滑变化,这就是连续信号。但计算机是离散的,它只能处理一串串数字。所以,我们得把连续信号“掰碎”成离散信号。
你想想看,这就像拍电影。现实是连续的动作,但胶片是一帧一帧的。只要帧率够高,人眼就感觉不到卡顿。信号处理也是这个道理。
核心区别:
- 连续信号:x(t),t是连续实数。数学上完美,但无法直接存储。
- 离散信号:x[n],n是整数索引。计算机能处理,但丢失了时间点之间的信息。
我在项目中遇到过最典型的坑,就是有人把传感器采集的离散数据直接当连续函数做积分。结果算出来的能量值差了十万八千里。记住,离散信号只有采样点,没有“中间值”。
1.2 傅里叶变换:换个角度看世界
傅里叶变换,这可能是信号处理里最伟大的工具。它告诉我们:任何信号都可以分解成不同频率的正弦波之和。
为什么要这么做?因为时域里乱糟糟的波形,到了频域就变得井井有条。比如一个心跳信号,时域里看着就是一堆起伏,但傅里叶变换后,你能清楚看到心率对应的主频,以及各种噪声干扰的频率成分。
公式我就不推了,咱们直接看核心思想:
连续傅里叶变换(CTFT):
X(f) = ∫ x(t) * e^(-j2πft) dt
离散傅里叶变换(DFT):
X[k] = Σ x[n] * e^(-j2πkn/N)
嗯,这里要注意。实际工程中我们几乎不用CTFT,因为计算机算不了积分。我们用的是DFT,以及它的快速算法FFT。FFT是信号处理工程师的瑞士军刀,后面你会反复用到它。
我的小技巧: 刚开始学FFT时,别纠结数学推导。你只需要记住:输入N个时域点,输出N个频域点。输出点k对应的频率是 k * (采样率/N)。就这么简单。
1.3 采样定理与混叠效应:别让数据骗了你
这是本章的重头戏,也是我踩坑最多的地方。
奈奎斯特采样定理说:要无失真地恢复一个连续信号,采样频率必须大于信号最高频率的两倍。
为什么会这样?说白了,采样频率不够,高频信号就会“伪装”成低频信号,混进你的数据里。这就是混叠效应。
我曾经犯过的错: 有一次做音频降噪,我采集了一段人声,采样率设成了8kHz。我以为人声最高频率也就3kHz,够用了。结果处理完一听,声音里多了一种奇怪的“嗡嗡”声。查了半天才发现,环境里有个4kHz的空调噪声,被混叠成了4kHz - 8kHz/2 = 0Hz的直流分量。从那以后,我每次采样前都会先加一个抗混叠滤波器。
抗混叠滤波器,说白了就是一个低通滤波器。在采样之前,把高于奈奎斯特频率的成分全部滤掉。这是工程上的标准做法,千万别省。
咱们用个表格总结一下:
| 采样情况 | 条件 | 结果 |
|---|---|---|
| 过采样 | fs > 2 * f_max | 信号完整保留,可完美重建 |
| 临界采样 | fs = 2 * f_max | 理论上可重建,但工程上很难 |
| 欠采样 | fs < 2 * f_max | 发生混叠,信号失真 |
你想想看,如果采样率刚好等于两倍最高频率,那每个周期只采两个点。正弦波还好,但如果是方波,那两个点可能刚好都在零值上,你根本看不出这是个方波。所以工程上一般取3-5倍,甚至更高。
知识体系总览
下面这张图,是我自己画的本章知识结构。你可以把它当作一张地图,随时回来看看。
这张图里,三个模块是并列的,但实际应用中它们是串联的。你拿到一个连续信号,先采样变成离散信号,然后用FFT分析频谱,最后根据频谱决定要不要调整采样率或加滤波器。每一步都离不开对基础概念的理解。
避坑指南: 我建议你在做任何信号处理项目前,先问自己三个问题:
- 我的信号最高频率是多少?
- 我的采样率够不够?
- 我有没有加抗混叠滤波器?
这三个问题能帮你避免80%的低级错误。
好了,第一章就到这里。内容不多,但都是硬骨头。你把这些概念嚼碎了,后面学滤波器设计、时频分析、甚至用深度学习做信号生成,都会轻松很多。