提问人:cercio 提问时间:11/9/2023 更新时间:11/9/2023 访问量:101
在 C 中检查输入方波周期的快速方法是什么?
What is a quick way to check the period of an input square wave in C?
问:
我有一个采样方波(假设占空比为 80%)作为输入,我需要检查信号周期是否为 20 秒。由于我每 100 毫秒采样一次,因此我将信号保存在 200 个数组中。然后,数组将如下所示:
int signal_buffer [200] = {0,0, . . . , 1500,1500,1500, . . . , 0}
1500 是我的“高”状态。当然,如果波的高部分从记录缓冲区的开头或中间的某个地方开始,这个信号缓冲区可能看起来不同,那么我会有类似的东西:
int signal_buffer [200] = {1500,1500, . . . , 0,0,0, . . . , 1500,1500}
我现在的问题是,实际检查该信号的周期是否实际上是 20 秒的好算法是什么?我试着计算高点之间的零,并试图从那里推断出这段时间,如果缓冲区正好覆盖 20 秒,这项任务是否可能?
答:
1赞
Eric Postpischil
11/9/2023
#1
...如果缓冲区正好覆盖 20 秒,这项任务是否可行?
函数 f 是周期性的,周期为 p iff f(x+p) = f(x) (因此对于任何整数 k,f(x+kp) = f(x)。为了测试这一点,您必须至少在某个点 x 和另一个点 x+p 处具有函数的值。如果在一个时间段内只有函数的值,则在必要点处没有值,因此无法测试此属性。
您拥有的间隔可能包含所有一个值班部分(值 1500)或所有一个非值班部分(值 0),并且您可以测试该部分是否为预期持续时间。但是你无法测试互补部分的长度是否正确,因为你没有迹象表明它在你所拥有的间隔之外的开始或结束。
此外,关于是否只观察到值 0 或 1500 也存在一些问题。物理测量值往往会有所不同。即使信号控制良好,正好是 1500 个单位,并且您的测量设备测量正确,预计在从 0 到 1500 的过渡间隔内,反之亦然,测量设备会报告介于两者之间的一些值。你会希望对此有一定的容忍度。
评论