算法实现了一种基于散射变换理论的信号多尺度特征提取方法,通过构建多层小波分解网络对信号进行深度特征挖掘。
首先通过模拟生成包含多频率成分的测试信号并执行零填充预处理,确保信号长度满足小波变换要求。然后构建多分辨率小波滤波器组,在不同尺度级别上生成高斯或汉宁窗形式的滤波器,同时设计对应的低通滤波器组用于信号平滑处理。
在核心计算阶段,算法采用分层递进的计算架构,从原始信号开始逐层应用小波滤波、模运算和下采样操作,形成多阶散射路径。每一层通过对前一层信号的滤波结果取模值并再次滤波,逐步提取信号的时频不变特征。最后将所有阶数的散射系数进行格式化和可视化,形成完整的特征矩阵,为信号分类和识别提供具有平移不变性和稳定性的深层特征表示。
算法流程可适当参考
开始 ↓ 信号加载与预处理 ├─ 生成模拟多频信号 ├─ 信号能量归一化 └─ 零填充至2的幂次方长度 ↓ 多分辨率滤波器组构建 ├─ 设置最大尺度级别 ├─ 生成高斯/汉宁小波滤波器 ├─ 构建低通滤波器组 └─ 计算Littlewood-Paley求和 ↓ 散射变换分层计算 ├─ 初始化第1层路径(原始信号) ├─ 逐层迭代处理(m=1到M+1) │ ├─ 对当前层所有路径信号 │ │ ├─ 傅里叶变换到频域 │ │ ├─ 应用小波滤波器组 │ │ ├─ 反变换并取模值 │ │ ├─ 尺度自适应下采样 │ │ └─ 添加到下一层路径 │ └─ 计算当前层散射系数 │ ├─ 应用低通滤波器 │ ├─ 取模值并下采样 │ └─ 存储散射系数 ↓ 散射系数后处理 ├─ 按阶数整理系数矩阵 ├─ 插值统一系数长度 └─ 构建完整特征矩阵 ↓ 结果可视化展示 ├─ 原始信号波形图 ├─ 滤波器组频域特性 └─ 散射系数热力图 ↓ 结束第一步:测试信号生成与预处理。创建包含多个频率成分的复合信号模拟实际应用场景,对信号进行能量归一化处理消除幅值影响,通过零填充将信号长度扩展到最近的2的幂次方以满足小波变换的计算要求。
第二步:多分辨率滤波器组系统构建。根据设定的最大尺度级别参数,在不同分辨率层级上生成对应的小波滤波器集合,包括高斯包络或汉宁窗形式的振荡滤波器,同时为每个分辨率级别设计配套的低通滤波器用于信号平滑。
第三步:滤波器特性验证分析。计算Littlewood-Paley求和向量验证滤波器组的频域覆盖完整性,确保各滤波器在频域上能够完整覆盖信号的有效频带范围,为后续特征提取提供理论保证。
第四步:散射变换初始化设置。建立分层存储结构用于记录各阶路径信号和散射系数,将原始信号作为第一层路径输入,为后续多层分解计算奠定基础。
第五步:分层散射路径迭代计算。从低阶到高阶逐层处理,对每一层的所有路径信号执行傅里叶变换转换到频域,应用对应分辨率的小波滤波器组进行频域滤波,通过反变换回到时域后取模值得到包络信号,根据尺度关系进行自适应下采样。
第六步:散射系数提取与存储。在每一层处理过程中,对路径信号应用低通滤波器进行平滑处理,取模值并按照尺度关系下采样后存储为当前层的散射系数,这些系数代表了信号在不同尺度组合下的稳定特征。
第七步:路径信号传递与扩展。将经过小波滤波和模运算处理后的信号作为新的路径信号添加到下一层,形成散射网络的树状扩展结构,逐步挖掘信号的深层时频特征。
第八步:多阶系数整理与格式化。将所有阶数的散射系数按照层级顺序进行整理,通过插值方法将不同长度的系数统一到相同维度,构建完整的特征矩阵便于后续机器学习应用。
第九步:滤波器组特性可视化展示。绘制各分辨率级别下的小波滤波器波形、低通滤波器形态以及Littlewood-Paley求和曲线,直观展示滤波器组的频域覆盖特性。
第十步:散射系数分布热力图显示。以热力图形式展示所有阶数散射系数的分布情况,通过颜色深浅反映特征强度,清晰呈现信号在多尺度多阶数下的特征分布模式,为信号分析和分类提供直观依据。
def main(): """主函数:执行完整的散射变换流程""" # 参数设置 M = 2 # 散射变换阶数(深度) J = 5 # 最大尺度级别(分解层数) print("=== 开始基于多尺度小波分解的信号特征提取 ===") print(f"变换阶数: {M}, 尺度级别: {J}") # 1. 加载信号 sig, N, orig_len, sr = nanoscat_load('simulated_signal', duration=0.5) print(f"信号长度: {len(sig)} (原始有效长度: {orig_len})") # 绘制原始信号 plt.figure(figsize=(12, 4)) plt.plot(np.arange(len(sig))/sr, sig) plt.title('Original Signal (with zero-padding)') plt.xlabel('Time (s)') plt.ylabel('Amplitude') plt.grid(True) plt.tight_layout() plt.show() # 2. 生成滤波器组 psi, phi, lp = nanoscat_make_filters(N, J, shape='gaussian') print(f"滤波器组生成完成: {len(psi)}种分辨率") # 3. 可视化滤波器 nanoscat_display_filters(psi, phi, lp) # 4. 计算散射变换 print("开始计算散射变换...") S, U = nanoscat_compute(sig, psi, phi, M) print(f"变换计算完成: 共生成 {sum(len(v) for v in S.values())} 个散射系数") # 5. 格式化并绘制散射系数 orders = list(range(1, M+2)) # 从1阶到M+1阶 scat_matrix = nanoscat_format(S, orders) plt.figure(figsize=(12, 8)) plt.imshow(scat_matrix, aspect='auto', cmap='viridis') plt.title('Scattering Coefficients (All Orders)') plt.xlabel('Time Frame') plt.ylabel('Coefficient Index (Order/Scale)') plt.colorbar(label='Magnitude') # 添加阶数分隔线 y_ticks = [] y_labels = [] cum_height = 0 for order in orders: num_coeffs = len(S.get(order, [])) if num_coeffs > 0: plt.axhline(y=cum_height - 0.5, color='white', linestyle='--', alpha=0.7) y_ticks.append(cum_height + num_coeffs//2) y_labels.append(f'Order {order}') cum_height += num_coeffs plt.yticks(y_ticks, y_labels) plt.tight_layout() plt.show() print("=== 处理完成 ===")参考文章:
多尺度小波不变特征分层提取算法-以模拟信号为例(Python) - 哥廷根数学学派的文章
https://zhuanlan.zhihu.com/p/1968015321056147395
工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。