USB音频设备类的音频信号同步解决方案
点,由于时钟速度差异的长期固有性,在插入/丢弃一个PCM样点后,缓存数量仍然可能继续减少或增加,从而造成程序无规律的爆发式的插入或丢弃数据操作,产生不可接受的噪音。
因而在算法设计时,重点考虑以下几点。
操作的稳定性:不能有对数据突发性的操作。
操作的分散性:要尽量平均的控制信号,把插入/丢弃产生的失真平均化。
资源消耗量小:要适应嵌入式系统成本低廉、片上存储、运算资源不是很富裕的客观条件。
音频的实时性:声音对实时性要求较高,不能出现停顿、明显延迟等情况。
因此,采用一种插入/丢弃样本间隔平均化的自适应模糊控制算法进行设计。
针对两次插值/丢弃操作之间的样点数进行控制,而非对样点本身,在每次插值/丢弃操作后进行速率匹配判断,修改插值/丢弃间隔。由于通常这种时钟差异在千分之一量级,插入/丢弃操作间隔也在千样点量级,大大减少了频繁的判断操作。算法结构如图3所示。
5 算法实现
由于每台电脑以及每块开发板的时钟都有误差,所以每次连接设备都需要检查两者时钟速率关系,实现该功能的关键代码如下:
(1)基本性能
关闭软件锁相环,系统在缓存中存放240个sample开始播放。而每次当程序播放约45 s时,由于缓存消耗殆尽,语音会自动中断,无法播放。
开启软件锁相环,程序可以无时间限制运行,达到设计目的。
(2)缓存需求测试
在播放至少10 min稳定以后,利用变量rangel和range2跟踪缓存内数据数量波动范围,记录最大值和最小值,分12次测试,如图4所示。
可见,在启动软件锁相环以后,缓存中数据量最大浮动范围在192~250 sample之间。因此,为保证数据不溢出,只需要约60字节空间作为缓存就能维持设备正常工作。
(3)估算时钟偏差测试
在不同电脑上运行10 min以上,提取插入/丢弃数据间隔,取倒数可以得到稳定后设备和USB时钟偏差率。由图5可见,总体偏差在0.001~0.003以内,基本符合预期。
(4)稳定性测试
运行10 min以后,读取当前设备缓存内数据量。由于每次写入/读取8个sample,而终止程序进行数据提取是随机的,无法确定缓存刚才由USB写入还是由 ML2308读取,因此在240上下8个sample以内都是完全符合预期的。由图6可见,程序能准确地将缓存中数据量控制在240个sample左右,完全达到设计目标。
结 语
基于插值算法的自适应软件锁相环,适用于针对USB_Audio_Class_Device的时钟同步需求。它在达到设计要求的前提下,对嵌入式系统内存和MIPS占用极低,非常适合在利用USB总线作为音频数据传输,或通信双方存在一定的不确定速率的误差且需要设备自主完成数据同步的设备中使用。
- 解读车载AM/FM收音机电路(04-21)
- WiFi及802.11标准于无线音频中的应用(07-17)
- 基于DSP的机载选呼解码器设计 (03-29)
- 音频信号数字化光纤传输实验仪信道的设计与实现(08-31)
- 用于测量S/N的音频带通滤波器电路功能及原理介绍(02-12)
- 可改善话音信号噪声比S/N的音频带通滤波器电路及原理(02-12)