如何构造解析小波 解析小波变换将Hilbert变换与小波分析紧密结合在一起具有更强的自适应分析能力。 本程序使用双树复小波变换创建近似解析小波并仔细构造两个滤波器组中的 FIR 滤波器获得了近似解析小波变换并继承双树变换的优势。 使用第2棵树作为实部第2棵树作为虚部形成复小波。 绘制小波的实部和虚部并绘制频谱解析小波这玩意儿挺有意思的传统小波虽然擅长时频分析但碰到非平稳信号就容易懵圈。这时候解析小波就派上用场了——它能通过Hilbert变换给小波加上透视眼让信号的正负频率成分看得更清楚。今天咱们用Python手把手造一个近似解析小波走着~先搞个双树复小波框架玩玩。这俩滤波器组就像兄弟俩一个管实部一个管虚部配合起来就能形成解析特性import numpy as np import matplotlib.pyplot as plt from scipy.fft import fft, fftfreq def make_filters(length10): # 第一棵树用Daubechies小波 h0 np.array([0.32580343, 1.01094572, 0.89220140, -0.03957503, -0.26450717, 0.04361630, 0.04650360, -0.01498699]) h0 / np.sum(h0) # 第二棵树搞个偏移版 h1 h0[::-1].copy() # 反转 h1[1::2] * -1 # 奇索引取反 return h0, h1这里h0和h1这对兄弟滤波器就像照镜子——不仅顺序反过来奇数项还特意反号。这种骚操作能保证两个小波形成90度相位差刚好对应复数的实部和虚部。接下来让这俩滤波器干活儿生成复小波def complex_wavelet(h0, h1, levels5): # 实部树 real_wave h0.copy() # 虚部树 imag_wave h1.copy() for _ in range(levels-1): real_wave np.convolve(real_wave, h0, full) imag_wave np.convolve(imag_wave, h1, full) return real_wave, imag_wave这个迭代卷积的过程就像叠罗汉每次卷积都让小波的尺度翻倍。注意full参数保留全部卷积结果这样能完整展示小波的形态特征。如何构造解析小波 解析小波变换将Hilbert变换与小波分析紧密结合在一起具有更强的自适应分析能力。 本程序使用双树复小波变换创建近似解析小波并仔细构造两个滤波器组中的 FIR 滤波器获得了近似解析小波变换并继承双树变换的优势。 使用第2棵树作为实部第2棵树作为虚部形成复小波。 绘制小波的实部和虚部并绘制频谱是时候看看成果了咱们把时域波形和频谱都拉出来遛遛h0, h1 make_filters() real_part, imag_part complex_wavelet(h0, h1) # 画时域波形 plt.figure(figsize(12,4)) plt.plot(real_part, labelReal Part) plt.plot(imag_part, --, labelImaginary Part) plt.title(解析小波时域波形) plt.legend() # 算频谱 n len(real_part) freq fftfreq(n) real_fft np.abs(fft(real_part)) imag_fft np.abs(fft(imag_part)) plt.figure(figsize(12,4)) plt.plot(freq[:n//2], real_fft[:n//2], labelReal Spectrum) plt.plot(freq[:n//2], imag_fft[:n//2], --, labelImag Spectrum) plt.title(幅度谱) plt.legend()看看频谱图会发现个神奇现象实部和虚部的频谱在负频率区域像被切了一刀似的幅度几乎归零。这正是解析小波的标志性特征——只保留正频率成分相当于给信号做了个天然的Hilbert变换这种双树结构还有个隐藏福利两棵树的滤波器在设计时特意保持了1/2采样间隔的延迟。就像两个人交替迈步自然形成正交基抗混叠能力直接拉满。实际用起来你会发现即使信号有突发瞬变成分这种小波也能稳稳抓住不会漏拍。最后给个实用小技巧想调节解析精度的话可以适当调整滤波器长度。但别贪心太长会增加计算量一般12-20阶的FIR滤波器就能在精度和效率间找到甜蜜点啦