我正在编写一个在时域工作的 C++ 仿真软件。我生成定期采样的数据,并需要通过可变分数延迟“实时”延迟它们。
这是一个非常常见的问题,并且非常接近所有“重采样”问题。经过简短的书目搜索,似乎最常用的方法是具有 Farrow 结构的拉格朗日插值法。基于JO Smith,“插值延迟线、理想带限插值和分数延迟滤波器设计”,我使用了以下实现:
其中包括具有固定系数的级联滤波器,由取决于可变延迟的级联因子调制。这可以在等式中看出
我在 C++ 中的实现适用于高达 51 的插值阶数。不幸的是,对于较大的插值阶数,数值误差会迅速增加并占主导地位。经过快速检查,似乎缓冲样本在个索引递增的单元格中具有递增的数量级。当我使用 时它会有所帮助左右的浮点值与 1 的值组合时,我们会失去很多数值。long double
您是否知道 Farrow 结构的变体或拉格朗日插值的另一种实现,它适用于大订单,即在仅需要内存缓冲区中合理的数值精度的同时保持计算效率?
提前感谢您的时间:)