МАРСОХОД

Open Source Hardware Project

FPGA & CPLD Блогchips

САПР Altera Quartus II / Quartus Prime, язык Verilog HDL, ПЛИС Cyclone III, Cyclone IV, MAX II, MAX10.
Платы разработчика серии Марсоход, Марсоход2, Марсоход3.


Расчет коэффициентов компенсационного FIR фильтра в GNU Octave.

cic fir filters

Во многих примерах проектов SDR радиоприемников для ПЛИС, которые я рассматривал, используется связка из двух фильтров. Идут последовательно CIC фильтр и потом FIR фильтр. Свой SDR приемник, мы сделали так же используя два фильтра последовательно.

CIC фильтр — это интегрально гребенчатый фильтр (cascaded integral-comb filter).

FIR фильтр – фильтр с конечной импульсной характеристикой (finite impulse response filter).

Говорят, что CIC фильтр хорош в реализации, для него требуется не много вычислительных ресурсов и он хорош для использования в задачах передискретизации. Проще говоря, CIC фильтры используются для снижения частоты дискретизации в десятки и сотни раз. Однако, у CIC фильтра есть недостаток — пологая АЧХ. А хотелось бы, чтобы перед ресамплером стоял фильтр с более прямоугольной Амплитудно Частотной Характеристикой.

Поэтому после CIC фильтра ставят второй фильтр, который должен как-то компенсировать пологость АЧХ CIC фильтра. Как его рассчитать?

Структура библиотеки Winrad DLL для SDR радио

vs logo

Программа радиоприемника HDSDR может взаимодействовать с аппаратными SDR приемниками разных производителей. Чтобы добавить поддержку нашей платы Марсоход2 как SDR приемника придется написать интерфейсную DLL со специальным набором экспортируемых функций. Этот набор функций — Winrad API.

На самом деле, Winrad API довольно хорошо описано http://www.winrad.org/bin/Winrad_Extio.pdf , там в PDF даже есть фрагмент кода.

Имеющийся код мне придется адаптировать под прием и передачу через последовательный порт и под протокол передачи, который мы сами себе придумали (5-ти байтные пакеты).

Вкратце расскажу, что же такое эта Winrad DLL. Winrad DLL - это динамически загружаемая библиотека, которая предоставляет программе HDSDR интерфейс для работы с аппаратным приемником. Библиотека Winrad DLL обязана предоставить некоторый минимальный набор функций.

Протокол передачи для SDR радио

5 byte serial port protocol for SDR radio

В продолжение предыдущей статьи об SDR радиоприемнике на основе платы Марсоход2.

Принцип SDR радио — как можно больше обработки производить в программном обеспечении. По этому собственно оно так и называется Software Defined Radio. Устройство приема делает какую-то начальную обработку и передает сырые данные в компьютер, где специальная программа знает, что с ними делать, как декодировать и как воспроизводить.

В нашем SDR радио прием и первичная обработка происходят в плате Марсоход2. Однако потом все накопленные данные нужно передать программе SDR радио. Я использую программу HDSDR из http://www.hdsdr.de/index.html

Чтобы программа HDSDR могла взаимодействовать с нашей платой нужно написать специальную DLL, которая будет экспортировать функции согласно спецификации Winrad API, http://www.winrad.org/bin/Winrad_Extio.pdf. Чтобы понять какие данные нужно передавать, как передавать, как часто передавать — придется изучить эту спецификацию Winrad да и вообще нужно основательно погрузиться в тему цифрового радио.

В своей работе я значительно опирался на статью на хабре "Простой SDR приёмник на ПЛИС".

Из изученного стало понятно, что:

  • данные пересылаемые по направлению от HDSDR к плате редки и малы — это всего лишь целое число, определяющее частоту тюнера. Может быть 32-х битным числом.
  • данные от платы к компьютеру, к программе HDSDR – это поток, например, 50000 выборок в секунду. Каждая выборка — это пара чисел, так называемые I / Q каналы. Числа могут быть целые знаковые 16-ти битные, 24-х битные, 32-х битные или даже 32-х битные числа с плавающей точкой.

Есть несколько способов передавать данные из платы Марсоход2 в компьютер:

  • поставить Ethernet шилд и передавать данные по сети, хоть UDP пакетами
  • передавать через последовательный порт, на плате стоит USB-FTDI чип и у него скорость последовательного порта до 12 Мбит/сек. Вероятно этого хватит?
  • можно еще передавать через тот же USB-FTDI в режиме MPSSE, тогда скорость передачи будет еще больше.

Из всех способов передачи самый простой — это последовательный порт. Давайте попробуем посчитать, хватит ли его пропускной способности.

SDR радио приемник.

7-го мая мы будем отмечать день Радио. К этому празднику мы подготовили проект — SDR радио приемник из платы Марсоход2. Теперь наше радио работает!

На видео демонстрации выше видно, что к ноутбуку кабелем USB подключена плата Марсоход2. К плате Марсоход2 подключен просто кусок провода примерно 5 метров, он вывешен на удочке на улицу в окно нашей лаборатории. На ноутбуке запущена программа HDSDR с помощью которой можно перестраивать приемник и слушать радио трансляции. Мы не делали никаких предварительных активных усилителей или фильтров (да, мы знаем, что это не очень правильно), но вот так — просто прием на кусок провода, подключенный к АЦП платы. Несколько станций в принципе ловятся: некоторые на английском языке, некоторые неизвестных нам языках, может китайский или вьетнамский. Довольно сильный сигнал от http://russian.cri.cn/ – международное радио Китая, на русском языке — как раз на видео ролике вверху мы его и ловим.

Вот еще одна видео демонстрация:

Может быть эта демонстрация даже чем-то еще интересней. Здесь одна плата Марсоход2 выступает в роли АМ передатчика и транслирует музыку в эфир на антенну — кусок провода свернутый в колечко. У нас был проект АМ радио передатчика — вот его и используем (правда немного модифицированный проект, здесь несущая частота 7МГц). Ну а вторая плата Марсоход2 выступает в роли SDR радиоприемника. Одной платой передаем радиосигнал, а второй ловим и слушаем. Ну да, дистанция не большая — всего-то метр, но все равно интересно.

Игра Жизнь 64x32

Игра "жизнь". Классика жанра.

Для платы Марсоход2 мы ее уже делали, но там была проблемка - маленькое игровое поле.
Поскольку в плате Марсоход3 с ПЛИС MAX10 у нас есть 50 тысяч логических элементов, то теперь здесь можно значительно расширить игровое поле. Теперь в этом проекте доступно 64x32 клетки. Проект для платы Марсоход3 фактически повторяет проект платы Марсоход2, но есть и отличия - вместо VGA монитора теперь подключается HDMI монитор.

Весь проект можно взять на гитхабе: https://github.com/marsohod4you/FPGA_game_life

 


GitHub YouTube Twitter
Вы здесь: Начало