FIR 滤波器相位响应计算中的不连续性

问题描述 投票:0回答:1

我正在尝试执行一项相对简单的任务 - 我在嵌入式系统上实现了一个数字滤波器,我想生成数据来描述其幅度和相位响应与频率的关系。

我已经能够使用多种方法成功生成幅度数据,但在相位方面遇到问题。

在倍频程中,我使用函数 freqz 生成了幅度和频率响应图,如下所示:

freqz_plot(W_hz, H, 0)

在这种情况下,W_hz 是以 Hz 为单位的频率数据向量,H 是滤波器的计算响应(即在每个频率处评估的复数值)。

我得到以下图,它们看起来像我对所选滤波器设计的期望: freqz plots

但是,如果我使用以下公式手动计算相位数据:

phase_deg = rad2deg(角度(H));

我得到了这个图,充满了大的不连续性(请原谅缺少轴标签,我很着急,它的相位(以度为单位)与频率(以赫兹为单位):

manually calculated phase in deg vs. frequency in hz

我无法计算出如何正确消除不连续性并重现 freqz 生成的图的数学公式。我可以看到一些不连续性是 180 度,一些是 90 度,但我不知道如何正确确定不连续性的大小/方向并在计算中正确考虑它,以便我可以自己生成数据。

谢谢!

matlab math signal-processing octave
1个回答
0
投票

设法弄清楚 - 答案在于 unwrap 函数的解释,它成功生成了预期的连续相数据:

Q = unwrap(P) 展开向量 P 中的弧度相位角。只要连续角度之间的跳跃大于或等于 π 弧度,unwrap 就会通过添加 ±2π 的倍数来移动角度,直到跳跃小于 π

在使用中,例如:

phase_deg_2 = rad2deg(展开(角度(H)));

其中 H 是如上所述计算出的滤波器频率响应

© www.soinside.com 2019 - 2024. All rights reserved.