Для того чтобы проверить побитовую точность вывода данных по цифровым интерфейсам
при помощи осциллографа, нужны тестовые файлы.
Проще всего на глаз воспринимается последовательность битов 10101010.
Для того чтобы сигнал не был простой постоянной составляющей с которой легко обмануть себя и софт,
можно менять по случайному закону один старший, а лучше два старших бита.
Запускаем тестовый трек на воспроизведение, и при точной выдаче сигнала будет получена подобная картинка
(конфиг foobar->asio->tremor@ap192):
Два старших бита меняются, а остальные стоят как вкопаные:
А вот что будет, если включить галочку Dither.
тут начинает меняться самый младший бит, хотя в исходном файле этого не было:
Если передвинуть движок громкости фубара, то от точности мало что остаётся:
При наблюдении i2s синхронизироваться можно просто к вордклоку.
Для исследования SPDIF цифровым осциллографом синхронизироваться необходимо по ширине импульса.
На аналоговом осциле синхронизацию поймать немного проще.
Каждый подкадр, несущий одно слово данных одного канала, начинается с преамбулы.
Преамбула начинается с импульса, который длиннее, чем это разрешено правилами бифазного кодирования.
В данном случае видим преамбулу X, состоящую из 3+3+1+1 интервалов.
Или, в режиме накопления должны проходить все возможные преамбулы вида 3311 3212 3113,
а остальное "тело" суб-кадра должно оставаться неизменным.
Естественно, сигнал пока не подаем, на выход идут лишь нули:
Далее, включаем испытательный трек на воспроизведение, видим в случае достоверного вывода,
в теле суб-кадра нашу последовательность нулей и единиц, закодированную бифазным кодом.
(0 выдаётся как импульс двойной ширины, 1 - как два импульса единичной длительности с изменением полярности)
Кадр начинается с преамбулы, затем идут 24 бита аудиоданных, в конце кадра расположены четыре служебных бита VUCP.
В SPDIF Биты идут наоборот по отношению к i2s, после преамбулы передаётся самый младший бит, и а заканчивается старшим.
Видим перед VUCP наши два меняющихся старших бита, остальные стоят:
В этом случае видим только 13 достоверных бит, остальные 11 забиты шумом дизеринга.
Эта осциллограмма получена в режиме foobar->DirectSound.
Из-за случайности младших битов, полярность сигнала меняется, нулевое значение бита данных передаётся как двойным нулём, так и двойной единицей.
Испытательный трек 96/24 прилагается.
При переводе его в другие частоту дискретизации и битность, надеюсь, сложностей не возникнет.
Вот и всё, что я имею сказать про подсчет импульсов в SPDIF-е.
Задавайте ваши вопросы.
PS. Нужно добавить, что тестовый трек предназначен для проверки только цифровых интерфейсов.
Снимаю с себя всякую ответственность за возможные повреждения при проверке им колонок, наушников, усилителей и ушей.
Социальные закладки