1. 为什么你需要Morlet小波变换?一个信号分析老兵的视角
干了这么多年信号处理,我见过太多人一上来就抱着傅里叶变换不放,结果对着一个心电信号或者一段股票价格曲线,死活说不清那个异常波动到底发生在哪一秒。傅里叶变换就像给你一张乐谱,告诉你这首曲子用了哪些音符(频率),但它没法告诉你第二小节第三拍的那个高音“哆”具体是什么时候响起的。这时候,你就需要一件更趁手的兵器——小波变换,而Morlet小波,就是这件兵器里最经典、最常用的一把“瑞士军刀”。
简单来说,Morlet小波变换能帮你同时看清信号的“时间”和“频率”。想象一下你在观察一段河流的水流:傅里叶变换只能告诉你这条河总体上有多少湍流(高频)和多少平缓的暗流(低频);而Morlet小波变换则像给你一部延时摄影机,不仅能告诉你湍流和平缓暗流各有多少,还能精确指出“下午3点05分,在河中央位置出现了一个持续2秒的漩涡(特定时间、特定频率的事件)”。这就是时频分析的魅力,它让你不再对信号的变化“睁眼瞎”。
那么,谁最需要这个工具呢?如果你是做机械故障诊断的工程师,想从振动信号里揪出轴承是哪一刻开始出现细微裂纹的;如果你是脑电波(EEG)或心电信号(ECG)的研究者,想定位某个特征波(比如α波)具体出现和消失的时间;或者你是在分析金融时间序列、气候变化数据、甚至音频信号,但凡你的数据随着时间变化,并且你想知道“什么时候发生了什么变化”,Morlet小波变换就是你工具箱里不可或缺的利器。它不挑食,对非平稳信号(统计特性随时间变化的信号)尤其友好,这也是它比传统傅里叶方法更强大的地方。
接下来,我不会跟你大谈特谈复杂的数学公式推导,那玩意儿留给教科书。咱们直接上手,用Python代码和真实的案例,一步步带你从生成数据、做变换、画图,到最终看懂那些令人眼花缭乱的热图和时频图,让你真正能把这套方法用在自己的项目里。我踩过的坑、总结的技巧,都会毫无保留地分享给你。
2. 动手之前:理解核心概念与准备工作
在敲代码之前,花几分钟把几个核心概念捋清楚,后面看图解读才能心里有底。不然,你面对输出结果,可能只是一脸茫然地看着一堆彩色格子。
2.1 尺度、频率与时间:小波变换的“三维眼镜”
首先,我们必须彻底弄懂“尺度”这个概念,它是小波变换的灵魂。你可以把“尺度”想象成一把可伸缩的“观测尺”或“时间窗口”。
- 尺度小(比如尺度=1):这把观测尺在时间上“缩得很短”,只覆盖很短的一段时间。因为它看得细,所以对信号里快速变化的成分(高频)特别敏感。好比用放大镜看树叶的脉络,细节(高频波动)一览无余,但你看不到整棵树的轮廓。
- 尺度大(比如尺度=30):这把观测尺在时间上“拉得很长”,覆盖了很长的时间段。因为它看得广,所以擅长捕捉信号里缓慢变化的趋势(低频)。好比退后几步看整棵树,你能看清树冠的形状(长期趋势),但看不清某片叶子的锯齿。
所以,尺度和频率是反比关系:尺度越小,对应的频率越高;尺度越大,对应的频率越低。Morlet小波变换就是同时使用无数把不同长度的“观测尺”,从最短到最长,对信号的每个时间点都量一遍,记录下每把尺子在该时间点“看到”的信号强度。这个强度,就是小波系数。
最终,我们得到一个三维的数据立方体:X轴是时间,Y轴是尺度(对应频率),Z轴是小波系数的强度(通常用颜色深浅表示)。我们平时看到的热图,就是这个三维立方体在“时间-尺度”平面上的俯视图,颜色代表高度(强度)。
2.2 环境搭建与数据准备
理论说再多不如跑行代码。我们使用Python,因为它有强大的科学计算生态。确保你安装了以下库:
pip install numpy matplotlib pywt scipy
numpy: 数据处理基石。matplotlib: 画图神器,热图、等高线图都靠它。pywt: 专业的小波变换库,我们主要用它来生成Morlet小波函数。scipy: 这里我们主要用它的信号生成模块来创建示例信号。
为了演示,我们创建一个包含多种成分的合成信号,这样你能在结果中清晰地看到对应特征:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 1. 设置基本参数
sampling_rate = 1000 # 采样率 1000 Hz
duration = 5 # 信号时长 5 秒
t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False) # 时间轴
# 2.


8856

被折叠的 条评论
为什么被折叠?



