metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-11-09 12:15 pm

Опердень на FPGA

Сижу снимаю стресс от опердени (по которой звонят раз в 15 минут) чтением документации на FPGA и цифровую обработку сигналов на них. Вообще меня интересует применение этого дела для SDR, т.к. обычных доморощенных SDR подключаемых к звуковой карте, мне мало - я хочу как минимум пару мегагерц полосы анализировать одновременно.
В связи с этим появилась идея затроллить админов заказчика моей опердени следующим образом: для расчета всякой хитрозамороченной бухгалтерии сделать специализированную плату с FPGA, которой на вход будут подаваться первичные данные, а на выходе получать готовые расчетные величины. И придти с ней к этим любителям виртуальных машин и нелюбителям работать, чтобы они искали куда бы эту плату подключить. Но это шутко, конечно. Еще можно на видеокартах зарплату считать, да.

А вообще мне не совсем понятно, почему для SDR используются мощнейшие ADC (типа 50-100-200 Msps), сигнал с которых подается на DDC с генераторами-комплексными умножителями-фильтрами, реализованные на FPGA. По идее, можно было бы сдвинуть частоту аналоговым умножением и не сильно сложной фильтрацией в baseband до подачи на ADC, использовать ADC подешевле(но желательно c oversampling) и дофильтровать в FPGA, а затем или подавать в комп или допилить какие-нибудь FM демодуляторы в FPGA.
Конечно, цифровая обработка сильно удобнее, но нужны какие-то очень уж запредельно мощные ADC и FPGA, которые стоят неадекватных денег, особенно готовые платы - USRP с его 700 баксов это самое дешевое, что я нашел - остальные начинаются от двух штук. Ну и разработка плат для таких рабочих частот тоже не самое простое занятие.
Хотя, возможно, аналоговые down-converters с нужной рабочей частотой и полосой пропускания разработать еще сложнее.


Расшифровка аббревиатур и прочего:
FPGA - Field Programmable Gate Array, программируемая логическая матрица - микросхема типа Xilinx Spartan или Virtex или Altera Cyclone, позволяет из мелких и не очень логических блоков создавать сложные цифровые вычислительные схемы с заданными характеристиками. Программируется пользователем, используют адовы языки программирования типа Verilog и компиляторы из них в какие-то проприетарные бинарные коды для загрузки в них.

SDR - software defined radio, программно-аппаратный комплекс, который позволяет выполнять часть обработки данных в радиоприемнике/передатчике на компе или другом программируемом цифровом устройстве, минимизируя количество аналоговых частей и позволяя реализовывать всякие заумные алгоритмы вместо того чтобы их паять в железе.

ADC - аналого-цифровой преобразователь, обычно микросхема, которая из аналогового сигнала делает цифровой. Одна из основных характеристик - частота дискретизации (сколько раз в секунду можно прочитать значение сигнала), указывается в Msps (mega-sample per second, миллион отчетов в секунду. Частота дискретизации по теореме котельникова должна быть в два раза выше, чем максимальная частота аналогового сигнала подаваемого на вход, иначе будет наложение диапазонов и плющи).

oversampling - Использование частоты оцифровки больше чем 2*макс. частота сигнала. Обычно затем полученные данные подаются на цифровой фильтр - так проще реализовать корректную фильтрацию - на входе ADC достаточно простого аналогового фильтра, а кошерную характеристику проще обеспечить для цифрового фильтра.

baseband - полоса частот исходного сигнала. Или сам исходный сигнал.

Downconverter - блок для сдвига частоты из рабочей области (например, 144 mhz, где ад и жыдырадиолюбители в baseband. Обычно реализуется методом умножения входного сигнала на сигнал с фиксированной частотой и фильтрации фильтром низких частот. Сигнал часто используется комплексный(т.е. реально это два сигнала - cos и sin) и выходов у этого блока тоже два, т.е. выходной сигнал тоже комплексный.
В частотной области это соответствует смещению частоты сигнала на -F, где F - фиксированная частота сигнала с генератора, на который мы умножаем входной сигнал.

DDC - Digital-downconverter - реализация down-converter на цифровой железяке. Можно сделать на обычном сигнальном процессоре - медленно и дороговато, можно на FPGA - быстро, дешевле, мозговырывающе, т.к. не у всех FPGA есть блоки умножения, и вообще алгоритмы там адовы.

USRP - Unified Software Radio Peripheral - дешевая (относительно) железяка для реализации SDR с открытыми (частично) исходниками.


[identity profile] nicka-startcev.livejournal.com 2010-11-10 08:02 am (UTC)(link)
ну, или, наоборот. Рисуют хитрый граф из сумматоров, умножителей, ксоров и прочих перверсивных цепей, а потом в эту цепь вливают поток данных.


Про ацп на стпицот сэмплов. А нафига оно?
Для экономии аналоговой части ЧМ-декодера? Ну, для радиоприёма хорошо. Только вот радиоприём из эфира - это как-то не очень актуально. Вот из сети -- другое дело. А в сети оно уже сразу на разумных битрейтах и аццкой производительности не надо.

Вот если сети эт хоум, или перебирать пароли - то можно и на фпга.

Но текущая экономическая обстановка подсказывает, что новомодная видимокарточка с какой-нибудь КУДА и стопицот потоков будет и дешевле и быстрее.

Для ориентира. спартан3(е) стартер кит. Примерно 200 баксов. Примерно десяток умножителей, примерно 500 мгц. Итого, выйдет около 5 гигафлопс, что раз в 10-100 медленнее видимокарты.

[identity profile] metaclass.livejournal.com 2010-11-10 08:56 am (UTC)(link)
Радиоприем на ADC+FPGA это сейчас модно.

Я про стартер кит подумываю - для SDR его не хватит, но для изучения вполне.

[identity profile] nicka-startcev.livejournal.com 2010-11-10 05:12 pm (UTC)(link)
Ну, это уже другой вопрос.
Если стартеркит "напоиграться", то имеет смысл заполозти на опенкорес.орг, глянуть, что там есть вкусного, прицениться к паре плат (от альтеры и ксилинкса, как основных игроков на этом рынке) посмотреть, что реально, а что нереально в эти платы засунуть.

Навскидку, в спартан-200 (это ксилинксовская плата, 200 тыс. эквивалентных транзисторов.) впритык влезает 1 ядро типа MIPS (занимает процентов 70, мало места остается на переферию) или 6..12 оптимизированных 8биток, или одна кривая 8битка, или примерно половина-четверть от i80386.

При этом оптимизированная 8битка пикоблейз заведется на 200мгц (6..12 оптимизированных - тоже на 200МГц каждая), а мипс32 всего на 20-40.