#1 楼
有点过时了,但也许应该得到更全面的答案,尤其是因为Direct Form II会给您带来很多麻烦。首先,没有“一刀切”的选择,最佳选择取决于您的具体情况应用和约束。您可以考虑的是
内存:直接形式II和转置形式II占用的状态内存要比直接形式I和转置形式I少一点,但是级联的秒订单部分的实现差异很小。
MIPS:就乘法和加法的数量而言,所有四个实现都是相同的。但是,取决于特定处理器的指令集,实现效率可能存在显着差异。因此,“取决于”。
固定点属性:这有很大的不同。首先,您必须确保状态变量不会溢出,因此您需要分析输入/输出与状态变量之间的传递函数。在这里,直接表格I和换位表格II是明显的赢家。状态变量与输入和输出的关系为+ 106dB左右。例如,在直接形式II中,从输入到状态的传递函数仅由极点给出。我已经看到了现实中的示例,其中的增益实际上可以超过100 dB。对于定点实现,这绝对是非非。
噪声:就截断和舍入错误而言,所有实现都大致相同。在3)中提到的状态变量传递函数问题也在一定程度上影响了它,即使使用32位浮点,我也已经看到Direct Form II滤波器的可听噪声问题。 II通常是最好的选择。在某些定点情况下,尤其是在存在严重噪声问题的情况下,直接形式I更好,因为它可以更容易地通过诸如误差频谱整形等功能进行增强。
评论
$ \ begingroup $
这是一个更全面,更好的答案!
$ \ endgroup $
–乳香
2011-09-14 14:34
$ \ begingroup $
我今天以一种更加困难的方式弄清楚了-为什么Direct Form I是我的应用程序的更好选择。感谢您的答复!
$ \ endgroup $
–anasimtiaz
2011-09-14 15:04
#2 楼
首先,从维基百科了解一些有关Direct Form I和II实现的信息。直接形式I需要更多的内存,但是它是一种较为简单的策略,不太可能出现舍入和共振问题。
直接形式II需要更少的内存,但它可能会产生异常的交互作用,数量增加以及四舍五入的错误。通过级联较小的滤波器,尤其是二阶滤波器,可以减少很多这种情况。
评论
$ \ begingroup $
不论哪种情况,都应该级联二阶节。
$ \ endgroup $
–奥利弗·查尔斯沃思(Oliver Charlesworth)
11年8月18日在11:58
$ \ begingroup $
因此,简而言之,这是内存与舍入错误之间的权衡吗?
$ \ endgroup $
–anasimtiaz
11年8月18日在13:23
$ \ begingroup $
IMO的回答太弱了。从技术上讲,它回答了问题……但仅是“技术上”。我希望看到某种语言的源代码。我知道如何实现一个简单的FIR滤波器。让我们看看IIR源代码。
$ \ endgroup $
–特雷弗·博伊德·史密斯(Trevor Boyd Smith)
2011年8月21日在17:00
$ \ begingroup $
另外,就每个样本执行的数学运算而言,哪种方法更佳?
$ \ endgroup $
–anasimtiaz
11年8月22日在10:30
$ \ begingroup $
我知道如何进行FIR滤波。我也知道什么是直接形式I / II / III / IV。我没有经验的是IIR:设计或实现。我最初的评论不是很有建设性。我应该说:“我了解I-IV的直接形式,请您谈谈如何设计/实现IIR滤波器?”
$ \ endgroup $
–特雷弗·博伊德·史密斯(Trevor Boyd Smith)
2011年9月8日于17:29
#3 楼
除非您使用的是资源匮乏的系统或有极端的要求,否则在实践中选择直接形式I还是II都不重要。例如,如果您正在PC或智能手机上做事,那真的没关系。就我个人而言,我更喜欢表格I。真正的问题通常是MIPS,如果您打算进行定点实施,事情会变得更加复杂。例如,在ARM上,如果系数和滤波器状态均为32位,则IIR滤波器将消耗更多的MIPS。如果您需要实现例如截止频率非常低的低通滤波器,则需要32位的状态和系数。在这些情况下,您可以使用其他类型的过滤器,例如状态变量过滤器。
#4 楼
除了诸如数值精度之类的技术差异外,还存在稳定性问题。当数字滤波器的极/零对彼此靠近时,频率响应可能在各个位置变得不稳定(通常接近奈奎斯特或接近零)。将IIR滤波器用于音乐应用时,选择当对滤波器参数进行实时调制(例如,改变低通滤波器的截止频率)时,实现的实现会对滤波器的稳定性产生深远影响。
我有一个开源应用程序可让您聆听以下实现中每个时变参数(例如截止频率或峰值增益)的差异:
直接形式I
直接形式II
转置直接形式I
转置直接形式II
格形
状态变量
项目在这里:
https: //github.com/vinniefalco/DSPFiltersDemo.git
https://github.com/vinniefalco/DSPFilters.git
评论
$ \ begingroup $
您已经发布了好几次,并且我倾向于执行垃圾邮件政策,除非您的答案实际上是针对这些问题的。这些帖子都没有直接回答问题,也没有推广产品。编辑它们以直接回答问题,否则它们将被删除。
$ \ endgroup $
– Phonon
2012年8月24日20:32
#5 楼
除了上面有关内存,MIPS,噪声和稳定性的注释之外;还有另一个通常被忽略的因素。这个因素是重置能力;在我的大多数情况下,这非常重要。通过Direct Form II实现,延迟输出没有状态,因此,如果将Direct Form II过滤器“重置”为“ 5”,则其初始输出不会是5我发现这很违反直觉,在使用Simulink时造成了严重的挫败感。因此,我几乎总是使用Direct Form I实现。不幸的是,如果您具有DSP工具箱,Simulink仅支持Direct Form I,即使如此,它仍然不能让您从输入信号中设置初始条件。
评论
此外,在GPU上实现它们的最佳方法是什么。@ Drazick,GPU是完全不同的游戏。需要另一个问题。