基于scipy.signal.cwt的小波变换解析:分离同频异步信号
同频不同到达时间信号分离的小波变换咨询
实验背景
我需要分离单个接收信号中频率近似相同但到达时间不同的信号。实验装置为:在细长结构中激发行波(约0ms时可见),行波沿结构传播至末端反射后返回并被接收(约6.5ms时可见)。激发信号为扭转模态,但接收信号中可能存在其他模态,该信号由大量同频小振幅反射叠加而成,目标是分离对应细长结构不同特征的反射信号。
当前方法与结果
我认为小波变换是最佳方法,因此使用scipy.signal.cwt并自定义了小波函数——该小波与初始激发行波形状一致,逻辑是所有反射信号形式相近。通过小波变换尝试对这些信号进行时域分离,生成了以下截图:
- Image1、Image3:完整信号(不同配色)
- Image2、Image4:低振幅区域(不同配色),即感兴趣区域(约1.2ms至6.2ms)
核心咨询问题
- Image2和Image4中的各类特征反映了该信号区域的何种构成?
- 现有信息是否足以分离接收信号中不同的约10kHz分量?如何实现这种分离?
- 小波变换是否是此类同频信号分离的最佳方法(已尝试STFT,效果远差于此)?
核心Python代码
import numpy as np from scipy import signal import matplotlib.pyplot as plt # signal为实验获取的原始数据数组 t = signal[71000:276000,0] y = signal[71000:276000,3] sample_frequencies = np.arange(0.25, 50.25, 0.25) array_of_tens = np.full(200, 10.0) widths = array_of_tens/sample_frequencies cwtdata = signal.cwt(y, function1, widths) cwtdata_yflip = np.flipud(cwtdata) plt.imshow(cwtdata_yflip, extent=[t[0], t[(len(t)-1)], 0, 50], cmap='RdYlGn', aspect='auto', vmax=abs(cwtdata_yflip).max(), vmin=-abs(cwtdata_yflip).max()) plt.plot(t, (20*y)+35, color='#016937', lw=0.5) # 省略其他绘图设置 plt.show()
注:function1是生成对应sample_frequencies数组特定宽度的归一化小波的函数
附图说明
- 完整信号(原始配色)
- 低振幅区域/感兴趣区域(原始配色)
- 完整信号(自定义配色)
- 低振幅区域/感兴趣区域(自定义配色)
内容的提问来源于stack exchange,提问作者UnkindWharf
相关产品推荐
相关产品推荐

