Самодельный DDC

Форум предназначен для обсуждения всех видов цифровой обработки сигнала в радио.

Модератор: UN7TGT

Самодельный DDC

Сообщение UN7TGT » Ср янв 16, 2013 6:53 pm

Хочу поделиться концепцией и историей создания еще одного SDR приемника.

Давно уже нацеливался на полностью цифровой прием. Но постоянно чего-то не хватало. То терпения, то времени. И вот. Всё совпало с нужной лунной фазой.

Принцип: ФНЧ, быстрый АЦП, внутри FPGA находится NCO и множитель на 2 квадратурных канала. Затем CIC фильтры. И по USB это добро течет в комп. Где радостный пользователь смотрит и слушает эфир.

Действительность:

- ФНЧ: отсутсвует.
- АЦП: техасовский ADS5482 на 16бит и 80МГц.
- FPGA: Xilinx Spartan3 500E
- USB: Cypress usb2
- Комп: персональный.

История: Эксперименты начались с АЦП. Подавал на нее частоту 50Мгц. На выход припаял Spartan3 100E. Запрограммировал на Verilog DDS с синусом и косинусом на выходах. Подал на аппаратный множитель. Простым самопальным CIC фильтром уменьшил частоту сэмплов до нескольких сотен килогерц. Сделал на 8 резисторах ЦАП для нищих. И оно зашумело. Не пойми чего, но это создание шипело, и даже если подавать на его вход сигнал от ГСС, начинало давать интерференционный свист на близких частотах. Значит, теоретически оно могло и поймать сигнал с эфира. Просмотр картинки на осциллографе убил во мне экспериментатора. Кусочки синуса были изорваны огромными взрывным выбросами. Это, конечно, было поражение.

Подумав пару дней об причинах взрывов, и перебрав кучу вариантов взрывов шума в разных фильтрах - пришел к выводу, что эти взрывы имеют не фильтровую природу. Благо на FPGA можно было смоделировать вывод VGA. Быстренько сляпав на верилоге простенький осциллограф на мониторе, я увидел, что эти взрывы сигнала шли от АЦП в виде неверных случайных битов в верхних разрядах сэмпла. Пара дней ушла на создание схемы захвата данных от АЦП. Со смещениями во времени для правильного и достоверного приема LVDS сигналов. С захватом было покончено (кажется) и на экране бежала отличная синусоида. И даже резисторный ЦАП для нищих заверещал комфортней.

Следующим шагом я решил завести звук в комп . О, как я был наивен, до того момента. Конечно, аналоговый звук от SDR меня не устраивал (еще по прошлым опытам с УКВ SDR). Даешь цифрУ и все тут. Первое что пришло в голову - конечно же SPDIF. Денек ушел на осваивание этой технологии 90тых в верилоге. В принципе, звук шел. Но только в Линуксе. В нем, можно было перенаправить звук из цифрового входа компа на наушники и радоваться. Но.. пару раз в секунду происходил тихий щелчек и портил всю картину. Особенно это было заметно когда перед блоком SPDIF я ставил генератор синуса на килогерц. Оно щелкало несмотря ни на что. В Виндовсе все обстояло гораздо хуже. Звуковая карта, работающая в Линуксе в Винде давала просто мусор. Только открыв окно свойств звука и периодически нажимая кнопку "разблокировать звук" на секунд 5 появлялся мой синус. Даже введение специального бита - в информационный поток SPDIF - разрешить копирование. Не спасало ситуацию. Тогда я задался вопросом. А зачем собственно я это делаю - ради того, чтобы увидеть и услышать спектр в программе HPSDR. В рот ей ноги, решил я. Вместе с виндовсом целиком. И вернулся домой - в Линукс.

Теперь я имел щелкающего звука в цифровом входе и отсутствие адекватных реальности программ для СДРа в Линуксе. Поиски программ привели меня к каким то полупрогам на полуси- полупитоне типа PSKSDR (кажется). На которых даже что то показывалось - в виде огромного горба -20 дБ шума и малюсенкой палочкой от ГСС.

Я понял что оказался в тупике, который сам и создал. Первое положение, которое сводило на нет всё: это использование SPDIF. Во первых это односторонний интерфейс, во вторых он щелкает! В третьих он не передает ничего помимо звука. Я решил твердой рукой отмести эти полупобеды и заняться этим делом серьезно.

Во первых выкинуть из проекта Спартан 3 - 100Е. Камень был слаб. Очень слаб для этого. Почти 90% в нем занимали просто DDS и фильтры. И это был только пробный дизайн. В качестве базы был выбран Spartan3-500E. Который обладал куда большими (почти в 5 раз) ресурсами. Обладал USB программатором и шиной обмена с компом! Это же сразу определило и способ передачи звука в комп. В пень SPDIF. USB наше всё. Это был шаг назад. Для прыжка.

Фильтры влезли в дизайн легко. Смеситель и DDS работали исправно. Ресурса хватало на многое. Но первое что пришлось сделать : USB шина. По примеру из дизайна авторов моей fpga платы (Digilent) я написал простенький модуль, который принимал 16 бит и 2 канала сигнал (любой частоты) и отдавал их в комп (пачками по 512 байт). Простенькая программка из SDK Adept стала выплевывать мои сэмплы на экран. Сработало! Теперь, их надо было куда то и чем то обрабатывать. Обычные программы (работающие со звуком) не годятся. А писать ядерный модуль - эмулятор ALSA устройства было лениво. Да и 48-96-192 килогерца это так.. баловство. Не вижу смысла прогонять через ядро данные, чтобы запихать их в недо-программу. И тут на глаза попался проект GHPSDR3. Который сразу пленил меня простотой протокола и симпатичностью своей программы приемника. Суть в том, что эта программа принимает данные в виде простых UDP сетевых пакетов. Никаких звуковых карт и прочего гемороя. Дело за малым - написать свою прослойку между GHPSDR и моей железякой. Откатав на java принципы формирования пакета, взяв за основу код прослоек, написанных автором GHPDSR3 (N6LYT). Осилил таки за пару вечеров этот момент. GHPDSR3 заработал! НО все оказалось не таким радужным. И я понял, что снова оказался на старте.

Звук шел. Нормальных 48 кГц. Но уровень шума.. -30 примерно дБ. Мощнейший сигнал ГСС показывался мелкой иголкой. Начались разборки с дизайном в fpga. Да, это были позорные последствия спешки. Я упустил важный момент. Сигнал от АЦП (16 бит) идет без-знаковый. Сигнал от DDS (18 бит) знаковый. Смеситель получает 18 и 18 бит и выдает 36. Опять таки знаковый. Приведя к знаковой форме все этапы в дизайне и одно преобразование в программе - прослойке, я получил, наконец то, что то вроде -60 дБ уровень шума в программе. И в тот вечер подключил впервые антенну к АЦП (через трансформатор-развязку конечно). Да, радости не было предела . На 80 метров кто то бурчал в SSB. Были слышны несколько морзянок. Но до победы было еще как до Луны. Что то явно было не так. И мешало всему. Простое но принципиальное нечто.

Я решил пойти другим путем. Выкинуть DDS и смеситель. Да. И заменить его CORDIC алгоритмом. Он гораздо более громоздкий, и занял сразу процентов 30 кристалла. НО После этого мой SDR запел совсем иначе! Шум минус 80 дБ. Речь отлично разбирается. Десятки морзянок на диапазонах. А КВ радио.. ммм.. слушал несколько часов.

Вот теперь можно было бы успокоиться и сказать себе - да. Прямая оцифровка - работает. И наслаждаться результатами. Поставить наконец селектор, предусилитель и заняться исследованием эфира. Но.. во время сильного сигнала - диапазон проседает и давит соседний сигналы. Не хватало динамики. Я и решился действовать дальше. Во первых - 16 бит. После фильтра выходит 24 бита, я беру старших 16 и отдаю в комп. Там эти 16 бит приводятся к float у которого тоже 24 бита. Где смысл в этих 16 ти? Жалкое наследие первичного дизайна. И шаблон, что АЦП дает 16 бит. Нет! после фильтра мы размениваем уменьшение частоты на разрядность в битах благодаря интеграторам в нем! Переписал дизайн USB на отдачу 32 разрядных IQ пакетов в комп. Из них 24 бита - действительные. Переписал прослойку и..

Вот тут настала победа. Перестал проседать диапазон от наличия рядом мощных сигналов. Просто пропало как явление. Ну идет +60-70 дБ сигнал рядом. И ничего. Уровень собственного шума упал до -110 дБ. Поигравшись с размерами аккумуляторов в фильтре остановился на 66-68 битах. При больших значениях шум уходит в математчиеский зиро и я выхожу из разрядной сетки в 24 бита. Поэтому остановился на 69 (иногда шью 66). Приемлемо. текущий кровень собственного шума где то -140 дБ. Лучше делать не стоит, т.к это нечестный уровень. Повышением разрядности аккумулятора я просто спускаю вниз весь сигнал. ДД от этого не сильно повышается. Полагаю ДД сейчас порядка 110 дБ. Т.к. 16 бит (96дБ) явно не хватало, а переход на 24бита (144дБ) решил проблему с проседанием сигналов. Картина сигнала от 110 дБ и ниже существенно не изменяется.

После этого домаешнего триумфа - стал писать программу для работы с этим СДР. Для себя, без оглядок на другие программы. Под свои интересы. Сейчас реализовал: 2048 точечный спектр и водопад. Фильтр любой конфигурации и ширины. Прослушивание LSB USB, AM декодер. Впереди в планах: цифровые моды.


PSPS В статье под SDR следует понимать именно DDC схему

UN7TGT 15.03.2012
UN7TGT
 
Сообщения: 17
Зарегистрирован: Пн ноя 07, 2011 9:56 am

Сообщение un7cad » Ср янв 16, 2013 11:24 pm

Максим, приветствую ещё раз.
Предлагаю (чтобы не раздувать форум большими постами) размещать подобную техническую информацию в соответствующем разделе сайта КВ-комитета, а на форуме развернуть обсуждение.
Наш коллега UN8CB как раз там статью разместил уже.
http://kw.kfrr.kz/index.php?option=com_ ... &Itemid=71
Аватара пользователя
un7cad
 
Сообщения: 558
Зарегистрирован: Пт фев 22, 2008 9:27 am
Откуда: Петропавловск

Re: Самодельный DDC

Сообщение UN9GW » Вс янв 20, 2013 1:17 pm

Станислав, привет!
Всё, что ты написал, наверное правильно, но думаю, что данную информацию нужно зреть в корень.
Максим рассказал о принципе, который в недалёком будущем вытеснит классические айкомы и езу напрочь.
Принцип, который по универсальности своей превосходит уже сейчас всё, что есть в любительской аппаратуре.
Статью, я думаю, Максим напишет позже, а пока что есть, то есть. Есть самое главное - результат.
73!
*******************************
73! Igor UN9GW (since 1978)
"...Улыбайтесь, господа...
Серьёзное выражение лица
ещё не признак ума... (Г. Горин)
Аватара пользователя
UN9GW
 
Сообщения: 569
Зарегистрирован: Пт дек 07, 2007 9:01 pm
Откуда: Alma-Ata

Re: Самодельный DDC

Сообщение UN9LCW » Ср май 15, 2013 8:22 am

Размещаю готовую конструкцию. Наконец собрал в кучу свой SDR трансивер в корпусе от блока старинного радиотелефона Томагава запихнул.и плату с радиатором, и звуковуху с USB хабом. Так что подрубаю к ноуту одним USB шнурком как фирменный Флекс!

Изображение
MO13IP
Аватара пользователя
UN9LCW
 
Сообщения: 312
Зарегистрирован: Вс июн 14, 2009 1:02 am
Откуда: Федоровка


Вернуться в Цифровые методы обработки сигнала в радио

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron