鉴于两个分离设备之间的流式音频样本具有单独的非同步但几乎相同的采样率(比如都是 44100+-2ppm),有哪些方法可以最好地隐藏速率的任何差异和/或抖动,以免导致音频输出中的可听伪影,并且隐藏算法所需的附加延迟最小?
流式音频的速率偏移和抖动隐藏
信息处理
声音的
重采样
2022-02-02 19:01:24
1个回答
在 +-2ppm 时,我们将在任何 45 秒内赢得或失去一个样本——我在这里的务实方法是忽略这个问题,当然,它的延迟极低 :)
但是,是的,特别是如果生产者比消费者慢一点,从长远来看,你会遇到问题。
现在,这个问题没有简单的解决方案——首先,您的接收器需要能够看到这个问题。
但是让我们假设它确实如此 - 只需计算(恢复?)接收信号的时钟相位并与它自己的时钟周期进行比较(这对于串行音频数据总线(例如 I2S)来说更容易,因为每个样本有很多位,所以你的位时钟更高,因此计数偏移变得更快可见,但前提是发送器持续为总线提供时钟)。
如果由于技术原因(音频数据的非连续突发、总线时钟与 ADC 时钟分离、无法访问恢复的时钟等)这不起作用,我能想到的唯一方法就是跟踪缓冲水平——我假设你的接收器在其数字输入和 ADC 之间确实有一个缓冲,尽管很小,因为否则,ADC 将不得不直接在总线时钟下运行,对吗?
您可以观察缓冲区“填充”或时钟偏移、低通滤波器和/或计算该信息的导数,定义上限和下限,如果您有一个次要关键源更快,则只需删除整个样本-than-sink 不匹配,或者在相反的情况下添加零样本。
当然,执行此操作的“正确”方法是重新采样——但从您的问题来看,在我看来,您对延迟比对准确性更感兴趣;您使用与从总线/时钟移位或缓冲区填充中获得的相同频率偏移信息来驱动您自己的任意重采样器:
- 例如,在这些部分(PC 风格的基于计算机的 SDR)中非常流行的是基于 MMSE 组合滤波器的重采样器。它们不会太长。
- 下一个更优雅的事情是多相滤波器组任意重采样器:同样,具有不同滤波器的滤波器组,这次实际上仅用于有理插值器/抽取器,但随后是“组合”下一个较低有理重采样器“分支”的输出的逻辑下一个更高的线性以获得想要的实际重采样率。优点是,使用大滤波器组,您的错误会在合理的 CPU 成本下变得非常小,并且延迟受理性重采样器组滤波器长度的限制——通常不会有数百个样本长:)
其它你可能感兴趣的问题