重新采样的数据低于 0 - MATLAB

Resampled data going below 0 - MATLAB

当对大型数据集进行 100 倍重采样时 - 尽管原始数据集中不存在负数,但一些 data-points 最终还是负数。这是重采样过程不可避免的结果还是有更好的方法来实现这一点?

我正在使用:

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

原始数据集:

重采样数据集:

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

谢谢!

编辑:

我尝试使用 interp1 来缩小我的数据,但是它没有提供预期的结果,所以我要么错误地使用了该函数,要么它不适合我的问题。

以上输入按比例缩小为:

使用:

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 window 和 conv)平滑我的输入,那么当我重采样时我会得到更多准确的输出+非常小的负值。

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

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])

这是 resample 使用带限(又名 "sinc")插值的结果。

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

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

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

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

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