基于卷积傅里叶分析网络 (CFAN)的心电图分类的统一时频方法
一、研究背景与核心问题
ECG分类的挑战:
心电图(ECG)信号分类在心律失常检测、身份识别等领域至关重要,但传统方法难以同时有效整合时域和频域信息。现有方法包括:- 时域分类(CNN1D):直接处理原始信号。
- 频域分类(FFT1D):通过傅里叶变换提取频域特征。
- 时频域分类(SPECT):将信号转为频谱图后用2D CNN处理,但转换过程可能丢失信息。
- 局限:SPECT性能未达预期,需更优的时频融合方案。
FAN的启发:
傅里叶分析网络(FAN)通过正弦/余弦激活函数捕捉周期性特征,但仅用于全连接层,对卷积层未充分探索。
二、创新方法:CFAN架构
核心设计:
- CONV-FAN模块(图10b):
- 将卷积层替换为包含独立权重矩阵的正弦(sin)、余弦(cos)和GELU激活函数的混合模块。
- 比例:GELU : sin : cos = 1:1:1(对比FAN的4:1)。
- CONV-FAN模块(图10b):
- 端到端时频融合:无需预生成频谱图,直接在网络中学习联合特征。
架构细节:
- MIT-BIH/ECG-ID任务(图12):
- 输入 → CONV-FAN(3层,每层32滤波器)→ 跳跃连接+注意力 → 全连接层。
- MIT-BIH/ECG-ID任务(图12):
Apnea-ECG任务(图11):
- 类似结构,但CONV-FAN每层仅4滤波器(总计12)。
- 关键改进:独立权重矩阵(优于共享权重的CSFAN变体)。
三、实验与结果
数据集与预处理:
- MIT-BIH(心律失常分类):109,451个心拍,5类别(正常、室上性早搏等)。
ECG-ID(身份识别):90人,2,456个心拍(图4)。
- pnea-ECG(呼吸暂停检测):15,880个1分钟片段(图3c)。
基准方法对比:
- SPECT(频谱图+EfficientNetB0)、CNN1D、FFT1D、CNN1D-FAN(全连接层替换为FAN)。
性能优势:
方法 MIT-BIH (Acc%) ECG-ID (Acc%) Apnea-ECG (Acc%) SPECT 98.93 95.34 89.86 CNN1D 98.92 95.20 93.90 CFAN 98.95 96.83 95.01 - 统计显著性:CFAN在ECG-ID(p=0.02)和Apnea-ECG(p=0.0009)显著优于次优方法(CNN1D-FAN)。
- 效率:参数量与CNN1D相同,但推理时间略增(表I)。
消融实验:
- 独立权重关键性:CFAN(独立权重)> CSFAN(共享权重),如ECG-ID精度差0.9%。
- 全领域最优:CFAN在时域、频域及时频域任务中均超越基准。
四、贡献与意义
理论突破:
- 首次将傅里叶分析嵌入卷积层,实现端到端时频联合学习。
- 验证周期性激活函数在生物医学信号中的普适性。
应用价值:
- 心律失常分类:刷新MIT-BIH准确率(98.95%)。
- 身份识别:ECG-ID准确率96.83%,优于文献最佳(96%)。
- 呼吸暂停检测:Apnea-ECG准确率95.01%,超越主流方法(如Bhongade的94.77%)。
泛化潜力:
- 架构可扩展至其他时频敏感任务(如脑电、语音分析)。
五、核心代码
CONV-FAN块实现(核心创新)
import tensorflow as tf
from tensorflow.keras.layers import Layer, Conv1Dclass CONV_FAN(Layer):"""CONV-FAN块:融合GELU、正弦、余弦激活的卷积层"""def __init__(self, filters, kernel_size, ratio=(1,1,1), **kwargs):super().__init__(**kwargs)self.filters = filters# 独立权重矩阵的三路卷积(GELU/sin/cos)self.conv_g = Conv1D(filters * ratio[0], kernel_size, padding='same', activation='gelu')self.conv_s = Conv1D(filters * ratio[1], kernel_size, padding='same', activation=tf.sin) # 正弦激活self.conv_c = Conv1D(filters * ratio[2], kernel_size, padding='same', activation=tf.cos) # 余弦激活def call(self, inputs):# 并行三路卷积g_path = self.conv_g(inputs) # GELU路径s_path = self.conv_s(inputs) # 正弦路径c_path = self.conv_c(inputs) # 余弦路径# 沿通道维度拼接 (B, T, C1+C2+C3)return tf.concat([g_path, s_path, c_path], axis=-1)def get_config(self):return {'filters': self.filters}
六、结论
CFAN通过统一时频卷积模块解决了传统方法分割处理的局限,在ECG分类中实现SOTA性能,并为生物医学信号分析提供了新范式。其核心创新在于直接融合傅里叶原理与卷积操作,避免了人工特征工程或信号转换的瓶颈。