如何选择分数延迟滤波器的系数?

信息处理 过滤器 采样 DSP核心
2021-12-28 06:13:32

我有一个运行频率为 200MHz 的 Virtex 6 FPGA,上面有 ADC/DAC。我一直在将 WiFi 信号 (2462MHz) 转换为更合理的 25MHz 中频,采样,通过抽头运行信号,调整它们,然后混音。这一切都很好。

我的问题是,由于我正在以较低的速率进行混频和采样,因此我无法通过调整相位变化的抽头延迟来实现 RF 级别的多路径,而是必须在 IF 级别进行调整。这工作正常,但这意味着时间已关闭(像 TDOA 或具有 TOF 测量的东西可能会关心这一点)。似乎解决这个问题的最好方法(并且可能是正确的方法)是实现分数延迟滤波器(FDF),但我不确定最好的方法。

似乎我需要想出抽头的系数,但我似乎无法从我在 FDF 上阅读的白皮书中收集到这一点。有任何想法吗?

3个回答

我通常通过创建一个完全通过我想要延迟的信号的低通滤波器来做到这一点。我通过创建窗口 sinc 函数“手动”创建 LPF。类似的东西——

filt = sinc(-80:.8:80);
filt = filt .* hamming(length(filt)).';

这将为您提供一个通过大约 80% 的奈奎斯特区域的过滤器(80% 由 sinc 索引中的 0.8 增量设置)。要获得分数延迟,您只需在滤波器的计算中包含分数延迟。向 sinc 索引添加一个常数会使过滤器延迟个样本。例如,在上述过滤器的情况下,添加 0.1 会产生个样本或个样本的分数延迟。constantincrement0.10.80.125

filt = sinc((-80:.8:80) + .1);
filt = filt .* hamming(length(filt)).';

这是有效的,因为滤波是线性操作,延迟滤波器相当于将原始 LPF 与分数延迟的 delta 函数进行卷积。由于线性意味着关联属性成立,因此将您的信号与延迟的 LPF 进行卷积等效于将您的信号与部分延迟的 delta 函数进行卷积,然后使用“未延迟”的 LPF 对其进行滤波。

注意:创建“未延迟”LPF 时,您必须确保索引是对称的。最简单的方法是确保起点和终点是索引增量的整数倍。这就是为什么我使用 +/- 80 来表示 0.8 的增量。

论文:

PJ Kootsookos 和 RC Williamson,“分数采样延迟系统的 FIR 逼近”,IEEE Transactions on Circuits and Systems II:模拟和数字信号处理,卷。43(3),1996 年 3 月,第 269-271 页。

可能会感兴趣。它表明三种不同的分数采样延迟 FIR 滤波器设计方法基本上都是等效的。 可在此处获得预印本。

如前所述,farrow 实现对硬件和 FPGA 非常有利。如果您无权访问 IEEE 论文,这里有一个框图:

http://www.dsptemplates.com/doc/classSPUC_1_1farrow.html

此外,sourceforge.net 上的 spuc 代码应该具有 c++ 实现。