Python 连续小波时频分析入门指南
一、概述
连续小波变换(Continuous Wavelet Transform, CWT)是一种强大的信号分析工具,广泛应用于物理学、工程以及生物医学等领域。它能捕捉不同频率成分的时变特性,是信号处理中的重要技术。
二、流程概述
在进行连续小波时频分析时,通常需要经历以下几个步骤。下面的表格展示了这个流程的关键步骤:
步骤 | 描述 |
---|---|
1. 数据准备 | 准备需要分析的信号数据 |
2. 导入依赖库 | 导入必要的 Python 库 |
3. 小波变换 | 使用小波函数对信号执行转化 |
4. 时频图展示 | 将小波变换结果可视化 |
5. 结果解释 | 解释时频图的含义和结果 |
三、具体实现
1. 数据准备
首先,我们需要准备一段信号,这里我们以一个简单的正弦信号为例:
import numpy as np
import matplotlib.pyplot as plt
# 生成时间序列
fs = 1000 # 采样频率
t = np.arange(0, 1, 1/fs) # 生成0到1秒的时间序列
# 生成信号:频率为10Hz的正弦波
signal = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 50 * t)
# 绘制信号
plt.figure(figsize=(10, 4))
plt.plot(t, signal)
plt.title('Original Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid()
plt.show()
2. 导入依赖库
在进行小波变换之前,需要导入相应的库:
import pywt # 导入PyWavelets库
import matplotlib.pyplot as plt # 导入Matplotlib用于绘图
3. 小波变换
接下来,使用连续小波变换对信号进行转换。这里我们使用Morlet小波:
# 选择小波函数
wavelet = 'cmor' # 使用复 Morlet 小波
# 执行小波变换
coefficients, frequencies = pywt.cwt(signal, wavelet, np.arange(1, 128), sampling_period=1/fs)
# coefficients: 小波系数
# frequencies: 小波变换后的频率
4. 时频图展示
最后,绘制时频图(即小波系数的绝对值)以展示结果:
plt.figure(figsize=(12, 6))
plt.imshow(np.abs(coefficients), extent=[0, 1, 1, 128], aspect='auto', cmap='jet',
ylabel='Frequency (Hz)', xlabel='Time (s)')
plt.title('Time-Frequency Analysis using Continuous Wavelet Transform')
plt.colorbar(label='Magnitude')
plt.show()
5. 结果解释
在时频图中,横轴代表时间,纵轴代表频率(Hz),颜色的深浅表示频率成分的强度。我们可以从该图中观察到在10Hz和50Hz频率下,信号的成分相对明显。
四、结果可视化(饼状图)
为了更好地理解信号在各频率成分上的能量分布,我们可以使用饼状图展示各频率成分的占比。
# 计算频率成分能量
energy = np.sum(np.abs(coefficients)**2, axis=1)
labels = [f"{freq} Hz" for freq in np.arange(1, 128)]
plt.figure(figsize=(8, 8))
plt.pie(energy[1:9], labels=labels[1:9], autopct='%1.1f%%', startangle=140)
plt.axis('equal') # Equal aspect ratio ensures pie chart is circular.
plt.title('Energy Distribution Among Frequency Components')
plt.show()
pie
title Energy Distribution Among Frequency Components
"1 Hz": 10
"2 Hz": 15
"3 Hz": 20
"4 Hz": 25
"5 Hz": 30
五、总结
通过以上步骤,我们成功地使用 Python 对信号进行了连续小波时频分析,并可视化了结果。掌握这一技巧后,您就能够分析更复杂的信号数据,并提取其中重要的时频特征。不断练习和深入调研是学习信号处理的关键,祝您在学习之路上取得更多的成功!