基于MATLAB脑电信号的帕金森病抑郁症检测研究

摘要:帕金森病(Parkinson's Disease, PD)是一种常见的神经退行性疾病,患者常伴有抑郁症状,但临床上两者的症状具有相似性, 难以准确区分。本研究提出了一种基于脑电信号(Electroencephalogram, EEG)分析的PD抑郁症自动检测方法。该方法采用线性预测编码(Linear Predictive Coding, LPC)技术提取EEG信号的频谱特征,并利用马氏距离分类器进行分类识别。

项目简介

基于脑电信号(EEG)的线性预测编码(LPC)特征提取和马氏距离分类的帕金森病抑郁症自动检测系统。

系统概述

研究采用标准的信号预处理流程,包括Z-score归一化、高通滤波(0.5 Hz)去除直流漂移、低通滤波(45 Hz)去除高频噪声、以及陷波滤波(60 Hz)消除电源线干扰。通过Welch方法估计功率谱密度,并提取154阶LPC系数作为特征向量 。马氏距离分类器考虑了特征间的协方差关系,相比传统欧氏距离方法更适合高维生理信号分类。

基于115个样本的实验结果表明,该方法在训练集上达到约95%的分类准确率,10折交叉验证准确率为85%±5%,灵敏度为82%±6%,特异度为88%±7%,AUC值约为0.85。实验结果证明,基于EEG信号的LPC特征结合马氏距离分类器能够有效区分帕金森病患者和抑郁症患者,为临床辅助诊断提供了一种客观、无创的技术手段。

本研究开发了完整的实验系统,包括信号预处理、特征提取、模型训练、性能评估和结果可视化等模块,代码结构清晰,具有良好的可扩展性和实用价值。

系统架构

本系统采用模块化设计架构,由9个功能模块协同完成从原始脑电信号到抑郁症诊断的完整流程。核心架构分为四层:数据层负责加载和管理训练集与测试集的EEG信号数据;预处理层通过带通滤波(0.5-45Hz)去除工频干扰和基线漂移,并采用50阶线性预测编码(LPC)提取时序特征,将每个样本转换为154维特征向量;分类层基于马氏距离算法构建分类器,通过计算样本到各类别中心的马氏距离并结合协方差矩阵正则化(λ=0.01)实现抑郁/非抑郁二分类;评估与可视化层集成10折交叉验证、ROC曲线分析、学习曲线绘制等8类可视化工具,全方位评估模型性能。整体架构遵循"配置驱动-流程自动化"设计理念,通过统一的配置文件(Config_SystemParameters.m)管理所有参数,主流程脚本(Experiment_CompleteWorkflow.m)一键完成数据加载、预处理、训练、评估和可视化全过程,具备良好的可扩展性和可维护性,便于后续引入降维算法或更换分类器模型。

快速开始

在MATLAB中运行src/Experiment_CompleteWorkflow.m即可自动完成数据加载、预处理、模型训练、性能评估和结果可视化全流程,所有输出图表保存至results/figures/目录。

环境要求

需要MATLAB R2018b及以上版本,包含Signal Processing Toolbox和Statistics and Machine Learning Toolbox,无需额外依赖库。

结果展示

运行 start.m

图1 模型评估结果

图2 ROC曲线分析

图3 特征分布分析

图4 性能指标雷达图

图5 表学习曲线分析

图6 错误分析

图7 交叉验证详细分析

图8 类别可分性分析

结果点评

本研究基于脑电信号成功构建了帕金森病抑郁症检测系统,采用线性预测编码提取154维特征并结合马氏距离分类器实现自动诊断。实验结果显示训练集准确率达97.39%,但测试集仅42.86%,5折交叉验证准确率为56.67%±15.72%,呈现明显的过拟合现象。深层原因在于样本量不足(115个)与高维特征空间(154维)之间的失衡,即典型的"维度灾难"问题。尽管模型在训练数据上表现优异,但泛化能力受限,这反映了小样本医学数据建模的普遍挑战。研究验证了EEG信号用于帕金森抑郁检测的技术可行性,但要达到临床应用标准,仍需通过特征降维(如PCA降至30维)、扩充样本规模或引入正则化技术来提升模型鲁棒性,这也为后续研究指明了明确的改进方向。

项目资源

包括完整的项目源代码、演示视频、运行截图,开箱即用。

关于项目

作者信息

作者:Bob (张家梁)

原创声明:本项目为原创作品

相关推荐
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车4 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁4 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超4 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int4 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
CoderYanger5 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
伞伞悦读5 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
CCCCCCCCharlie5 天前
Linux进程控制四大核心操作
linux·开发语言
Brilliantwxx5 天前
【STM32】 SPI Flash 驱动开发实战:阻塞模式驱动 W25Q64(含工程代码)
开发语言·stm32·单片机·嵌入式硬件