首先是问题:
我应该如何在软件中为数字滤波器(带通/带阻)编写单元测试?我应该测试什么?是否有任何用于过滤的规范测试套件?
如何选择测试输入,生成预期输出,并以我可以说实际输出符合预期输出的方式定义“一致性”?
现在的上下文:
我正在开发的应用程序(肌电信号采集和分析)需要使用数字滤波,主要是带通和带阻滤波(Visual Studio 中的 C#/.Net)。
我们应用程序的先前版本使用我们可以使用的一些遗留代码实现了这些过滤器,但我们不确定它在数学上的正确性,因为我们没有对它们进行单元测试。
除此之外,我们还在评估Mathnet.Filtering,但他们的单元测试套件还不包括子类OnlineFilter
。
我们不确定如何评估一个过滤库而不是另一个,我们得到的最接近的方法是过滤一些正弦波以观察它们之间的差异。对于单元测试,这也不是一个好方法,这是我们希望自动化的(而不是运行脚本并在其他地方评估结果,甚至是可视化的)。
我想一个好的测试套件应该测试类似的东西?
- 线性和时间不变性:我应该如何为此编写自动化测试(带有布尔值,“通过或失败”断言)?
- 脉冲响应:向滤波器提供脉冲响应,获取其输出,并检查它是否“符合预期”,在这种情况下:
- 我将如何定义预期响应?
- 我将如何定义一致性?
- 正弦输入的幅度响应;
- 阶跃/恒定偏移输入的幅度响应;
- 频率响应(包括半功率、截止、斜率等)
我不能被认为是编程或 DSP 方面的专家(远非如此!),这正是我对“似乎”运作良好的过滤器持谨慎态度的原因。对于我们来说,客户质疑我们的过滤算法是很常见的(因为他们需要发布使用我们的系统捕获数据的研究),我希望有正式的证据证明过滤器按预期工作。