0

我有 2 个信号,其中一个的采样率为 500 Hz,另一个的采样率为(大约,不完全是)115 Hz。我需要对 115 Hz 信号进行上采样以检测 500 Hz 信号中的事件,但数据似乎存在偏差。为了更清楚地说明这一点,我可以在 500 Hz 信号和 115 Hz 信号中轻松检测到一个事件,但是标记的位置(在 115 Hz 中)相对于 500 Hz 信号中的实际事件,上采样后,整个信号的变化。我的代码如下所示:

counter = 1;

for i = 1:length(time)
    position = round(time(i)*fs);
    if position ~= 0 && position <= size(data,1)
        convertedData(i,:) = data(position,:);
    elseif position > size(data,1)
        convertedData(i,:) = data(size(data,1),:);
    else
        convertedData(i,:) = data(1,:);        
    end
end

注意:我不需要插入点,因为标记的确切放置时间并不重要,只要它始终相对于 500 Hz 信号中的事件放置在相同的位置即可。在上面的代码中,'time' 是一个与 500 Hz 信号(从 0 到信号结束)具有相同元素数量的数组,'fs' 是标记信号的采样频率(大约 115 Hz), “数据”是标记信号。

谢谢您的帮助!

4

1 回答 1

2

使用 MATLAB 的一个常见问题是所有向量、矩阵等都使用基于 1 的索引,而不是通常用于数学、工程、DSP 等的更自然的基于 0 的索引。在您的特定情况下,计算position需要更改为:

    position = round(time(i)*fs);

至:

    position = 1 + round(time(i)*fs);

以获得时间和(基于1的)样本数之间的正确对应关系。

于 2013-07-23T12:51:20.043 回答