重新采样的数据低于 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)
来检索重新采样的初始数据数据.
当对大型数据集进行 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)
来检索重新采样的初始数据数据.