МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход2

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

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

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

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

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

SDR – это Software Defined Radio. Сделать цифровой радиоприемник из платы Марсоход2 мы хотели давно. Однако, тема не простая и поэтому все никак не решались взяться за это дело. Тут несколько проблем:

  • для радиоприемника важна антенна, как ее делать? Нужен ли предварительный усилитель? Как его рассчитать и сделать? Как вы уже поняли в конце концов ничего специального делать не стали.. ленивые..
  • проект состоит из двух частей — это проект в ПЛИС и библиотека DLL для связи платы с программой HDSDR, то есть нужны 2 компонента, а это в 2 раза больше работы;
  • на плате Марсоход2 есть АЦП 20МГц, 8 бит — не очень высокая частота и не очень много бит на одну выборку — не было уверенности, что будет работать;
  • на плате Марсоход2 в ПЛИС не так чтобы много умножителей. У нас стоит FPGA EP3C10E144C8 – здесь всего 46 девятибитных умножителей, а для проекта SDR нужно их много, ведь там цифровые фильтры и все такое..

За основу нашего проекта взят другой проект, описанный на хабрахабре: "Простой SDR приёмник на ПЛИС" https://habrahabr.ru/post/204310/

По сути дела мы постарались портировать этот проект на нашу плату, но, конечно, проект сильно отличается: у нас другая разрядность АЦП, у нас используется последовательный порт вместо ethernet, другая разрядность на фильтрах, более короткий FIR фильтр из-за лимита умножителей в ПЛИС, другая Winrad DLL, 32-х битные выборки на канале вместо 16-ти битных...

Структура нашего SDR приемника вот такая:


sdr radio in Marsohod2 FPGA board structure

В проекте есть NCO, управляемый генератор гармонических колебаний и его можно перестраивать в некотором диапазоне частот, скажем до 8МГц. Выходы NCO – это две шины данных с синусоидальными отсчетами и косинусоидальными отсчетами. Эти шины идут на два умножителя. Сюда же на умножители приходит оцифрованный сигнал с АЦП.

Поскольку данные с АЦП 8-ми разрядные, и с NCO я беру только 8 бит, то в результате умножения получается 16-ти битное знаковое число. Операция умножения производит перенос спектра радио сигнала. Нас интересуют те спектральные составляющие, которые попали в область нижних частот.

Передать этот поток в ПК для анализа довольно трудно, ведь здесь поток у нас 20 миллионов выборок в секунду. Нужно произвести передискретизацию на более низкую частоту, но перед этой операцией нужен фильтр нижних частот. Используется так называемый CIC фильтр, который позволяет понижать частоту дискретизации в десятки или сотни раз. В среде ALtera Quartus II есть megafunction Wizard, который позволяет создавать и конфигурировать CIC фильтр для проектов ПЛИС:

CIC filter decimation 1/200

В нашем проекте производится снижение частоты в 200 раз, то есть после CIC фильтра частота отсчетов может быть уже 100кГц.

После CIC фильтра идет FIR фильтр, который должен компенсировать пологое спадание АЧХ CIC фильтра. Я надеюсь еще написать про это подробнее в отдельной статье - тут дело сложное, нужно рассчитать коэффициенты фильтра. FIR фильтр так же создается в среде Quartus II в визарде:

fir filter altera quartus II wizard

На выходе FIR фильтра уже получатся многоразрядные числа. В нашем проекте megafunction wizard говорит, что выходных бит 37(!) и предлагает выбрать нужные: либо отбросить старшие либо отбросить и округлить младшие.. Вот смотрите, что дает визард:

fir filter quatus ii wizard

Не простая задача на самом деле. Мы выбрали отбросить старшие 5 бит и будем передавать в ПК только 32 младших бита. От этого выбора зависит качество воспроизведения и громкость. Если отбрасывать младшие биты, то получится тихо. Если отбросить много старших, то будет сильно искажаться сигнал, будет "булькотеть".

Еще важное замечание. Поскольку используются мегафункции Altera Quartus II для CIC, FIR фильтров, то квартус в данном случае будет генерировать прошивку для ПЛИС с ограничением по времени. Это они так защищают свои IP-core. Для реального коммерческого проекта понадобится платная версия Quartus II, а не Web Edition. В принципе, фильтры можно и самому написать. У меня уже был пример реализации FIR фильтра - можно его попробовать.

Весь проект для ПЛИС выполнен в среде Altera Quartus II v13.1:

qii top

Модуль самого верхнего уровня в графическом представлении. Можно кликнуть по изображению, чтобы увеличить его. В принципе все модули здесь повторяют структурную схему, показанную выше.

Хочу обратить ваше внимание на модуль beeper. Этот модуль создан исключительно для отладки. Когда у нас еще не было никакой антенны и мы вообще не знали получится ли у нас радиоприемник, мы использовали этот наш бипер, как источник радио сигнала. Этот модуль выдает произведение двух синусоид, то есть как бы амплитудно модулированный сигнал. На бипер идут две кнопочки — одна меняет частоту тона, другая длительность гудка бипера. Получается звук ну как у первого советского спутника. Если не использовать вход АЦП и подать на умножители шину данных с beeper, то вы сможете услышать этот самый звук в SDR радио.

Теперь о программе на компьютере.

hdsdr

Выглядит программа вот так, как на рисунке выше. Мы используем программу HDSDR – ее можно скачать на сайте автора http://www.hdsdr.de/.

Чтобы программа поддерживала платы сторонних производителей нужно написать дополнительную DLL, которая используя специальное API служит мостиком между платой и программой HDSDR. DLL мы написали в MS Visual Studio 2012.

Все исходники: для Visual Studio и для Altera Quartus II можно взять на github: https://github.com/marsohod4you/FPGA_SDR

Дополнительно по теме SDR радио приемника:

  1. Протокол передачи данных SDR радио для Марсоход2.
  2. Структура Winrad DLL и отладка DLL в Microsoft Visual Studio.
  3. Расчет коэффициентов FIR фильтра в GNU Octave.

Пробуйте наш проект на ваших платах и слушайте радио!

 

Комментарии  

0 #12 labuda 09.11.2016 05:09
Если есть возможность ставьте ADC1175-50 и путаницы со станциями не будет.
0 #11 Nenad 05.08.2016 22:18
Is it posible to translate this project to MAX 10 FPGA, I do not have Cyclone III ? Of corse add external A/D not internal MAX10 !

73 de YT1BN
+1 #10 Alod 07.06.2016 18:25
Будучи в прошлом "аналоговым" радиолюбителем, с интересом читал исходный материал на хабре, но только после того, как проект был тщательно "разжеван" вами, сумел собрать свой клон на стареньком стенде DiLab+PB-CII (EP2C8) Спасибо за толковое изложение материала и популяризацию тематики ПЛИС!
0 #9 Leka 08.05.2016 22:05
Если менять частоту дискретизации, можно узнать, в какой зоне Найквиста находится реальный сигнал. Например, для 20Мвыб/сек и алиасе 4,665МГц при переходе на 21Мвыб/сек:
20-15,335=4,665 --> 21-15,335=5,665
24,665-20=4,665 --> 24,665-21=3,665
40-35,335=4,665 --> 42-35,335=6,665
44,665-40=4,665 --> 44,665-42=2,665
и тд. и тп.
0 #8 nckm 08.05.2016 19:22
Цитирую Leka:
На сайте радио Китая есть список частот вещания, 4,665МГц нет, но есть 15,335МГц, все совпадает: 20МГц-15,335МГц=4,665МГц.

хм.. интересная мысль.. очень может быть вы и правы.
0 #7 Leka 07.05.2016 18:21
На сайте радио Китая есть список частот вещания, 4,665МГц нет, но есть 15,335МГц, все совпадает: 20МГц-15,335МГц =4,665МГц.
0 #6 Leka 07.05.2016 18:18
Цитирую nckm:
Поднять частоту приемника выше 10МГц не получится.

Полоса АЦП 120МГц по pdf, так что можно даже ~144МГц попробовать оцифровать, поставив на вход фильтр. Это будет 15-я зона Найквиста, и д/б виден, как алиас частотой 4МГц. Или 27МГц попробовать, алиас будет 7МГц. Первая попавшаяся ссылка, где есть немного про зоны Найквиста:
http://www.lr.ttu.ee/irm/sideseadmete_mudeldamine/2.pdf
0 #5 nckm 07.05.2016 17:25
Цитирую Leka:
Цитирую nckm:
думаю интересно получилось

Интересно, конечно.
А для связи между Марсоходами можно попробовать поднять частоту заметно выше 20МГц (радио Китая на ролике - 15,335МГц), и с заменой рамочной антенны на штыревую (рамочная не излучает).

хм.. вообще-то радио Китая мы поймали на частоте 4,66МГц, а не 15.
Поднять частоту приемника выше 10МГц не получится. На АЦП у нас 20МГц, значит оцифровать сигнал даже теоретически можно только до 10-ти МГц.
0 #4 Сергей8686 06.05.2016 10:58
Крутой проект
Извини, что не по теме, не мог бы ты мне помочь?)
http://marsohod.org/forum/proekty-polzovatelej/4101-korrelyator-na-plate-marsokhod-2-nuzhna-pomoshch
0 #3 Leka 06.05.2016 10:38
Цитирую nckm:
думаю интересно получилось

Интересно, конечно.
А для связи между Марсоходами можно попробовать поднять частоту заметно выше 20МГц (радио Китая на ролике - 15,335МГц), и с заменой рамочной антенны на штыревую (рамочная не излучает).
0 #2 nckm 05.05.2016 11:25
Цитирую _alex:
Круто!
Это ПЛИС проект. Здесь не нужны ни антенна ни усилители.
Нужны полосовые фильтры на ПЛИС, чтобы вырезать ненужные частоты.
Прекрасный проект к дню Радио.

Ну не совсем так: и антенна нужна и усилитель бы нужен, и фильтр хорошо бы поставить перед АЦП.. Но как демонстрация - думаю интересно получилось.
0 #1 _alex 04.05.2016 14:22
Круто!
Это ПЛИС проект. Здесь не нужны ни антенна ни усилители.
Нужны полосовые фильтры на ПЛИС, чтобы вырезать ненужные частоты.
Прекрасный проект к дню Радио.

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Проекты Проект Марсоход2 SDR радио приемник.