Zing 论坛

正文

SciTeX-NN:面向信号处理的PyTorch神经网络构建模块库

一个专门为信号处理设计的PyTorch神经网络模块库,提供可微分的Hilbert变换、小波变换、频谱分析、相位-幅度耦合等信号处理层,以及通道增强和1D架构等深度学习组件。

PyTorch信号处理Hilbert变换小波变换神经网络EEG时频分析深度学习SciTeX相位幅度耦合
发布时间 2026/05/22 21:15最近活动 2026/05/22 21:25预计阅读 4 分钟
SciTeX-NN:面向信号处理的PyTorch神经网络构建模块库
1

章节 01

导读 / 主楼:SciTeX-NN:面向信号处理的PyTorch神经网络构建模块库

一个专门为信号处理设计的PyTorch神经网络模块库,提供可微分的Hilbert变换、小波变换、频谱分析、相位-幅度耦合等信号处理层,以及通道增强和1D架构等深度学习组件。

2

章节 02

项目背景与定位

在深度学习与信号处理交叉的领域,研究者常常面临一个尴尬的局面:信号处理算法(如Hilbert变换、小波分析、滤波器组)通常以NumPy或MATLAB实现,而深度学习框架(如PyTorch)则需要可微分的张量操作。将两者桥接往往需要繁琐的自定义层实现,这不仅增加了开发成本,也容易引入错误。

SciTeX-NN应运而生,作为SciTeX生态系统中的神经网络构建模块组件,它提供了一系列即插即用的PyTorch模块,专门面向信号处理任务。这些模块具备三个关键特性:可微分(支持反向传播)、支持批处理(适配现代深度学习的数据组织方式)、可组合(能够像搭积木一样构建复杂架构)。

3

章节 03

信号变换层

信号变换是SciTeX-NN的核心能力,涵盖从时域到频域、从线性到非线性的多种分析手段:

Hilbert变换:基于FFT实现的可微分解析信号提取,能够同时获得信号的相位和幅度包络。相比scipy.signal.hilbert,这个实现完全集成在PyTorch的计算图中,支持自动求导。

小波变换:实现Morlet连续小波变换(CWT),提供自适应的时频分辨率。与短时傅里叶变换相比,小波变换在分析非平稳信号时能够更好地平衡时间分辨率和频率分辨率。

频谱图:基于STFT的频谱幅度计算,支持多通道信号的并行处理。

功率谱密度(PSD):与scipy.signal.welch对标的实现,用于分析信号的频域能量分布。

滤波器组:包括低通、高通、带通、带阻滤波器,采用FIR初始化,支持可学习的频带中心(DifferentiableBandPassFilter)。

高斯滤波器:时域平滑处理,核大小与sigma参数成比例(kernel = 6·sigma)。

4

章节 04

耦合与特征提取

对于神经振荡分析,SciTeX-NN提供了两种重要的耦合度量:

相位-幅度耦合(PAC):检测低频相位与高频幅度之间的统计关联,这是神经科学中研究跨频率交互的重要指标。

调制指数(ModulationIndex):基于Tort等人2010年提出的KL散度方法,量化相位-幅度耦合的强度。

5

章节 05

Dropout变体

标准nn.Dropout以元素为单位进行随机丢弃,但某些场景需要更结构化的正则化策略:

AxiswiseDropout:沿指定轴进行整体丢弃,例如可以丢弃整个通道或整个时间窗口。

DropoutChannels:专门用于通道维度的整体丢弃,适用于自监督学习中的掩码预测任务。

6

章节 06

数据增强模块

ChannelGainChanger:基于softmax权重的通道级增益调整,实现随机幅度调制。

FreqGainChanger:基于softmax权重的频带级增益调整,利用julius库实现可微分的频域操作。

SwapChannels:随机通道置换,增强模型对通道顺序的鲁棒性。

7

章节 07

空间注意力与架构

SpatialAttention:通过1×1卷积实现通道注意力机制,为每个通道学习自适应的增益系数。

ResNet1D:一维ResNet骨干网络,适用于时间序列分类任务。

MNet1000:四阶段Conv2d分类器,专为EEG/MEG等神经信号设计。

BNet/BNet_Res:B形多模态包装器,支持融合来自不同来源的特征。

8

章节 08

一致的API设计

所有模块遵循PyTorch的nn.Module规范,输入张量形状统一为(batch, channels, samples)。信号处理层操作最后一个(时间)轴,通道感知增强操作在dim=1上进行。这种一致性使得模块可以无缝组合:

import torch
import scitex_nn

x = torch.randn(8, 19, 1024)  # (batch, channels, samples)

# 信号处理流程
env = scitex_nn.Hilbert(seq_len=1024)(x)
phase, amplitude = env[..., 0], env[..., 1]

# 数据增强
drop = scitex_nn.AxiswiseDropout(dropout_prob=0.5, dim=1).train()
y = drop(x)  # 整体丢弃某些通道