在 C 中检查输入方波周期的快速方法是什么?

问题描述 投票:0回答:1

我有一个采样方波(假设占空比为 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 秒的缓冲区是否可以完成该任务?

c algorithm signals frequency
1个回答
0
投票

…如果缓冲区刚好覆盖 20 秒,该任务是否可行?

函数 f 是周期函数 p iff f(x+p) = f(x) (因此 f(x+kp) = f(x) 为任何整数 k)。为了测试这一点,您至少必须具有某个点 x 和另一个点 x+p 处的函数值。如果您只有一个时期内的函数值,则没有必要点的值,因此无法测试此属性。

您所拥有的时间间隔可能包含全部一个值班部分(值 1500)或全部一个下班部分(值 0),并且您可以测试该部分是否为预期持续时间。但是您将无法测试互补部分的长度是否正确,因为您无法指示它在您拥有的间隔之外开始或结束的位置。

此外,还存在一些关于是否仅观察到值 0 或 1500 的问题。物理测量结果往往会有所不同。即使信号得到很好的控制,使其恰好为 1500 个单位,并且您的测量设备正确测量了该信号,预计在从 0 到 1500 的转换间隔期间(反之亦然)测量设备将报告介于两者之间的某个值。您希望对此有一定的容忍度。

© www.soinside.com 2019 - 2024. All rights reserved.