重采样因子过大

3

我有一个大的记录数据的向量,需要对其进行重新采样。使用resample时,我遇到了以下错误:

??? Error using ==> upfirdn at 82 The product of the downsample factor Q and the upsample factor P must be less than 2^31.

现在我明白这是为什么 - 我的两个采样率非常接近,因此整数因子需要相当大(约为73999/74000)。不幸的是,这意味着适当的过滤器不能被MATLAB创建。我还尝试了只上采样,然后再下采样,但是没有足够的内存来处理数据的100万个样本(我的数据有93M)。

我可以使用哪些其他方法来正确地重新采样这些数据?


能否对“重采样”进行两次应用? - Rashid
@Kamtal 你如何应用两次?使用更小的比率,这样连续进行时就等同于我所需的吗?我尝试过最简单的版本,先进行上采样,然后下采样,但是我没有足够的内存。 - David K
自己写?这篇论文提供了一个很好的描述,说明如何实现一个强大的重采样器。 - AnonSubmitter85
9300万 个样本和 73999 / 74000 的重新采样,你将失去约 1300 个样本。即使你能够设计出那个过滤器,大多数样本的值也不会改变。因此,我建议你选择一个子集,如 100万 个样本,并使用 0.9987 进行重新采样。这样可行吗? - Rashid
你需要将数据集缩小到多小才能使它运作?它能够在大约10万个样本上工作吗? - Trogdor
显示剩余2条评论
2个回答

0

这是我的代码,希望它有所帮助:

function resig = resamplee(sig,upsample,downsample)
if upsample*downsample<2^31
    resig = resample(sig,upsample,downsample);
else
    
    sig1half=sig(1:floor(length(sig)/2));
    sig2half=sig(floor(length(sig)/2):end);
    resig1half=resamplee(sig1half,floor(upsample/2),length(sig1half));
    resig2half=resamplee(sig2half,upsample-floor(upsample/2),length(sig2half));
    resig=[resig1half;resig2half];

end

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

使用插值多相FIR滤波器可以在不使用上采样+下采样过程的情况下插值出新的样本点集。

但是如果性能完全不重要,这里有一个基础版的快速而简单的窗口化Sinc插值器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接