确定不同频率的两个信号之间有效"相位差"的算法?

e.J*_*mes 9 language-agnostic algorithm signal-processing frequency

快速版:

如果我拥有的唯一信息是每个上升沿出现的时间,我可以用什么算法来确定两个不同频率的方波信号之间的"相位差" ?

详细版本:

我正在开发一个嵌入式软件项目,我遇到了一个有趣的问题.我从两个霍尔效应速度传感器收集数据,每个传感器都针对两个啮合齿轮中的一个,如下图所示:

啮合齿轮和脉冲信号http://img291.imageshack.us/img291/4905/gears.png

注意:
正如Jaime指出的那样,该图中的信号实际上具有相同的频率.真正的硬件具有两个靶的齿轮,其中的一些是由轴代替啮合齿连接在几个传动级,因此我有两个方波具有不同频率的结束,和它们之间的比率仍然是一个常数.我想简化图表来解决问题,但看起来我简化了太多了!
/注意

速度传感器输出方波信号,其频率与每个齿轮的转速成正比.当单个齿轮齿的前(和后)边缘经过传感器时,出现方波的上升(和下降)边缘.

我知道每个齿轮上有多少齿,根据这些信息,我能够根据方波信号的频率精确测量每个齿轮的转速.

为了测量频率,我将每个速度传感器信号连接到嵌入式控制器上的高速捕获定时器引脚.捕获定时器自动检测方波信号的上升沿,加载一个寄存器,其值表示转换发生的时间,并触发中断.每个信号的捕获点在图中以黄色显示.中断服务程序看起来像这样:

struct
{
    long previousTime;
    int frequency;
}
sensors[2];

void CaptureTimer_Interrupt(int channel, long transitionTime)
{
    long timeDifference = transitionTime - sensors[channel].previousTime;
    sensors[channel].frequency = CONVERSION_FACTOR / timeDifference;
    sensors[channel].previousTime = transitionTime;
}
Run Code Online (Sandbox Code Playgroud)

我想做什么:

我希望能够检测出这两个方波信号的相对时序的微小差异.由于缺乏更好的术语,我称之为"相位差".如果两个信号具有完全相同的频率,则这将是直截了当的,并且相位差将是正确的术语.

这就是我所得到的:如果我要在很长一段时间内记录这两个信号,然后人为地减慢(或"伸展")高速(蓝色)信号16/9,它将具有与低速(红色)信号完全相同的频率,并且这两个信号将具有一些可测量的相位差,即红色信号中断和蓝色信号中断之间的时间差.我想计算相同的时间差(或等价的东西),而不必长时间记录信号.嵌入式控制器的资源有限,因此不能存储过去转换时间的大型数组.

有没有人遇到过这个?实际项目有几个这样的齿轮和传感器安排,所以我正在寻找一个优雅的算法,我可以重用.提前致谢!

Sva*_*nte 2

总信号(即添加红色和蓝色时得到的信号)的相位长度是蓝色信号的 16 倍和红色信号的 9 倍。您可以测量每 16 个蓝色上升侧翼和每 9 个红色上升侧翼之间的时间差。

我想你想要测量的是齿轮的磨损。我认为,如果没有均匀的牵引力,该测量可能会受到齿轮公差的影响(引入噪音)。