如何确认范围单元迁移校正已正确完成?有没有办法在不查看信号数据的情况下以图形方式检查?
信息处理
离散信号
信号分析
插值
雷达
正弦
2022-02-11 09:28:51
1个回答
DSP 与任何其他软件开发学科最相似 ¹。
如果软件质量取决于您对所见内容的理解,那么以后您将永远不会发现错误,因为您无法再查看内部图。正如您所指出的,查看图通常不是检查算法有效性的最佳方法,特别是因为接受或拒绝的标准没有正式定义。在一个特别令人沮丧的星期五,你可能会接受一些你在下星期一明显发现是错误的事情!并且没有任何欺骗的意图:人类不擅长检查约束。
所以:
你写了一些代码,然后你想知道它是否正确。对于此类问题,久经考验的补救措施是检验该假设的能力。在软件工程中,当应用于功能单元(如您的 RCM 实现)时,我们称此类休息单元测试,当用于验证由单独测试的单元组成的复杂系统时,我们称其为集成测试。
因此,在这里,您需要编写单元测试。以我的经验,重要的是不要从一个非常复杂的例子开始 - 从你输入 RCM 的信号开始(即通常来自脉冲压缩的信号),它由全零组成,但单元格中只有一个不会迁移。输入应该是输出,如果这样有效,你可能做对了很多事情。然后计算迁移是完整单元的倍数的点。使用相同的单目标信号进行测试。作品?伟大的!
只有在实际测试 sinc 插值之后。计算一个点,您将有合理数量的细胞迁移,例如个细胞。通过适当的因子 (8) 对您的信号进行 Sinc 插值:与长度相同的输入信号的 fft,在结果末尾添加 7 倍的零,ifft,取 15.、23.、31。 , ... 结果样本。将您以这种方式获得的结果与您的 RCM 进行比较。
单元测试的一般技巧和提示:
- 尽可能愚蠢地编写它们。那里出错会花费你很多时间。清晰而愚蠢的想法总比你错过一个错误的优雅要好。
- 当您认为“我现在需要计算一些东西以用作参数”时,请在单元测试本身中进行计算,或者至少写下您使用的公式和参数。你需要追溯下周这些数字的来源
- 为您的个人测试提供描述性名称或文档。你在这里测试什么?
- DSP 有点特殊,因为我们需要处理噪声信号。所以噪音是我们测试的一部分。使用足够多的噪声信号进行测试,这样您就可以相当自信地发现,如果您发现了一个错误,那么您在每次运行单元测试时都会发现它。让一个单元测试运行 12 到 1000 次失败对任何人都没有帮助,尤其是当人们无法重建导致失败的噪音时。
- 从不真正使单元测试随机化:在每次运行中使用种子来初始化伪随机数生成器和种子。因为您选择了足够大的噪声量以确保您在单次运行中没有遗漏任何内容,所以在不同的运行中使用不同的鼻子实现只有缺点。
- 我知道我在测试中花了很多时间在随机性上,但是:使用线程安全、良好的 prng。如果您发现使用 C's 的东西,
rand()变化很大:从中产生的随机数通常非常不好,并且您的程序中使用该函数的其他东西会改变状态!
- 我知道我在测试中花了很多时间在随机性上,但是:使用线程安全、良好的 prng。如果您发现使用 C's 的东西,
- 使用现有的单元测试框架。这个很重要。您不想花时间设计、质疑和修复自己的运行测试方式。这种框架的存在会严重影响您对编程语言和 DSP 框架的选择
- 从小做起,从琐碎到集成测试
¹ 或数字硬件开发,与软件开发基本相同,只是工具更差但成本更高,大多数测试更难编写
其它你可能感兴趣的问题
