MATLAB脑电图功率谱计算详解:从数据预处理到结果可视化
创作时间:
作者:
@小白创作中心
MATLAB脑电图功率谱计算详解:从数据预处理到结果可视化
引用
CSDN
1.
https://blog.csdn.net/weixin_43604817/article/details/144819351
功率谱计算是脑电数据分析中最基本的指标之一。本文将介绍如何使用MATLAB计算静息态和调控后的脑电图(EEG)数据的功率谱密度(PSD)。文章将详细讲解数据预处理、功率谱计算以及结果可视化的过程。
功率谱计算是脑电数据分析最基本的一种指标了。此数据是分两次采集静息态,一次是没有做任何调控时的静息态;一次是做调控后(如,电刺激或磁刺激),采集的静息态。当然,数据预处是不可少的,比如:去无用电极,重定位,滤波,降采样,分段校正,去坏段,重参考,ICA等等,本次数据是进行预处理后的数据。(注:数据滤波后,如果又进行了数据的删除,需要再次进行滤波处理)
由于此次分析,需要分析调控后第1分钟,第10分钟,第20分钟,以及第30分钟的功率,在预处理数据最后进行了标签导入:
File -> Import event info -> From MATLAB array or ASCII file ,点击ok即可;
clc;clear;close all;
% 读数据
datatype = '*.mat';
[OpenFileName,OpenFilePath] = loaddata(datatype);
addpath(OpenFilePath); %添加路径
Fs = 200; % 采样率
% 取出两个数据
for i=1:size(OpenFileName,1)
subfilename = OpenFileName{i,1};
a{i} = load(subfilename);
end
data01 =a{1,1}.EEG.data;
data01 = data01(:,:); % 调控后数据
data02 = a{1,2}.EEG.data(:,1:12000); % 调控前数据
data = [data02 data01]; % 数据合并
tt = 60*Fs;
trials = size(data,2)/tt;
channels = size(data,1);
% 计算功率谱密度
nfft = 1024;
for i = 1:trials
for j = 1:channels
data01 = data(j,tt*(i-1)+1:tt*(i));
[Px,fx] = pwelch(data01,hanning(nfft),nfft/2,nfft,Fs); %nfft:fft的点数,通常为2的幂
% 计算三波长总功率
Px_sum(j,i) = sum(Px([find(fx>=0.1 & fx<=78)])); %theta\alpha\beta
% 单独计算想要的频率
theta_sum(j,i) = sum(Px([find(fx>=3 & fx< 8)])); %theta
alpha_sum(j,i) = sum(Px([find(fx>=8 & fx< 14)])); %alpha
beta_sum(j,i) = sum(Px([find(fx>=14 & fx< 30)])); %beta
shi_sum(j,i) = sum(Px([find(fx>=10 & fx< 11)])); %10Hz
qiqi_sum(j,i) = sum(Px([find(fx>=77 & fx< 78)])); %77Hz
end
end
% 计算均值,并归一化
Px_M = mean(Px_sum);
Px_M01 = Px_M/sum(Px_M);
theta_M = mean(theta_sum);
theta_M01 = theta_M/sum(theta_M);
alpha_M = mean(alpha_sum);
alpha_M01 = alpha_M/sum(alpha_M);
beta_M = mean(beta_sum);
beta_M01 = beta_M/sum(beta_M);
shi_M = mean(shi_sum);
shi_M01 = shi_M/sum(shi_M);
qiqi_M= mean(qiqi_sum);
qiqi_M01 = qiqi_M/sum(qiqi_M);
MM = [Px_M01;theta_M01;alpha_M01;beta_M01;shi_M01;qiqi_M01]'; % 数据整合
% 画图
bar(MM);hold on;
ylabel('PSD');grid on;
set(gca,'XTickLabel',{'静息态','第1分钟','第10分钟','第20分钟','第30分钟'});
legend('PSD总和','theta','alpha','beta','10Hz','77Hz');title(subfilename,'PSD均值');
将每种指标分开画图,可能更直观一些
% 分开画图
PP01 = {'PSD总和','theta','alpha','beta','10Hz','77Hz'};
figure;
for r = 1:6
hold on;

subplot (3,2,r);
pp = MM(:,r);
pp01 = PP01{r};
bar(pp);
ylabel('PSD');
set(gca,'XTickLabel',{'静息态','第1分钟','第10分钟','第20分钟','第30分钟'});
title(subfilename,pp01);
end
将个人的所有感兴趣通道都画一下,可以各通道的实际情况,数值很大的可能是通道质量不太好;
结果是画出了,上面所有指标,这里只放一个PSD总和的图,其余类似;
PP = {Px_sum theta_sum alpha_sum beta_sum shi_sum qiqi_sum};
PP01 = {'PSDtotal' 'theta PSD' 'alpha PSD' 'beta PSD' '10Hz PSD' '77Hz PSD'};
for r = 1:6
figure;
pp = PP{r};
pp01 = PP01{r};
bar(pp');
ylabel('PSD');
set(gca,'XTickLabel',{'静息态','第1分钟','第10分钟','第20分钟','第30分钟'});
legend(a{1}.EEG.chanlocs.labels);title(subfilename,pp01);
end
上面是计算的功率谱密度PSD,当然如果想要结算功率谱能量值,也可以:
% Px对应的功率谱密度,fx对应的是频率
% 画功率谱
figure;
plot(fx,10*log10(Px)),grid
xlabel('频率');
ylabel('功率');
% 功率能量值计算
delta_band = [0 4]; % 计算的指标,如 delta
d_in = find(fx >= delta_band(1) & fx <=delta_band(2));
delta_power2 = sum(Px(d_in))*(Fs/nfft) % Fs/nfft是频率分辨率
本文介绍了使用MATLAB进行脑电图(EEG)功率谱计算的基本方法,包括数据读取、预处理、功率谱密度计算以及结果可视化。这些内容对于从事脑电图数据分析或对信号处理感兴趣的读者具有较高的参考价值。
本文原文来自CSDN
热门推荐
7大奇迹桌游规则详解
H2O的生活之源:水在自然与人类生活中的不可替代性
咖啡保存方法大全 各類包裝的咖啡怎麼保存最科學?
继承法的基本原则是什么
剑桥五杰“第五人”之谜:直接改变冷战初期格局的间谍身份解密
中国最罕见的姓氏:全国仅17人,全部住在福建安溪
栀子花叶子发黄的五大原因及解决方案
中央财经大学怎么样 好不好
梦见神佛的深层含义:从宗教信仰到心理解读
全面解析镇静药中毒:诊断、治疗与管理
全面解析镇静药中毒:诊断、治疗与管理
泰山的历史价值与现实意义
泰勒·斯威夫特:从乡村少女到全球巨星的璀璨成长路!
计算机硕士有哪些值得选择的研究方向
琥珀鉴别真假的方法与技巧(揭秘缅甸琥珀的真实面貌)
别墅光伏屋顶预算明细详解
口腔医院种植牙的步骤和注意事项是什么?
鸡峰山(鸡峰山国家森林公园)
关键时刻能救命,这些急救知识必须掌握!
面试被问到你的优点和缺点时,该如何完美的回答
十二生肖的文化内涵,十二生肖文化意义和价值
量化交易之九种高效止盈止损策略详解
上官婉儿:让武则天也佩服的传奇女性
如何挑选混动车型:全面解析与实用指南
酒精与健康,适度饮酒的指南和疾病预防
历经十年修订 《英汉大词典》(第3版)定档4月上市
没病可以吃阿司匹林吗?长期服用的危害与预防
“养不死”的9种花,小盆少管,轻松养成大老桩,吉利又旺家
瀑布联句,诗词意境画卷
汕头南澳:奔赴网红海岛 相约“寻古”之旅