数据格式为.mat格式,是一个68(channel)× n(sample)的数组形式。读入后有两个数组,data是数据,event是标记点,标记每次闪烁开始时间。总计视觉刺激闪烁6种频率各6次。提取11Hz的数据,采样率为1000Hz,每次任务持续8秒,休息4秒,按照event信息提取所有11Hz刺激下的数据段,并用detrend函数去基线。最后得到channels× samples×trials的数据格式。 绘制第62通道,第6段11Hz的8秒脑电数据。计算第62通道,第1段实验11Hz刺激下数据的功率谱。 对所有实验11Hz数据段进行同步平均后再计算功率谱,绘制功率谱曲线进行比较
时间: 2024-04-01 17:35:16 浏览: 61
将文件夹中所有三维图像保存在四维数组中,并保存为.mat格式
好的,以下是MATLAB代码实现:
```matlab
% 读取.mat文件
load('data.mat', 'data', 'event');
% 确定11Hz对应的采样点数
fs = 1000;
f = 11;
n_samples = floor(fs/f);
% 提取所有11Hz刺激下的数据段
data_11hz = [];
for i = 1:length(event)
if event(i) == 11 % 判断是否为11Hz刺激任务
start = i; % 刺激任务开始的样本点
end_ = start + 12000; % 刺激任务结束的样本点
data_11hz(:,:,end+1:end+n_samples:end_) = data(:, start:end_);
end
end
% 对所有11Hz刺激下的数据段进行去基线
data_11hz_detrend = detrend(data_11hz, 0, 2);
% 得到channels×samples×trials的数据格式
channels = size(data_11hz_detrend, 1);
samples = size(data_11hz_detrend, 2);
trials = size(data_11hz_detrend, 3);
% 绘制第62通道,第6段11Hz的8秒脑电数据
channel_idx = 62;
segment_idx = 6;
start_idx = (segment_idx-1)*(8+4)*fs + 1;
end_idx = start_idx + 8*fs - 1;
data_8s = data_11hz_detrend(channel_idx, :, start_idx:end_idx);
time = (0:1/fs:8-1/fs)';
figure;
plot(time, data_8s);
xlabel('Time (s)');
ylabel('Amplitude (\muV)');
title('Channel 62, Segment 6, 11Hz Data');
% 计算第62通道,第1段实验11Hz刺激下数据的功率谱
segment_idx = 1;
start_idx = (segment_idx-1)*(8+4)*fs + 1;
end_idx = start_idx + 8*fs - 1;
data_8s = data_11hz_detrend(:, :, start_idx:end_idx);
data_11hz_segment1 = data_8s(:, 1:n_samples:end);
Pxx = pwelch(data_11hz_segment1(channel_idx, :), [], [], [], fs);
f = linspace(0, fs/2, length(Pxx));
figure;
plot(f, 10*log10(Pxx));
xlabel('Frequency (Hz)');
ylabel('Power (dB)');
title('Channel 62, Segment 1, 11Hz Power Spectrum');
% 对所有实验11Hz数据段进行同步平均后再计算功率谱,绘制功率谱曲线进行比较
data_11hz_mean = mean(data_11hz_detrend, 3);
Pxx_mean = pwelch(data_11hz_mean(channel_idx, :), [], [], [], fs);
figure;
plot(f, 10*log10(Pxx_mean), 'LineWidth', 2);
hold on;
for segment_idx = 1:6
start_idx = (segment_idx-1)*(8+4)*fs + 1;
end_idx = start_idx + 8*fs - 1;
data_8s = data_11hz_detrend(:, :, start_idx:end_idx);
data_11hz_segment = data_8s(:, 1:n_samples:end);
data_11hz_segment_mean = mean(data_11hz_segment, 2);
Pxx_segment = pwelch(data_11hz_segment_mean(channel_idx, :), [], [], [], fs);
plot(f, 10*log10(Pxx_segment));
end
hold off;
legend('Mean', 'Segment 1', 'Segment 2', 'Segment 3', 'Segment 4', 'Segment 5', 'Segment 6');
xlabel('Frequency (Hz)');
ylabel('Power (dB)');
title('Channel 62, 11Hz Power Spectrum Comparison');
```
这段代码中,我们使用了MATLAB内置函数`pwelch`来计算功率谱。其中,第一个输入参数为数据向量,第二个和第三个参数为空,表示使用默认的段长度和重叠长度,第四个参数为采样率,表示单位时间内采样的样本数。我们还使用了MATLAB内置函数`mean`来进行同步平均,计算出所有实验11Hz数据段的平均数据段。最后,我们使用MATLAB内置函数`plot`来绘制图形。
阅读全文