【问题标题】:Interpolation with MATLAB in EMG processing在 EMG 处理中使用 MATLAB 进行插值
【发布时间】:2013-05-30 07:32:40
【问题描述】:

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

但是,每个样本(列)的数量并不相同:第一个有 2600 个样本,第二个有 2500 个样本,第三个有 2550 个样本。

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

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

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

【问题讨论】:

  • 有起始码吗?

标签: matlab post-processing spatial-interpolation


【解决方案1】:

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

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

我有以下示例,其中包含一些随机样本数据sample1sample2sample3。这些变量的长度分别为 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) 是一个函数,它为您提供在ab 之间的n 点向量,对于sample1,我正在从linspace(0, 1, 2600) 转换为linspace(0, 1, 2500)

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多