我有一个很长的时间序列文件(以毫秒记录),我需要从中提取不同长度的部分(基于来自不同数组/文件的值)。
时间序列文件( data2.txt )是从EEGLab工具箱导出的,因为我需要尝试自定义分析。它有两列(第1列:时间以毫秒为单位,第2列:来自脑电图记录的值) - 见下文。 我将时期的时间(开始和结束)存储在不同的文件中( epochs.txt :第1列 - 开始,第2 - 结束),格式与 data2.txt
我的文件( data2.txt )按以下方式查看:
0.0000 -126.2498
1.9531 -91.8123
3.9063 -130.7185
5.8594 -67.2498
7.8125 -77.6560
9.7656 -83.0623
11.7188 -74.0310
13.6719 -110.4685
15.6250 -130.4373
17.5781 -143.4060
19.5313 -155.7498
我需要从时间序列的某些部分中提取值(时间保存在外部文件中 - epochs.txt )并将它们保存到另一个文件中。
我已将时期的时间(开始和结束)存储在另一个文件中( epochs.txt :第1列 - 开始,第2 - 结束)。 epochs.txt 中的值可能并不总是与 data2.txt 中的值相同,例如: (它们可以插值吗?)
2.391391554 5.381023353
6.129570888 7.39010542
10.65197062 12.96686866
14.47654996 17.31346859
17.84561721 18.88671436
22.3857703 23.25648467
加载并绘制文件时文件看起来很好:
EEG_data = importdata('C:\Users\Me\Desktop\data2.txt');
figure
plot(EEG_data(:,1), EEG_data(:,2));
我猜Matlab将我的文件视为2×N矩阵而不是时间序列,但我不确定如何更改它。我尝试将 EEG_data 转换为时间序列并提取相应的值,但我失败了。
我想获得有两列的输出( output.txt )(第一个:时间,第二个:EEG值),下面的可能输出是基于第一个 epochs.txt 的一行( output.txt 的第一列),第二列是猜测的。 我不确定在两者之间获得价值的最佳方法是什么。
2.391391554 -90.381023353
.
.
.
5.381023353 -75.96686866
有任何想法如何解决这个问题?
答案 0 :(得分:1)
根据评论,这里有一些代码可以帮助您入门。我使用了以下数据来避免处理start_index == end_index
的空切片。您可能需要添加一些代码来检查此问题和其他有问题的案例。
epochs.txt
2.391391554 9.381023353
11.65197062 18.96686866
data2.txt
0.0000 -126.2498
1.9531 -91.8123
3.9063 -130.7185
5.8594 -67.2498
7.8125 -77.6560
9.7656 -83.0623
11.7188 -74.0310
13.6719 -110.4685
15.6250 -130.4373
17.5781 -143.4060
19.5313 -155.7498
代码
EEG_data = importdata('data2.txt');
epochs = importdata('epochs.txt');
output = zeros(0, 2);
for i = 1:size(epochs, 1)
% extract an epoch from the EEG data
start_time = epochs(i, 1);
end_time = epochs(i, 2);
% find corresponding indices
% http://stackoverflow.com/q/3593717/553404
start_index = find(EEG_data(:, 1) > start_time, 1);
end_index = find(EEG_data(:, 1) > end_time, 1) - 1;
% slice the required data for the epoch
epoch_data = EEG_data(start_index:end_index, :);
% append to output
output = [output; epoch_data];
end