-1

我有EMG2 块肌肉的 3 个记录,采样率为 1000Hz。换句话说,我有 3 个EMG数据矩阵;每个有 2 行(用于 2 块肌肉)。

然而,每个样本(列)的数量是不一样的:第一个有 2600 个样本,第二个有 2500 个样本,第三个有 2550 个样本。

我想让它们的长度彼此相同,以获得具有相同行数和列数的 3 个矩阵。我认为剪掉更大的柱子并只使用 2500 列是愚蠢的。但是,如果我想这样做,我不知道我应该从它们的开头还是结尾剪掉?

MATLAB 中有没有办法对数据进行插值以获得 3 个矩阵,每个矩阵的大小为 3 x 2600?

所有 3 个矩阵都属于同一个运动,我想匹配样本。

4

1 回答 1

0

您很可能希望在这种情况下使用 interp1。这将在您的点之间执行插值,以便您可以在 x 轴上的任何位置进行采样。

http://www.mathworks.com/help/matlab/ref/interp1.html

我有以下示例,其中包含一些随机样本数据sample1sample2并且sample3. 这些变量的长度分别为 2600、2500 和 2550。

sample1 = exp(2*linspace(0,1,2600)+rand(1, 2600));
sample2 = exp(linspace(0,1,2500)+rand(1, 2500));
sample3 = exp(3*linspace(0,1,2550)+rand(1, 2550));

我有一个所需的长度(我使用的长度与您的最短样本大小相对应)

desiredlength = 2500;

然后,您可以使用以下代码对数据进行插值(注意默认为线性插值):

adjusted = zeros(3, desiredlength);

adjusted(1, :) = interp1(linspace(0,1,length(sample1)), sample1, linspace(0,1,desiredlength));
adjusted(2, :) = interp1(linspace(0,1,length(sample2)), sample2, linspace(0,1,desiredlength));
adjusted(3, :) = interp1(linspace(0,1,length(sample3)), sample3, linspace(0,1,desiredlength));

plot(adjusted')

在此处输入图像描述

linspace(a, b, n)是一个函数,它为您提供和n之间的点向量,因为我正在从 转换为absample1linspace(0, 1, 2600)linspace(0, 1, 2500)

我希望这有帮助。

于 2013-05-30T09:03:34.120 回答