Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中的上采样数据给出了一个;漂移“;在数据中_Matlab - Fatal编程技术网

matlab中的上采样数据给出了一个;漂移“;在数据中

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

我有两个信号,其中一个的采样率为500赫兹,另一个的采样率为115赫兹(大约,不完全是)。我需要对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
计数器=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);