This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLV320AIC3204:如何将生成的双二阶 EQ 系数转换回原始滤波器参数

Guru**** 2554570 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/916067/tlv320aic3204-how-to-convert-generated-biquad-eq-coefficients-back-to-original-filter-parameters

器件型号:TLV320AIC3204

我使用的是其他人最初开发的固件。 固件利用 AIC3204中的一些 Biquad EQ 滤波器。 其中一个滤波器应采用91Hz、高通、一阶巴特沃斯滤波器。 请注意、ADC 转换器以16KHz 的采样率运行。

源代码中使用的生成系数为:  

// EQ Biquad B、~91Hz 一阶巴特沃斯

#define PRB_BQB_N0 0x7DBC00L
#define PRB_BQB_N1 0xC12200L
#define PRB_BQB_N2 0x0L
#define PRB_BQB_D1 0x3DBC00L
#define PRB_BQB_D2 0x0L

当我为该滤波器使用 TI 计算器生成系数时、我会得到以下系数:

文本"*采样率= 16000 "
文本"*滤波器2高通一阶巴特沃斯、91Hz FC 0.0dB"

文本"* BQ:h (z)=(N0 + 2 * N1/z + N2/(Z2))/(32768 - 2 * D1/z - D2/(Z2))"
文本"*格式为 N0、N1、N2、D1、D2"的滤波器系数

文本"* 1O:h (z)=(N0 + N1/z)/(32768 - D1/z)"
文本"*格式为 N0、N1、D1"的滤波器系数

文本"*过滤器2 1O"
0x7DBF
0x8241
0x7B80

我尝试通过调整计算器中的各种参数(频率截止、增益等)来匹配 FW 系数、但没有成功。 我注意到源代码中的注释表明滤波器截止频率约为91Hz。 我认为原始开发人员可能使用了其他计算器软件(可能是 PurePath),该软件接受了截止频率的浮点值,这可能会解释生成系数的差异。 有什么想法吗?

此外、是否有工具可接受生成系数的输入并将其转换回原始滤波器参数?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jim、  

    请记住、假设您有一个一阶数字滤波器、TIBQ 将生成一阶滤波器系数。 在本例中、您有一个二阶滤波器

    一阶滤波器的公式为:  

    对于双二阶滤波器、它是:

    h (z)=  

    好的、那么他们将 N2和 D2项设置为零、 这没问题、但请注意 N1和 D1项中的这两个项? 您需要将 N1和 D1系数缩放1/2以解决该问题。  

    因此、如果我缩放输出窗口中的两个值...

    N1=8241/2=4120

    D1 = 7B80 / 2 = 3DC0

    D1值看起来非常接近所使用的 值、但 N1值与先前开发人员所做的不匹配... 无论看起来工程师使用的是输出窗口中具有16位分辨率设置的 TIBQ、  您有24位寄存器... 使用全部24位。  

    我倾向于这里的一些用户错误、 您是否测试了滤波器?  它是否给出了正确的响应?  

    没有工具可将系数转换回原始滤波器参数

    此致、

    -Steve Wilson

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jim、

    另一种选择是使用二阶高通滤波器。  您是否有理由只使用一阶滤波器?   

    -Steve Wilson

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Steve、

    感谢您对此问题的快速回答。

    我最初没有注意到计算器输出屏幕上的分辨率选项、该选项设置为16位。 我现在至少获得了滤波器的24位系数(请参阅下面的):

    文本"*采样率= 16000 "
    文本"*滤波器2高通一阶巴特沃斯、91Hz FC 0.0dB"

    文本"* BQ:h (z)=(N0 + 2 * N1/z + N2/(Z2))/(8388608 - 2 * D1/z - D2/(Z2))"
    文本"*格式为 N0、N1、N2、D1、D2"的滤波器系数

    文本"* 1O:h (z)=(N0 + N1/z)/(8388608 - D1/z)"
    文本"*格式为 N0、N1、D1"的滤波器系数

    文本"*过滤器2 1O"
    0x7DC0B8
    0x823F48
    0x7B8172

    此设计中实际上使用了2个高通滤波器。 一个是40Hz、二阶巴特沃斯 、据称是91Hz 一阶巴特沃斯。 我的理解是、选择这些滤波器是为了尝试匹配截止频率为~81Hz 的前一个设计的高通滤波器响应。 当我在计算器中输入40Hz 滤波器的参数时、生成的系数与 FW 中的参数完全匹配。 91 Hz 滤波器的情况并非如此、如您所知。 此时、我认为系数由于某种原因进行了手工调整、或者错误地将错误的系数复制到源代码中。  

    我们尚未尝试测试滤波器的性能、但如果我无法使用计算器生成的系数匹配源代码中的系数、这可能是下一步。

    如果您有其他想法、请告诉我。

    Jim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jim、  

    很高兴为您提供帮助。  很难通过查看系数来知道前一位工程师在做什么。  我同意系数被错误调整或复制。  

    双二阶系数已标准化、 您可以在 MATLAB 中反转/撤消标准化并检查滤波器稳定性... 甚至绘制响应图。  可能是测试这些系数的快速方法。  

    此致、

    -Steve Wilson

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Steve、

    我们最终能够使用 几种不同的方法在我们的 FW 源代码中紧密匹配91Hz 一阶滤波器的滤波器系数。 通过输入91.76Hz 滤波器截止频率、我还能够使用 PurePath 滤波器工具精确匹配 FW 系数。Pure Path 的优点是它直接报告系数、而无需对 N1和 D1进行额外计算。

    另一个需要注意的问题是,除了 N1和 D1所需的1/2缩放外,我们还必须将 N1转换为二进制补码形式,因为它是负值。 对于 N1、计算器为我们提供了0x8241。 0x8241/2 = 0x4020、其2的补码是0xC020、在我们的源代码中接近于0xC122。

    您是否介意重新确认使用 TI 计算器(TIBQ)时所需的步骤、尤其是与计算 N1和 D1一阶滤波器系数相关的步骤。我从您之前的帖子和我们的结果中了解到、计算器确实使用了双二阶传递函数以及一阶系数: h (z)=(N0 + 2*N1/z + N2/(Z2))/(32768 - 2*D1/z - D2/(Z2))"、而不是这个方程式:h (z)=(N0 + N1/z)/(32768 - D1/z)"。  

    谢谢、

    Jim