ssvep采集脑电信号的FFT分析

2019-04-13 14:43发布

SSVEP脑电数据的特征提取与处理 有neuroscan设备采集的数据格式为.cnt格式,使用下面的函数可以将其需要的导联数据提取出来, 将其提取出来为.mat格式数据, function [Edata] = Extract(Sdata) % 将.cnt文件文件转为成MATLAB能分析的.mat数据格式 % author:陈威2017.1.9 % .cnt数据格式来自与ssvep范式的neuroscan脑电数据 %有关于neuroscan的数据将.cnt格式的数据加载到MATLAB中进行分析, %可以先参考下面这个网址的内容然后在进行下面的程序的处理 %http://52brain.com/thread-17770-1-1.html %此函数旨在将Neuroscan采集的cnt数据集中data数据提取相应的导联数据 %以便后续做特征提取与分类 %Neuroscan采集 LCD刺激显示 60hz刷新 暗光环境 %共65个channel %数据提取14个channel: %1 P1 47 %2 PZ 48 %3 P2 49 %4 PO7 53 %5 PO5 54 %6 PO3 55 %7 POZ 56 %8 PO4 57 %9 PO6 58 %10 PO8 59 %11 O1 61 %12 OZ 62 %13 O2 63 %14 M2 65 参考电极(左耳垂) A=loadcnt(Sdata); %加载外部cnt文件 a=A.data; ka=1; kb=[47,48,49,53,54,55,56,57,58,59,61,62,63,65];%选择需要的导联数 b=zeros(length(kb),length(a)); for i=1:length(kb) b(ka,:)=a(kb(i),:); ka=ka+1; end Edata=b'; %取转置 save filename.mat Edata end
得到可以由MATLAB处理的.mat数据后,然后进行FFT变换,已提取频率特征,在进行FFT变换之前,先进行滤波处理,代码如下
function [f,sy,peak,i]=FFT_detection(data,Fs); %data-- 要处理的数据 %Fs--- 采样率 %y---- 返回峰值最大的x data=data(:,7)'; %信号选取单个通道的采样数据,这里选择为(7-->POZ-->56) L1=length(data); NFFT = 2^nextpow2(L1); %确定需要进行处理的数据点数 [B A]=butter(2,[4/(Fs/2) 20/(Fs/2)]); %butter:2阶的巴特沃斯滤波器 后为上下截止频率 eegx=filter(B,A,data); %filter:一维数字滤波器, x1是滤波前序列,B为分子,A为分母 Y1 = fft(eegx,NFFT); %进行fft变换 sy=abs(Y1(1:NFFT)); %去模 sy=sy/(NFFT/2); %求实际幅值 sy(1)=sy(1)/2; f=([1:NFFT]-1)*Fs/NFFT; %求实际频率 [qy,qx]=max(sy); peak=(qx-1)/(NFFT/Fs); %最大峰值处的频率值 peak=(qx-1)*Fs/NFFT i=qx-1; fprintf(['fft spectrum max is [x=',num2str(peak),', y=',num2str(qy*2),'] ']) plot(f,2*sy,'r'); text(peak,qy*2,['(',num2str(peak),',',num2str(qy*2),')']); %在坐标系中显示顶点 title('幅度-频率曲线图'); axis([0 30 0 3]); ylabel('幅值');xlabel('频率(hz)');