Управлять ЦАП из потока, который синхронизируется из другого источника?
Мой ЦАП имеет тактовую частоту 48 кГц, мне нужно подать его из потока, который также 48 кГц, но синхронизируется из другого источника.
Эти два источника будут дрейфовать со временем, и любая промежуточная буферизация неизбежно будет переполнена или недостаточна.
К сожалению, нет никакого механизма контроля скорости, доступного для источника.
Как это лучше всего сделать?
Будет ли приемлемым дублировать или отбрасывать случайный образец для компенсации? Я оцениваю 1 образец каждые ~70 тыс. Образцов для разницы в 30 частей на миллион.
3 ответа
Поскольку ваши часы работают на двух разных скоростях, у вас нет выбора, кроме как дублировать или отбрасывать сэмплы.
Ведите подсчет того, сколько образцов было прочитано / записано, и рассчитайте, сколько образцов вы ожидаете прочитать / записать, основываясь на текущем времени. Расхождения могут быть исправлены путем дублирования / отбрасывания образцов.
Если вас беспокоит точность воспроизведения, вместо отбрасывания или дублирования семплов используйте преобразователь частоты семплирования. Во-первых, используйте временные метки для измерения относительного соотношения частот между частотой дискретизации источника и частотой дискретизации вашего ЦАП. Используйте это соотношение для управления преобразователем частоты дискретизации. Приличный качественный преобразователь частоты дискретизации может обеспечить соотношение сигнал / шум 95 дБ. Более дорогие в вычислительном отношении алгоритмы могут дать вам отношение сигнал / шум> 120 дБ.
Увидеть:
- WIkiPedia в статье о преобразовании частоты дискретизации
- libsamplerate
- Аналоговые Устройства имеют документы о высококачественных алгоритмах преобразования частоты дискретизации
--jdkoftinoff
Это может звучать глупо, но выслушайте меня: действительно ли важна скорость вывода?
Рассмотрим этот сценарий - у вас есть устройство ввода звука. Вы выбираете аналоговый входной сигнал с частотой 48 кГц. Эта форма волны может быть сгенерирована с любой скоростью - от непрерывного измерения уровня давления микрофона до голосового кодека 8 кГц или ниже. Тот факт, что вы знаете, что этот конкретный выход также на 48 кГц, не имеет никакого отношения к тому, что вы делаете.
Если между устройством вывода и вашим входом была совершенная передача, при сравнении исходного цифрового сигнала с тем, что вы прочитали, иногда вы увидите, что вы дублировали семпл (если ваши часы быстрее) или пропустили (если вы медленнее).). Но это произойдет автоматически, без какой-либо компенсации с вашей стороны. Это легко будет точно так же, как и любая ваша попытка выяснить, когда "продублировать или отбросить случайный образец".
На практике вы, вероятно, в любом случае не получите точного дубликата между эффектами фильтрации и шумом как в ЦАП, так и в АЦП. Если вы не говорите о каком-то кодированном цифровом аудиоформате - в этом случае игнорируйте все, что я сказал.
РЕДАКТИРОВАТЬ - Хорошо, так это цифровой звук - S/PDIF?
Сигнал должен нести достаточно информации для реализации фазовой синхронизации. В идеале в аппаратном обеспечении - передние фронты сигнала определяют тактовую частоту - вы можете использовать аппаратное обеспечение ФАПЧ для привязки ваших АЦП к входу. Или на некоторое время пересчитайте и посчитайте нарастающие фронты, чтобы определить скорость. Или на уровне программного обеспечения измерьте частоту ошибок кадрирования в первых четырех временных интервалах и настройте свои часы для компенсации.