matlab中的上采样数据给出了一个;漂移“;在数据中
我有两个信号,其中一个的采样率为500赫兹,另一个的采样率为115赫兹(大约,不完全是)。我需要对115 Hz信号进行上采样,以检测500 Hz信号中的事件,但数据中似乎存在漂移。为了更清楚地说明这一点,我有一个事件,我可以很容易地在500 Hz信号和115 Hz信号中检测到,但是标记的位置(在115 Hz信号中)相对于500 Hz信号中的实际事件,在上采样后,在整个信号中都会发生变化。我的代码如下所示:matlab中的上采样数据给出了一个;漂移“;在数据中,matlab,Matlab,我有两个信号,其中一个的采样率为500赫兹,另一个的采样率为115赫兹(大约,不完全是)。我需要对115 Hz信号进行上采样,以检测500 Hz信号中的事件,但数据中似乎存在漂移。为了更清楚地说明这一点,我有一个事件,我可以很容易地在500 Hz信号和115 Hz信号中检测到,但是标记的位置(在115 Hz信号中)相对于500 Hz信号中的实际事件,在上采样后,在整个信号中都会发生变化。我的代码如下所示: counter = 1; for i = 1:length(time) posi
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
计数器=1;
对于i=1:长度(时间)
位置=圆形(时间(i)*fs);
如果位置~=0&&位置大小(数据,1)
convertedData(i,:)=数据(大小(数据,1),:);
其他的
转换数据(i,:)=数据(1,:);
结束
结束
注意:我不需要插值点,因为标记在什么时候准确放置并不重要,只要它始终位于500 Hz信号中相对于事件的相同位置。在上面的代码中,“时间”是一个与500 Hz信号(从0到信号末尾)具有相同元素数的数组,“fs”是标记信号的采样频率(约115 Hz),“data”是标记信号
谢谢你的帮助 使用MATLAB的一个常见问题是,所有向量、矩阵等都使用基于1的索引,而不是通常在数学、工程、DSP等领域使用的更自然的基于0的索引。在您的特定情况下,
位置的计算需要更改为:
position = round(time(i)*fs);
致:
获取时间和(基于1的)样本数之间的正确对应关系。看起来MATLAB基于1的索引有问题。即使您说不需要插值点,对数据重新采样(将其转换为timeseries
对象后)进行比较不是更好吗@保罗,你能进一步解释一下吗?有没有办法解决这个问题?我猜可能需要:position=1+轮(time(I)*fs)代码>?@am304,我不能使用“重采样”功能,因为我对115 Hz信号的采样频率不可靠,当我用Matlab计算时,它不会返回整数值,而是114.999之类的值。我尝试了115的重采样功能,得到的数据点比我需要的少。。。
position = 1 + round(time(i)*fs);