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 对信号进行了连续小波时频分析,并可视化了结果。掌握这一技巧后,您就能够分析更复杂的信号数据,并提取其中重要的时频特征。不断练习和深入调研是学习信号处理的关键,祝您在学习之路上取得更多的成功!