Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 1 из 6 1234 ... ПоследняяПоследняя
Показано с 1 по 10 из 56

Тема: Еще один SDR приемник

  1. #1

    Регистрация
    15.03.2012
    Адрес
    казахстан, тараз
    Сообщений
    42
    Позывной
    un7tgt

    Еще один SDR приемник

    Хочу поделиться концепцией и историей создания еще одного 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 декодер. Впереди в планах: цифровые моды.

    PS К чему я все это написал. Смелее действуйте. Всё отлично работает и - практика критерий Истины. Еще месяц назад я бы не поверил, что валявшаяся АЦПшка, запушщенная на полскорости, поможет мне услышать людей за тысячи километров без селектора, усилителя, и колебательного контура.


  2. #2
    Респект и уважуха!!!
    2048 точек не мало? Флексы 8192 делают. Видел 32тыс. Смотрицца кудааа интереснее!!!
    Тут один хлопчик рассказывал что от реальных 16бит используется только 12, а остальное - то маркетинг. Что скажете про это? Надеюсь этот хлопчик тут то же засветится.

  3. #3

    Регистрация
    15.03.2012
    Адрес
    казахстан, тараз
    Сообщений
    42
    Позывной
    un7tgt
    В полноэкранном режиме, а это 1920 ширина, само оно. Больше точек - пока не помышлял.

    В разработке вторая версия - в 8 раз серьезней.Там да, намерен задействовать OpenCL для рассчета FFT и отображения гигантских спектров. А на этом.. 48 кГц я не слышу разницы.

    Добавлено через 24 минут(ы):

    Про 12 из 16 точек - думаю это полуправда. С полгода назад я задействовал АЦП PulSAR 16 битную 550 кГц от AD. И был неприятно удивлен тем, что значащих там, да, 12 бит! Остальные просто 1111. Расстроился и выбросил в ящик эту ацапку как ерундовую.

    В случае же техассовой ADS5482 могу сказать что видел все разряды. И синусоида рисуется на всем ДД диапазоне (но конечно на младших битах она выглядит зашумленно (видимо из-за наводок)). Но Эти биты есть. Однозначно.
    Последний раз редактировалось makkosik; 15.03.2012 в 12:17.

  4. #4
    Цитата Сообщение от makkosik Посмотреть сообщение
    Суть в том, что эта программа принимает данные в виде простых UDP сетевых пакетов. Никаких звуковых карт и прочего гемороя.
    Долой UDP — эту ненужную прослойку, пережиток прошлого, занимающий ресурсы. Завести свой Ethertype (или использовать уже выделенный 0x8896) и пихать данные непосредственно в Ethernet.

    А вообще, конечно, неплохо!

  5. #5

    Регистрация
    15.03.2012
    Адрес
    казахстан, тараз
    Сообщений
    42
    Позывной
    un7tgt
    Согласен полностью. Это в данный момент на стадии разработки. Намереваюсь прикупить модуль http://shop.trenz-electronic.de/cata...oducts_id=1006 с человеческим гигабитным Ethernet Marvel 8111 на борту и кидать Ethernet пакеты непосредственно программе потребителю. По завершению - доложусь.
    Последний раз редактировалось makkosik; 15.03.2012 в 12:45. Причина: уточнение

  6. #6
    А я решил попытаться выпросить у техасоф отладки на хай-спид АЦП. Трудность в том, что надо две платы: с АЦП и с матрицей. Да и готовый проект вряд ли дадут. Но, хоть будет от чего отталкиваться.
    Стас FIX

  7. #7
    Модератор
    Регистрация
    23.10.2005
    Адрес
    Ялта
    Сообщений
    13,604
    Цитата Сообщение от makkosik Посмотреть сообщение
    Хочу поделиться концепцией и историей создания еще одного SDR приемника.
    Поздравляю!
    Цитата Сообщение от makkosik Посмотреть сообщение
    Смеситель и DDS работали исправно.
    Можно предположить, что Вы сначала в ПЛИСе реализовали "классическое рещение" - DDC
    как в QS1R
    http://www.srl-llc.com/
    http://www.srl-llc.com/images/qs1r_ddc.png
    Вы пошли "другим путём"
    Цитата Сообщение от makkosik Посмотреть сообщение
    Я решил пойти другим путем. Выкинуть DDS и смеситель. Да. И заменить его CORDIC алгоритмом. Он гораздо более громоздкий, и занял сразу процентов 30 кристалла. НО После этого мой SDR запел совсем иначе! Шум минус 80 дБ. Речь отлично разбирается. Десятки морзянок на диапазонах. А КВ радио.. ммм.. слушал несколько часов.
    Не являюсь специалистом в ЦОС. Поэтому можно ли сказать так:
    Вы реализовали в ПЛИС "программный эквивалент" приёмника прямого усиления с входным перестраиваемым фильтром.
    Последний раз редактировалось sgk; 16.03.2012 в 12:03.
    Сергей sgk.

  8. #8

    Регистрация
    15.03.2012
    Адрес
    казахстан, тараз
    Сообщений
    42
    Позывной
    un7tgt
    Цитата Сообщение от RA4FIX Посмотреть сообщение
    А я ... отладки на хай-спид АЦП. Трудность в том, что надо две платы: с АЦП и с матрицей. Да и готовый проект вряд ли дадут. Но, хоть будет от чего отталкиваться.
    Что за плата с матрицей (как то недопонял)?
    Плату для АЦП развел и вытравил сам. Единственное, что не учел. Она зверски греется. 2 Ватта выдает на радиатор. И это оказалось нормальным.

    А отталкиваться - запросто. всё чем смогу, подтолкну.

    Добавлено через 15 минут(ы):

    Действительно, похож! Думаю, никакого плагиата или изобретательства, ни в моей поделке, ни в других (качественных) SDR нету.

    Везде практически одинаковая реализация DDC (прямое преобразование частоты вниз). Различие в деталях. Например:
    - у меня нету Derandomizer как явления. Нету DC коррекции (хотя ноль у АЦП чуть чуть не на середине).
    - CIC фильтра всего 2 на канал. Первый с децимацией в 250 раз и 5 стадий. Второй в 4 раза и 11 стадий. Эту конфигурацию я подсмотрел в Меркурии.
    - FIFO и мультиплексора у меня нету. Есть двупортовая память для хранения семплов.
    - Нету также I2S блока и multibus decoder. Вместо него целый отдельный процессор (picoblaze, но и то больше на будущее.. индикаторами шевелить да кнопки опрашивать).

    Все подобные блоки похожи будут как две капли.

    И, я бы сказал что это упрощенная классическая DDC - программный эквивалент приемника прямого преобразования наверное.. я в ЦОС.. не шибко разбираюсь
    Единственное что я поменял - убрал из совсем уж классической схемы гетеродин и смеситель. Заменив их обоих CORDICом.

    Впрочем.. В этой диаграмме, и моей и qs1r не хватает важного, последнего звена. Компенсационного FIR фильтра. Без него сигнал имеет форму холма. Такой продолговатый склон. Но пока мне это не мешает. И его можно реализовать в софтверной части.

    Добавлено через 16 минут(ы):

    А вот один из скриншотов того самого холма, который получается без FIR фильтра.

    Нажмите на изображение для увеличения. 

Название:	Снимок-8.png 
Просмотров:	1396 
Размер:	293.5 Кб 
ID:	107053
    Последний раз редактировалось makkosik; 16.03.2012 в 20:21.

  9. #9
    Тоже сейчас работаю над этой темой, правда приемник попроще, и концепт другой, с полной обработкой внутри плис. Приемник без связи с компьютером. Панорама на TFT дисплейчик. Ядро Spartan-6. АЦП 12 битовое, более дорогое пока не осилил , мб в будущем....


  10. #10

    Регистрация
    15.03.2012
    Адрес
    казахстан, тараз
    Сообщений
    42
    Позывной
    un7tgt
    Spartan-6 для этой темы самое оно! Если чип не из мелких (4,9,16) то будет даже избыточным. Поделитесь названием модуля? Шибко интересно

Страница 1 из 6 1234 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. И ЕЩЕ ОДИН ГЛЮК В ТС50
    от ua9lfj в разделе TS-50
    Ответов: 1
    Последнее сообщение: 14.07.2011, 09:33
  2. Две антенны - один приемник
    от RU6ME в разделе Согласующие устройства
    Ответов: 6
    Последнее сообщение: 09.02.2011, 12:47
  3. Ответов: 0
    Последнее сообщение: 08.06.2009, 13:09
  4. Еще один DX-cluster
    от UY0LL в разделе Программное обеспечение
    Ответов: 0
    Последнее сообщение: 27.02.2007, 11:48
  5. Ответов: 9
    Последнее сообщение: 25.05.2006, 11:26

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •