Высокоскоростной дигитайзер Хуана Доменека Фернандеса

Hacker

Professional
Messages
1,048
Reputation
9
Reaction score
712
Points
113
Аналого-цифровой преобразователь с 16 битами и 448000 выборок в секунду на основе Bt878A
Поддержка ALSA для обновления Bt878a и Fedora Core 4
Статья с модификацией для получения 896000 СПС

Основа: мощность реальных персональных компьютеров (ПК) дает нам возможность анализировать сложные аналоговые сигналы и манипулировать ими, но сначала нам нужно оцифровать их с помощью аналого-цифрового преобразователя (АЦП). На любом обычном ПК мы можем легко оцифровать аналоговые сигналы с помощью звуковой карты, которую он включает, но с ограничением 44000 выборок в секунду (Sps) или 96000 Sps в некоторых современных звуковых картах. Следуя Найквисту, это позволяет нам в лучшем случае получать сигналы шириной 48 кГц. Этой частоты достаточно для экспериментов со звуком, но не для исследования более широкого спектра или подробного анализа низкочастотных сигналов.

Цель: получить АЦП, позволяющий оцифровывать с максимально возможной частотой, используя "готовое" оборудование.

Метод: мы будем использовать низкочастотный АЦП, поставляемый с микросхемой Bt878A в типичной плате ПК-ТВ.

Warning: This article describe actions that should be done only by experienced people in electronics and potentially can damage your equipment.

Подготовка:

1 - Используемое оборудование:
- ПК-ТВ карта с тюнером, бренд: BestBuy, модель: EasyTV (сборка Prolink, модель: PV-BT878P + Rev 9D), чип Conexant 878A Fusion и тюнер Philips PAL_BG FI1216.
- Стандартный ПК со звуковой картой Creative.
- Linux Mandrake 9.1
- конденсатор 1 мкФ (неполяризованный).
- Аудиоразъемы типа RCA и коаксиальный аудиокабель.
- Различные инструменты: резак для кабеля, паяльник и т. д.

2 - Что такое микросхема Bt878A?
Это преемник знаменитого Bt848 . Когда Brooktree (ныне Conexant) проектировал это новое устройство, они включали в себя встроенный низкочастотный АЦП с целью оцифровки звуковых сигналов (и аудиоподнесущих), поступающих от тюнера, для последующей демодуляции с помощью программного обеспечения (получение FM-сигнала). Stereo, TV Stereo, RDS, MTS и т. д.) С помощью драйвера операционной системы. К сожалению, ни один производитель не использовал эту возможность (насколько мне известно), и они просто используют АЦП для передачи монофонического звука с тюнера на ПК (в лучшем случае).

3 - Моя ТВ-карта - это "878", но не чип Brooktree.
Мы можем найти его производства Rockwell(страница загрузки технических данных)
от Conexant, с пакетом Bt878KHF. (страница загрузки таблицы)
или Conexant Fusion 878A (страница загрузки технических данных), наиболее типичный.

4 - Какие характеристики у этого АЦП?
В техническом описании Conexant говорится:
"1.2.6 Audio DMA Channels
The audio channel delivers 8-bit or 16-bit digital samples of a digital frequency-multiplexed analog signal to system memory in packets of DWORDs.
A RISC program controls the audio DMA Program Initiator. The flow of audio data and audio RISC instructions is completely independent and asynchronous to the flow of video data and video RISC instructions.
Since the audio data path operates in continuous transfer mode (no sync gaps), both the analog and the digital audio inputs can be used for other data capture applications. The analog input offers 360 kHz usable BW at 8 effective bits or 100kHz usable BW at 12 effective bits. The digital input offers up to 20 Mbps for the parallel mode and 40 Mbps for the serial mode."
Gerd Knorr, говорит в его btaudio «s README файл:
"The analog mode supports mono only. Both 8 + 16 bit. Both are _signed_int, which is uncommon for the 8 bit case. Sample rate range is 119 kHz to 448 kHz. Yes, the number of digits is correct. The driver supports downsampling by powers of two, so you can ask for more usual sample rates like 44 kHz too."
Что касается этого документа, мы заключаем, что: АЦП Bt878A может работать с 8- и 16-битными выборками, 119000 и 448000 Sps и одним каналом (монофоническим) без какого-либо преобразования или дополнительного оборудования.

5 - Моя плата ПК-ТВ использует Bt878A, но не PV-BT878P + Rev 9D. Могу ли я использовать его в любом случае?
Вам нужно внимательнее присмотреться к своей плате, чтобы узнать, как производитель карты использует входные контакты АЦП.


Контакты АЦП:
Pin #SignalDescription
100STV ITV sound input from TV tuner.
98SFM IFM sound input from FM tuner.
94SML IMIC/line input.
96SMXC AAudio MUX anti-alias filter RC node. Connect through 68 pF capacitor to BGND.
106RBIAS AConnection point for external bias 9.53 kΩ 1% resistor.
105VCOMO ACommon mode voltage for the audio analog circuitry. This pin should be connected to an external filtering 0.1 µF capacitor.
104VCOMI ACommon mode voltage for the audio analog circuitry. This pin should be connected to an external filtering 0.1 µF capacitor.
107VCCAP AAudio analog voltage compensation capacitor. This pin should be connected to an external filtering 0.1 µF capacitor.
103VRXP AAudio input circuitry reference voltage. This pin should be connected to an external filtering 0.1 µF capacitor.
102VRXN AAudio input circuitry reference voltage. This pin should be connected to an external filtering 0.1 µF capacitor.
Наши контакты - это # 100, # 98 и # 94, которые являются входами сигнала АЦП. На моей плате № 94 не используется, № 100 и № 98 подключены к одной медной дорожке, а оттуда к звуковому выходу тюнера. Рекомендуется проверить, установлены ли конденсаторы внешнего опорного напряжения, поскольку они необходимы для преобразования АЦП.
Bt878A включает в себя внутренний мультиплексор (мультиплексор) для выбора активного звукового входа (TV, FM или MIC) так же, как внутренний видеомуксор выбирает активный видеосигнал (тюнер, S-Video или композитный).
Важно не путать этот мультиплексор с внешним мультиплексором, который PV-BT878P + включает в себя, используя Philips HEF4052B (страница загрузки таблицы данных), управляемый портом GPIO.
Все приведенные здесь инструкции напрямую применимы только к плате Prolink PV-BT878P + 9D, но мы можем успешно использовать другую карту, если изучим ее подробно и применим эти концепции.

Если ваша плата не использует входы АЦП (они не подключены к какой-либо медной дорожке), я предлагаю не использовать ее, потому что очень сложно припаять микросхему SMD, и вам понадобятся инструменты, которые трудно найти.

Монтаж:
1 - Для начала нам понадобится рабочий Linux с ядром 2.4 и поддержкой звука:
Я использовал Mandrake 9.1
# uname -a
Linux lab 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i586 unknown unknown GNU/Linux
Основная причина использовать Linux для управления АЦП заключается в том, что я не нашел драйверов для Microsoft Windows, которые позволили бы мне использовать АЦП Bt878A как звуковое устройство операционной системы. Если кто-нибудь пришлет мне информацию по этому поводу, я буду очень признателен. (Это не значит, что я не люблю работать с Linux ... мне это очень нравится :)

2 - Проверьте, включен ли звуковой модуль:
# lsmod
Module Size Used by Not tainted
af_packet 14952 0 (autoclean)
ide-floppy 15580 0 (autoclean)
ide-tape 48304 0 (autoclean)
ide-cd 33856 0 (autoclean)
cdrom 31648 0 (autoclean) [ide-cd]
floppy 55132 0
ne2k-pci 6752 1 (autoclean)
8390 7916 0 (autoclean) [ne2k-pci]
supermount 15296 2 (autoclean)
videodev 7872 0
sb 9044 0 (unused)
sb_lib 41454 0 [sb]
uart401 8196 0 [sb_lib]
sound 70644 0 [sb_lib uart401]
soundcore 6276 0 [sb_lib sound]

rtc 8060 0 (autoclean)
ext3 59916 2
jbd 38972 2 [ext3]

3 - Проверьте, создано ли первое звуковое устройство:
# ll /dev/dsp*
lr-xr-xr-x 1 root root 9 Jan 6 12:26 /dev/dsp -> sound/dsp
lr-xr-xr-x 1 root root 10 Jan 6 12:26 /dev/dspW -> sound/dspW

4 - В Xwindows мы открываем звуковой микшер и проверяем, показывает ли он параметры нашей звуковой карты:
5 - Мы воспроизводим тестовый звук, и мы должны прослушать его через наши динамики.


Например:
# sox -t .wav /usr/share/licq/sounds/fun/Online.wav -t ossdsp /dev/dsp

6 - Установите карту ПК-ТВ внутрь компьютера.
Просто подключите антенный кабель ТВ. Не подключайте к карте звуковой кабель.

7 - установка bttv (0.7.107)
Из-за некоторых проблем при установке модуля bttv этот раздел был упрощен. Мы перейдем непосредственно к загрузке модуля btaudio, игнорируя компиляцию bttv.

8 - загрузка модуля btaudio
btaudio - это модуль ядра, который позволяет нам использовать АЦП Bt878 как звуковое устройство в Linux (спасибо, Герд!). Версия Linux, которую я использую (Mandrake 9.1), включает этот модуль в /lib/modules/2.4.21-0.13mdk/kernel/drivers/sound/btaudio.o.gz, и мы можем приступить к его загрузке.
# insmod btaudio debug=1

Если все идет хорошо, мы должны прочитать это в журнале ядра:
#tail -100f / var / log / syslog | grep btaudio
17 апреля 19:08:57 лабораторное ядро: btaudio: загружен драйвер версии 0.7 [цифровой + аналоговый]
17 апреля 19:08:57 лабораторное ядро: btaudio: Bt878 (rev 17) в 00: 09.1, irq: 10, задержка : 32, mmio: 0xde001000
17 апреля 19:08:57 лабораторное ядро: btaudio: с использованием конфигурации карты "default"
17 апреля 19:08:57 лабораторное ядро: btaudio: зарегистрированное устройство dsp1 [digital]
17 апреля 19:08:57 лаборатория ядро: btaudio: зарегистрированное устройство dsp2 [аналог]
17 апреля 19:08:57 лабораторное ядро: btaudio: зарегистрированное устройство микшера1

9 - Компиляция модуля
Если в нашем Linux нет уже скомпилированного btaudio, мы можем попробовать скомпилировать его самостоятельно. Вы можете получить исходный код здесь btaudio-0.7.tar.

"Un-tar", перейдите в каталог и скомпилируйте:
# gcc -O2 -DMODULE -D__KERNEL__ -c btaudio.c -isystem /lib/modules/2.4.21-0.13mdk/build/include/

Сжать и переместить модуль в его папку:
# gzip btaudio.o
# mv btaudio.o.gz /lib/modules/2.4.21-0.13mdk/kernel/drivers/sound/
# depmod -a

В моей системе я получил это сообщение после команды depmod «depmod: *** Неразрешенные символы в btaudio.o.gz», но я просто игнорирую его. Теперь мы можем загрузить модуль:
# insmod btaudio debug=1

Если мы прочитаем это сообщение об ошибке:
./btaudio.o: kernel-module version mismatch
./btaudio.o was compiled for kernel version 2.4.21-0.13mdkcustom while this kernel is version 2.4.21-0.13mdk.

Мы должны отредактировать файл /usr/src/linux/include/linux/version.h, заменить его '#define UTS_RELEASE "2.4.21-0.13mdkcustom"'на '#define UTS_RELEASE "2.4.21-0.13mdk"'и повторить этап компиляции.

10 - Теперь мы проверяем наличие двух новых звуковых устройств:
# ll / dev / dsp *
lr-xr-xr-x 1 root root 9 6 января 13:54 / dev / dsp -> sound / dsp
lr-xr-xr-x 1 root root 10 6 января 14:04 / dev / dsp1 -> sound / dsp1
lr-xr-xr-x 1 root root 10 6 января 14:04 / dev / dsp2 -> sound / dsp2

lr- xr - xr -x 1 root root 10 6 января 13:54 / dev / dspW -> sound / dspW
/ Dev / dsp1 - это цифровой аудиоинтерфейс I2S, а / dev / dsp2 - это АЦП Bt878A, который мы будем использовать.

11 - Звуковой микшер обнаруживает новое звуковое устройство: "Brooktree_Bt878_audio"
Мы выбираем Rec, немного увеличиваем уровень записи в Line1 и оставляем Line2 и Line3 без звука, как показано на изображении.

12 - Тест Audio_in:
# sox -w -r 32000 -t ossdsp /dev/dsp2 -t ossdsp /dev/dsp
Мы должны слышать сильный звуковой шум в динамиках, подключенных к нашей звуковой карте. Это аудиосигнал, который исходит от тюнера (он активируется при загрузке ПК), который мы оцифровываем и отправляем на звуковую карту. Делаем это с нашим Bt878! :)
Мы можем использовать телевизионную программу (например, xawTV), чтобы настроить телеканал и использовать его звук в качестве теста (вместо шума). Необязательно видеть телевизионное изображение идеально. Оставив команду sox запущенной в оболочке, мы услышим звук канала.

13 - Тест захвата звука:
# sox -w -r 448000 -t ossdsp /dev/dsp2 -t .wav sound.wav
-w 16 бит
-r 448000 Sps
/ dev / dsp2 Аналоговый вход АЦП
-t Формат аудиофайлов .wav
Анализируя звуковой файл с помощью Audacity (бесплатная программа), мы видим слева звуковую зону (до 20 кГц), исходящую от телевизионного сигнала. Но есть также сигналы на более высоких частотах (шум), которые являются лучшим доказательством того, что мы переводим на более высокие частоты, примерно до 224 кГц.

Модификации

1 - Вход внешнего сигнала.
В PV-BT878P + 9D доступны следующие подключения:
Кажется, что разъем AudioIN позволяет нам подавать сигнал на плату, а затем на низкочастотный АЦП Bt878A, но это не так. Необъяснимо, но задача AudioIN состоит в том, чтобы просто передать нам этот сигнал обратно на разъем AudioOUT через мультиплексор Philips, как показано на следующей диаграмме. Хотелось бы ошибиться, но ... :(
Подводя итог: используя внешний мультиплексор, мы можем выбирать между звуком тюнера или сигналом AudioIN и отправлять его через разъем AudioOUT, но этот внешний сигнал никогда не достигнет АЦП.

2 - Доступ к выходу тюнера.
Концепция мода такова: подавать внешний сигнал в АЦП с помощью выхода аудиотюнера на выводе №25, сначала обрезав этот вывод и подключив его за пределами нашего ПК. Мы подключим снаружи также аудиовыход тюнера, чтобы иметь возможность использовать этот ресурс в будущем.


Тюнер Philips FI1216 Datasheet
SYMBOL
PIN​
DESCRIPTION
VT
11​
tuning voltage (monitor)
VS
12​
supply voltage tuner section +5 V
SCL
13​
I2C-bus serial clock
SDA
14​
I2C-bus serial data
AS
15​
I2C-bus address select
n.c.
21​
not connected
2nd IF sound output
22​
second IF sound output
CVBS
23​
Composite Video Baseband Signal output
VIF
24​
supply voltage IF section +5 V
AF sound output
25
AF sound output

3 - Шаги:
- Снимите плату ПК-ТВ с ПК
- Отрежьте (осторожно!) Звуковой выход тюнера на контакте номер 25 .
- Припаяйте к старому контакту № 25 на поверхности печатной платы конденсатор емкостью 1 мкФ, чтобы остановить постоянный ток, используйте самые короткие выводы конденсатора, насколько это возможно.
- Припаяйте между конденсатором и землей платы коаксиальный звуковой кабель (экран кабеля соединен с землей).
- Я предлагаю использовать в качестве заземления ножку шасси тюнера, которая проходит через печатную плату.
- Припаяйте гнездовой аудиоразъем RCA (или какой вы предпочитаете) на конце кабеля. Мы можем назвать этот ввод: ADC_IN.
- Припаяйте контакт № 25 (сейчас находится в свободном состоянии) и заземлите другой коаксиальный аудиокабель.
- Припаяйте гнездовой аудиоразъем RCA (или какой вы предпочитаете) на конце кабеля. Мы можем назвать этот вывод: Tuner_OUT.
- Установите плату, оставив кабели вне коробки ПК.

Вот несколько картинок, на которых можно проверить насколько плохо я паяю :)

4 - Тест.
После того, как карта будет установлена и система заработает, мы проведем тест, чтобы выяснить, правильна ли пайка.
Со стандартной мужской RCA аудио кабель, подключаем вместе ADC_IN и Tuner_OUT и повторите шаг: Установка-12. Мы должны снова услышать шумовой сигнал (или звук, если у нас настроен телеканал), который исходит из тюнера, но теперь он идет с нашего ПК и в него.
Если тест прошел успешно, у нас есть готовый 16-битный доморощенный АЦП 448000 Sps.

5 - Помехи.
Теперь интересно провести небольшой тест, чтобы исследовать «соседство», которое мы всегда будем иметь в наших экспериментах: внутренние компьютерные помехи.
Неважно, насколько хорошо мы паяем или насколько коротка неэкранированная медь, которую мы оставляем, мы столкнемся с некоторыми помехами из-за количества электроники вокруг Bt878A.

Это график, созданный SpectraPLUS (30- дневная демонстрация) для Microsoft Windows с использованием сигнала, полученного от Bt878A без каких-либо подключений к ADC_IN и усиленного программным обеспечением с параметром Plot_Top = 0,010.
В моем случае я наблюдаю сильные сигналы между 0 и 2000 Гц и некоторые "несущие" на 60, 98, 102, 120,4 и 180,4 кГц.
Теоретически разные модели ПК создают разные помехи, и важно знать их, чтобы не получить неверных результатов в наших экспериментах. Но не волнуйтесь, если у вас подключена какая-то нагрузка и входящий сигнал достаточно сильный, эти помехи почти исчезнут.

6 - Что теперь?
Ваша очередь, теперь у нас нет лимита нашей плохой звуковой карты. Я изучаю новые области и нахожу действительно интересные вещи, и скоро опубликую новые статьи.
Кто-нибудь может догадаться, от какого типа сигнала исходит этот спектр? (щелкните для увеличения)

Удачной выборки! :)
Поддержка ALSA для обновления Bt878a и Fedora Core 4
Статья с модификацией для получения 896000 Sps

Автор:
Хуан Доменек Фернандес
 
Last edited:
Top