Для запуска своей системы глобального позиционирования раньше нам потребовалась бы орбитальная группировка спутников, наземные станции и т.д. Теперь
всё проще.
Нам необходимо:
1. Компьютер с операционной системой типа Виндуз или Линукс и, желательно, с портом USB 3.0. На порту 2.0 я не тестировал, но должно заработать.
2. Плата USRP b210 (возможны и другие варианты).
3. Сгенерированный файл с сигналом, либо программа для его генерации GPS-SDR-SIM от проф. Эбинумы.
Блог профессора (немного не по-русски)
Исходники симулятора
Порядок установки
Для запуска всего этого добра на компьютер надо неторопясь и аккуратно установить от производителя платы набор софта. Хотя, может, это и не обязательно. Но пусть будет. При установке под виндуз оно иногда жалуется, что не может добавить себя в PATH, но это не мешает, так как из всего этого добра мне понадобилась только утилитка uhd_find_devices.exe, которая позволила понять, увидела ли вообще система эту плату. Найти утилиту можно по адресу:
C:/UHD/bin/uhd_find_devices.exe
Затем втыкаем плату и открываем диспетчер устройств. Где можно обнаружить, что драйверов под устройство автоматом не установилось. Что же – бывает. Вручную с помощью программки zadig указываем системе, что под плату надо использовать драйвера libusb, т.е. winusb.
После того, как система подцепила стандартный драйвер, можно запустить uhd_find_devices из набора софта от производителя платы. Эта утилита должна найти плату и прошить её контроллер (там стоит FX3 от Cypress). Кажется, после этого устройство изменит свой PID и надо будет рассказывать системе (с помощью zadig), что и под это устройство можно использовать стандартные драйвера winusb.
Конечно же оно с первого раза не заработает. И конечно же это можно вылечить путем отсоединения платы и подсоединения обратно. Вот подробная инструкция.
Необходимо установить гнурадио, которое внутри себя содержит пайтон-питон. Я взял отсюда последнюю версию под AVX2 процессоры.
Мне было лень настраивать правильным образом окружение, поэтому я воспользовался скриптом, входящим в комплект: C:/GNURadio-3.7/bin/run_gr.bat
Через него я буду запускать скрипт для посылки сгенерированного файла в плату b210.
Для удобства путь до этого скрипта надо добавить в переменную окружения PATH.
Генерация сигнала
Исходники берем тут. Что приятно удивило, так это легкость и простота сборки. Никаких зависимостей, никаких дополнительных действий. Все бы так.
Сборка под линукс
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
Сборка под виндуз
1 Start Visual Studio. Запустить студию (я использовал 2015)
2 Create an empty project for a console application. Создать пустой консольный проект. Именно пустой!
3 On the Solution Explorer at right, add "gpssim.c" and "getopt.c" to the Souce Files folder. Добавить два сишных файла в проект.
4 Select "Release" in Solution Configurations drop-down list. Изменить тип сборки на релизный, выбрать архитектуру x86 / amd64.
5 Build the solution. Собственно, собрать.
Я под линукс не собирал, т.к. была необходимость запустить всё на конкретной машине, а на ней стояла десятка.
Подробное описание параметров генератора есть в ридми. Для начала можно не разбираться, а сделать очень просто, сгенерировать сигнал таким образом:
gps-sdr-sim.exe -e brdc3540.14n -s 2500000 -l 30.286502,120.032669,100 -b 8 -d 300 -v -o sim.bin
gps-sdr-sim.exe — это файл, который вы собрали студией.
brdc3540.14n — это файл с эфемеридами спутников.
2500000 — это частота дискретизации
30.286502,120.032669 — координаты
100 — высота
8 — это разрядность чисел в выходном файле (один отсчет — это IQ, два числа).
300 — это длительность в секундах.
-v — это чтобы побольше писало в лог
sim.bin — имя выходного файла.
Вы можете взять строчку из ридми, но она сгенерирует сигнал с ЧД=2,6 МГц, тогда и b210 надо будет настраивать на ту же ЧД (частота дискретизации). Если сгенерировать с одной частотой, а на плату выдавать с другой, то, конечно же, ничего не заработает.
Сигнал на плату я подавал с помощью такой команды:
run_gr.bat gps-sdr-sim-uhd.py -t sim.bin -s 2500000 -x 40
40 — это уровень. 2500000 — это ЧД. Подробное описание настроек можно увидеть в файле gps-sdr-sim-uhd.py, он очень прост для понимания.
Для b210 значение ЧД должно нацело делить частоту внутреннего генератора, а он там, кажется 40 МГц.
Запуск
А теперь самое интересное.
Отключаем плату.
Подключаем плату.
Запускаем uhd_find_devices
Если не определилось, то goto 1.
Запускаем transmit.bat, следим за логом.
В определенный момент на плате загорится второй диод, что будет означать, что всё уже начало излучаться.
Если в логах постоянно выводится буква U, значит, ваша система не успевает подсовывать данные в плату. Вам стоит проверить, не работает ли что-то на фоне и не указали ли вы очень высокую ЧД.
Через некоторое время (до 3 минут) все устройства начнут определять местоположение как заданное вами. Но перед этим они внезапно потеряют текущее положение.
Внимательно прочитав инструкцию к программе проф. Эбинумы можно понять, как сгенерировать файл с изменяющимся местоположением, как использовать другие даты и прочее.
З.Ы. Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту. Данный прием можно использовать как для развлечения так и во вред. К примеру координаты шавермы подменить на свои и всё, все девушки ваши.