基于两个不同系列的通用比例

时间:2012-01-06 08:38:03

标签: algorithm math

以下困扰我一段时间:

我有两个系列的数字,一个代表视频时间戳,另一个代表音频时间戳。这两个使用不同的音阶,视频是以纳秒为单位,音频是微秒,(或者相反,微秒和纳秒,或者其他任何东西,重要的是它们不一样,因为它们来了从两个不同的硬件设备一直)。现在,我想从这两个中创建一个视频流,显然其中一个总是关闭。直到现在我已经破解了我总是使用“更大”的解决方案作为主要解决方案,但这导致了其他流的问题,包括音频故障或冻结图片。

现在,我需要制定一个有效的解决方案,即。从这两个系列创建一个共同的时间戳基础。你能帮我解决这个问题吗?

作为一个例子,我得到的数据类似于:

VIDEO: 100 150 200 250

AUDIO: 1000 1500 2000 3000 5000

我想输出像

这样的系列

A(????)V(????)A(????)V(?????)等......其中????显然是在不同的规模上尊重后续的VIDEO和AUDIO时间戳之间的差异。

谢谢, F。

1 个答案:

答案 0 :(得分:2)

这个问题非常科学(虽然很简单)并且实现起来并不是那么简单。

首先要注意的是:你实际上有第三个时间刻度 - 系统时间。

需要注意的第二件事:您无法直接找到与给定音频时间戳对应的视频时间戳,反之亦然但您可以直接查找刚刚到达的系统时间视频时间戳或刚刚到达的音频时间戳。

所以你(1)找到从视频时间刻度到系统时间的线性转换,以及(2)从音频时间刻度到系统时间的线性转换。

现在您可以找到从视频时间戳到音频时间戳的转换,反之亦然。

然后您必须选择参考时间刻度 - 视频或音频或系统时间。您可以根据需要将任何时间刻度的时间戳转换为参考时间刻度。

注意每个音频样本都有自己的时间戳,应该转换为新的时间刻度,因此输出采样率与输入采样率不同。由于您的线性转换可能是自适应的 - 不同音频数据包的输出采样率会有所不同。所有这些意味着如果您的参考时间刻度不是音频时间刻度,您必须使用您选择的算法(如线性或更高级的算法)仔细地将每个音频数据包重新采样为您选择的(恒定)采样率。否则,如果您假设采样率没有改变 - 您将在音频数据包之间存在间隙和/或重叠(这将导致非常不愉快的音频伪像)。

这种方法最重要的子任务是线性减少:在给定一组采样点x的情况下,在y(x,y)之间找到最佳线性转换。

此任务通常定义如下:对于给定的一组点(x n ,y n 找到( k,b)以便(y n - (k * x n + b)) 2 是最小的(最小平方差总和)。

答案是

k =(M(x * y) - M(x)* M(y))/(M(x 2 ) - (M(x)) 2 ),b =(M(y)(M​​(x 2 ) - M(x * y)* M(x))/(M(x 2 < / sup>) - (M(x)) 2

其中 M(f)表示所有 f n 值的算术平均值。

实际上更多的点(x n ,y n 意味着更精确的线性模型。该误差非常显着地取决于(M(x 2 ) - (M(x)) 2 值(大值意味着小误差) 。因此,只有当你有足够的分数时才必须应用这个公式 - 这样(M(x 2 ) - (M(x)) 2 值大于某个限制值。