如何确定希尔伯特系数

信息处理 过滤器 过滤器设计 DSP核心
2022-02-11 17:00:20

我想在我的 FPGA 上获取一个真实的信号并创建一个复杂的信号。我为希尔伯特变换实现了 FIR 核心,Xilinx 的数据表显示了以下系数:(-819,0,-1365,0,-4096,0,4096,0,1365,0,819) 作为示例。

我想添加更多的抽头,所以作为练习我使用了 matlab fdesign 函数:

d=fdesign.hilbert(11,0.1);
hd=design(d,'firls');
coef=hd.Numerator

系数看起来很合理(尽管我需要乘以 10000 才能得到整数)。我不明白的是 0.1 过渡宽度变量(我从网上的一个例子中取了 0.1),也不是我是否需要针对某个频率范围调整这个滤波器,或者它们是否足够通用。

1个回答

使用希尔伯特变换滤波器后得到的分析信号理想地是没有任何负频率的信号,因此,在传输 0 到 1 时将 -1(使用归一化频率)衰减到 0(请注意,这是一个复杂的输出,因此不具有大约 0 的标准对称性)。这是通过对正频率 pi/2 和负频率 -pi/2 进行相移来获得的,同时保持幅度为 1 并将输出与原始信号相加。

由于不可能在没有过渡带的情况下获得这种相移变化,因此需要指定过渡带应该有多宽。因此,在您的情况下,0.1 表示您设计的滤波器在 0.05 到0.95,过渡带从 -0.05 到 0.05,类似地从 0.95 到 1.05。

以恒定的过渡带增加阶数将在通带中产生更高的衰减/更小的近似误差,而以相同阶数减小过渡带将产生相反的效果。

此外,如果您将在 FPGA 上实现它,我建议将系数乘以 2 的幂,例如 8192,以获得更好的输出范围和位使用。