ssvep采集脑电信号的FFT分析

来源:互联网 发布:caffe linux cpu 安装 编辑:程序博客网 时间:2024/04/28 07:46

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:%1P147%2PZ48%3P249%4PO753%5PO554%6PO355%7POZ56%8PO457%9PO658%10PO859%11O161%12OZ62%13O263%14M265参考电极(左耳垂)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;endEdata=b';  %取转置save filename.mat Edataend

得到可以由MATLAB处理的.mat数据后,然后进行FFT变换,已提取频率特征,在进行FFT变换之前,先进行滤波处理,代码如下

function [f,sy,peak,i]=FFT_detection(data,Fs);%data-- 要处理的数据%Fs---  采样率%y----  返回峰值最大的xdata=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/NFFTi=qx-1;fprintf(['fft spectrum max is [x=',num2str(peak),', y=',num2str(qy*2),'] \n'])plot(f,2*sy,'r');text(peak,qy*2,['(',num2str(peak),',',num2str(qy*2),')']);  %在坐标系中显示顶点title('幅度-频率曲线图');axis([0 30 0 3]);ylabel('幅值');xlabel('频率(hz)');



0 0