Matlab 从时间序列中提取变长部分

Matlab 从时间序列中提取变长部分,matlab,time,time-series,Matlab,Time,Time Series,我有一个长时间序列文件(以毫秒为单位记录),需要从中提取不同长度的部分(基于不同数组/文件的值) 时间序列文件(data2.txt)是从EEGLab工具箱导出的,因为我需要尝试自定义分析。它有两列(第一列:以毫秒为单位的时间,第二列:脑电图记录的值)-见下文。 我以与data2.txt相同的格式在不同的文件(epochs.txt:1st column-start,2nd-end)中存储了历代的计时(开始和结束) 我的文件(data2.txt)如下所示: 0.0000 -126.2498 1.9

我有一个长时间序列文件(以毫秒为单位记录),需要从中提取不同长度的部分(基于不同数组/文件的值)

时间序列文件(data2.txt)是从EEGLab工具箱导出的,因为我需要尝试自定义分析。它有两列(第一列:以毫秒为单位的时间,第二列:脑电图记录的值)-见下文。 我以与data2.txt相同的格式在不同的文件(epochs.txt:1st column-start,2nd-end)中存储了历代的计时(开始和结束)

我的文件(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:1st column-start,2nd-end)中存储了历代的计时(开始和结束)。epochs.txt中的值可能并不总是与data2.txt中的值相同,例如: (它们可以插值吗?)

加载和打印时,文件看起来很好:

EEG_data = importdata('C:\Users\Me\Desktop\data2.txt');
figure
plot(EEG_data(:,1), EEG_data(:,2));
我想Matlab是把我的文件当作一个2×N的矩阵,而不是一个时间序列,但我不知道如何改变它。我尝试将EEG_数据转换为时间序列并提取相应的值,但失败惨重

我想得到有两列的输出(output.txt)(第一列:时间,第二列:EEG值),下面可能的输出是基于epochs.txt的第一行(output.txt的第一列),第二列是猜测的。 我不确定什么是获得两者之间的值的最佳方法

2.391391554 -90.381023353
.
.
.
5.381023353 -75.96686866

有什么办法解决这个问题吗?

根据评论,这里有一些代码可以帮助您开始。我使用了以下数据来避免处理
start\u index==end\u 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
代码


不清楚你在问什么。一切似乎都很好。你到底做了什么?我需要根据epochs.txt中的计时(开始/结束)从data2.txt的第二列(第一列是计时)中提取值。我不知道怎么做。@Memming
epoch2.txt
的行是与
data2.txt
的第一列相对应的开始和结束时间,然后应使用该时间选择
data2.txt
的第二列的值。主要问题似乎是时间不完全匹配,因此需要对值进行插值。问题是如何将非均匀采样的时间序列转换为另一个非均匀的时间网格?我建议你更新问题的标题。我认为如果你的信号是带限的(已知最高频率分量),并且你的非均匀采样高于广义奈奎斯特极限,你可以通过低通滤波在均匀网格上重新采样信号。这就是你想知道的吗?谢谢。工作起来很有魅力。我添加了save(['epoch',num2str(I)],'epoch_data');将每个历元保存在一个单独的文件中(我将不得不对它们进行规范化)。没问题,很高兴它有帮助:)
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