%% 本实验有两个目的
% 1. 从精准频率判断变成分类判断
% 2. 基于STT压缩重构方法 + CCA方法 利用起来时频谱
%% 参数改变:一个是151624/161725 或者全加上; 另外一个是STT的窗口长度
clc
clear all
% 设定文件路径0
Path = 'C:\Users\PC\STUDY\';
file = dir([Path,'*.mat']);
for fi = 1:12
% 读取数据,初始化参数
load([Path,file(fi).name])
DATA = subject.data;
fs = 1000; % 采样频率,如果没有降采样的话
trial = 35; %刺激次数
n=2000;
fps = subject.fps; % 刺激频率
del_length = 171; % 建议将刺激开始的一部分采样点去掉
data_length = 1999+del_length;
for tt=1:35
disp([fi,tt])
% 预处理
data=mapminmax(DATA(1:8,del_length:data_length,tt));
data=sum(data);
% 巴特沃斯低通滤波器
[N,wc]=buttord([5/500,15/500],[4/500,20/500],1,3);
[num,den]=butter(N,wc,'bandpass');
data_Filter(:)=filter(num,den,data(:));
X=detrend(data_Filter,'constant');
X=smooth(X,30,'loess');
% CCA
CX=X;
Ct = (0:0.001:1.999)';
fps_y=[7.5,8,12];
Nfps1=length(fps_y);
for kf = 1:Nfps1
rad0 = pi*fps_y(kf)*Ct*2;
radd = rad0;
coskf1 = cos(radd);
sinkf1 = sin(radd);
[~, ~, r1] = canoncorr(CX,[coskf1,sinkf1]);
rmax(kf) = r1(1);
end
[~,m4]=max(rmax);ffcca(fi,tt)=fps_y(m4);
Ts = SST(X,10);%一会换成data也试一下 %不用换data 窗长度取10挺好的
%选一部分重构
Tss = Ts([14,15,16,17,23,24,25],:);
%signal reconstruction.
s=real(sum(Tss));
% CCA
CX=s';
Ct = (0:0.001:1.999)';
for kf = 1:Nfps1
rad0 = pi*fps_y(kf)*Ct*2;
radd = rad0;
coskf1 = cos(radd);
sinkf1 = sin(radd);
[~, ~, r1] = canoncorr(CX,[coskf1,sinkf1]);
rmax(kf) = r1(1);
end
[~,m4]=max(rmax);ffstt(fi,tt)=fps_y(m4);
end
end
ff_1={ffcca,ffstt};
save('G:\智能信息处理技术\STT-CCA实验结果\ff_1417_1000.mat','ff_1');
评论2