ssvep采集脑电信号的FFT分析

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),'] \n'])
plot(f,2*sy,'r');
text(peak,qy*2,['(',num2str(peak),',',num2str(qy*2),')']);  %在坐标系中显示顶点
title('幅度-频率曲线图');
axis([0 30 0 3]);
ylabel('幅值');xlabel('频率(hz)');



你可能感兴趣的:(模式识别)