
用MATLAB玩转DREAMER情感数据集从数据申请到EEG/ECG信号提取保姆级教程在情感计算领域DREAMER数据集因其独特的低成本和便携式设备采集特性而备受关注。不同于传统医疗级设备采集的数据DREAMER采用Emotiv EPOC脑电耳机和Shimmer2心电传感器为研究者提供了更接近真实场景的生理信号样本。本文将带你从零开始一步步掌握如何用MATLAB处理这个特殊的数据集。1. 数据准备与环境搭建在开始处理DREAMER数据集前确保你的MATLAB环境已经准备就绪。推荐使用R2018b或更高版本因为这些版本对结构体数据的处理更加友好。安装时建议勾选以下工具箱Signal Processing ToolboxStatistics and Machine Learning ToolboxWavelet Toolbox可选用于高级信号分析% 检查必要工具箱是否安装 if ~license(test,Signal_Toolbox) error(需要安装Signal Processing Toolbox); end数据集下载后你会得到一个DREAMER.mat文件和一个PDF文档。建议先完整阅读PDF文档了解数据采集协议和伦理声明。特别注意免责声明部分了解数据使用的法律边界。2. 数据结构深度解析加载数据文件后你会发现DREAMER变量是一个结构体包含多个层级的信息。让我们深入剖析这个结构load(DREAMER.mat); whos DREAMER关键字段解析字段名数据类型描述Data1×23 cell包含23名被试的数据EEG_SamplingRatedoubleEEG采样率(128Hz)ECG_SamplingRatedoubleECG采样率(256Hz)EEG_Electrodescell14个电极位置名称noOfSubjectsdouble被试数量(23)noOfVideoSequencesdouble视频片段数量(18)每个被试的数据又包含以下重要信息subject_data DREAMER.Data{1}; % 第一个被试的数据 disp(fieldnames(subject_data))EEG信号包含baseline和stimuli两部分各18个cell对应18个视频片段ECG信号同样分为baseline和stimuli情感评分Valence效价、Arousal唤醒度、Dominance支配度3. 信号提取实战技巧3.1 EEG信号提取与可视化提取特定被试在特定视频片段下的EEG信号subject_idx 5; % 第5个被试 video_idx 10; % 第10个视频片段 % 获取stimuli期间的EEG数据 eeg_stimuli DREAMER.Data{subject_idx}.EEG.stimuli{video_idx}; % 获取对应baseline数据 eeg_baseline DREAMER.Data{subject_idx}.EEG.baseline{video_idx}; % 绘制AF3电极信号对比 figure; subplot(2,1,1); plot(eeg_baseline(:,1)); % AF3电极在baseline期间 title(Baseline EEG (AF3)); subplot(2,1,2); plot(eeg_stimuli(:,1)); % AF3电极在stimuli期间 title(Stimuli EEG (AF3));注意事项电极顺序与DREAMER.EEG_Electrodes中定义的顺序一致信号未经滤波包含设备本身的噪声时间轴需要根据采样率(128Hz)计算3.2 ECG信号处理要点ECG信号处理有其特殊性特别是这种低成本设备采集的数据ecg_stimuli DREAMER.Data{subject_idx}.ECG.stimuli{video_idx}; % 简单的R峰检测算法示例 [~,locs] findpeaks(ecg_stimuli(:,1),... MinPeakHeight,0.6*max(ecg_stimuli(:,1)),... MinPeakDistance,0.6*DREAMER.ECG_SamplingRate); figure; plot(ecg_stimuli(:,1)); hold on; plot(locs, ecg_stimuli(locs,1),ro); title(ECG信号与R峰检测);低成本ECG设备常见问题处理运动伪迹信号中可能包含明显运动噪声基线漂移使用高通滤波(0.5Hz)可缓解电极接触不良检查信号中是否有长时间平坦线段4. 情感评分关联分析将生理信号与主观评分关联是情感计算的核心。DREAMER提供了三种情感维度的评分valence DREAMER.Data{subject_idx}.ScoreValence(video_idx); arousal DREAMER.Data{subject_idx}.ScoreArousal(video_idx); dominance DREAMER.Data{subject_idx}.ScoreDominance(video_idx); fprintf(视频片段%d的情感评分\n效价%.1f\n唤醒度%.1f\n支配度%.1f\n,... video_idx, valence, arousal, dominance);分析建议计算EEG频带功率(δ, θ, α, β, γ)与评分的相关性分析HRV(心率变异性)指标与唤醒度的关系建立跨被试的通用情感识别模型5. 低成本设备数据的特点与处理策略Emotiv EPOC和Shimmer2采集的数据与医疗级设备有明显差异特性医疗级设备DREAMER设备采样率通常≥1000HzEEG:128Hz, ECG:256Hz电极数量64-256通道EEG:14通道信号质量专业级放大滤波原始信号含更多噪声使用场景实验室环境接近日常环境应对策略预处理增强使用ICA去除眼电伪迹采用小波去噪处理肌电干扰对于ECG使用自适应滤波消除呼吸伪迹特征工程% 示例计算α波段相对功率 fs DREAMER.EEG_SamplingRate; [pxx,f] pwelch(eeg_stimuli(:,1),[],[],[],fs); alpha_band [8 12]; % Hz alpha_power bandpower(pxx,f,alpha_band,psd); total_power bandpower(pxx,f,psd); alpha_relative alpha_power/total_power;跨被试归一化使用z-score对特征进行标准化考虑个体生理差异建立个性化基线6. 完整处理流程示例以下是一个端到端的处理示例从原始数据到特征提取%% 参数设置 subject_id 3; % 选择被试 video_id 7; % 选择视频片段 eeg_channel F3; % 选择电极 channel_idx find(strcmp(DREAMER.EEG_Electrodes,eeg_channel)); %% 数据加载 eeg_stimuli DREAMER.Data{subject_id}.EEG.stimuli{video_id}(:,channel_idx); eeg_baseline DREAMER.Data{subject_id}.EEG.baseline{video_id}(:,channel_idx); %% 预处理 % 1. 去趋势 eeg_stimuli detrend(eeg_stimuli); eeg_baseline detrend(eeg_baseline); % 2. 带通滤波(1-45Hz) [b,a] butter(4,[1 45]/(DREAMER.EEG_SamplingRate/2)); eeg_stimuli_filt filtfilt(b,a,eeg_stimuli); eeg_baseline_filt filtfilt(b,a,eeg_baseline); %% 特征提取 % 时域特征 stimuli_mean mean(eeg_stimuli_filt); baseline_mean mean(eeg_baseline_filt); % 频域特征 [pxx,f] pwelch(eeg_stimuli_filt,[],[],[],DREAMER.EEG_SamplingRate); beta_power bandpower(pxx,f,[13 30],psd); %% 情感评分获取 valence DREAMER.Data{subject_id}.ScoreValence(video_id); arousal DREAMER.Data{subject_id}.ScoreArousal(video_id); %% 结果可视化 figure; subplot(2,1,1); plot(eeg_baseline_filt); title([Baseline EEG at eeg_channel]); subplot(2,1,2); plot(eeg_stimuli_filt); title([Stimuli EEG at eeg_channel]);在实际项目中这种处理流程可以扩展为批处理所有被试和视频片段构建完整的情感识别特征集。