重采样数据低于0 - MATLAB

时间:2015-01-11 16:01:38

标签: matlab

当将大数据集重新采样100倍时 - 尽管原始数据集中没有负数,但某些数据点最终为负数。这是重新取样过程中不可避免的结果还是有更好的方法来实现这一目标?

我正在使用:

a = resample(data,round((length(data))/1000),length(data));

原始数据集:

enter image description here

重采样数据集:

enter image description here

我知道我可以过滤掉所有值< 0但是我想了解为什么会发生这种情况以及是否有更好的重新采样方式,因为这可能会影响我的结果。

谢谢!

修改

我试图使用interp1来缩放我的数据,但它没有提供预期的结果,所以我要么使用的功能不正确,要么它不适合我的问题。

以上输入缩小为:

enter image description here

使用:

x= [1:1:230208]; %length of the imported data (hitcount)
y = hitcount'; %hitcount is my imported data shown above
z = [1:1:2300]; %I want to scale it down roughly 1000x
a = interp1(x,y,z);

编辑2

刚刚发现,如果我按照我要重新采样的相同因素(使用Hann窗口和conv)来平滑输入,那么当我重新采样时,我会获得更准确的输出+非常最小的负值。

3 个答案:

答案 0 :(得分:2)

让我们举一个简单的例子:

resample([1,0,0,1],8,4)
ans =

第1栏至第5栏

1.0000    0.7436    0.0000   -0.4035    0.0000

第6至8栏

0.7436    1.0000    0.5644

您可以看到该线在某种曲线中继续。如果您希望该方法填补两个0与另一个0之间的差距,您选择了错误的函数,请查看interp1

使用interp1的简短示例:

%some "high resolution" sin wave
x=[0:.1:10]
Y=sin(x)
%get 5 sample points
interp1(x,Y,[0:pi/2:2*pi])

答案 1 :(得分:2)

这是resample使用带限(又称“sinc”)插值的结果。

假设样本是由带限信号产生的。 resample使用'sinc'函数(~sin(x)/ x)过滤信号,然后抽取结果。

如果您知道信号是非负的,则可能需要使用非负的函数替换sinc滤波器。例如,在图像处理中,使用高斯滤波器执行重采样,因为像素强度是非负的。

resample函数接受指定要使用的过滤器的参数:

y = resample(x, upsample_ratio, downsample_ratio, fir_filter) 

答案 2 :(得分:0)

如果您的初始数据集中没有负面数据,也许您可​​以考虑采用data_log = log(data),然后重新采样data_log,然后选择exp(data_log_resampled)来检索重新采样的初始数据数据