С.А. Милованов

Локальная сеть GSM на основе OpenBTS

 

Часть 3. Настройка платформы для реализации

программ радио (GNU Radio)

 

 

Используемое в качестве приемопередатчика в проектируемой сети USRP1, как и большинство устройств, входящих в SDR-радиосистемы, работает в совокупности с программной средой GNU Radio.

  

GNU Radio является свободным инструментом разработки программного обеспечения с открытым исходным кодом, который реализует блоки обработки сигналов для создания программ радио. Он может использоваться с легко доступным недорогим внешним радиочастотным оборудованием для создания SRD-систем, или без оборудования в среде симуляции. Он широко используется радиолюбителями, в научной и коммерческой среде для поддержки исследований беспроводных коммуникаций и современных радиосистем [1].

 

Перед началом установки GNU Radio, как первого приложения в рамках реализации программного обеспечения проектируемой сети, необходимо создать каталог проекта, в котором будут проводиться все необходимые инсталляции. Проект проектируемой сети расположен по адресу «/home/melsp/projects/openbts/» .

 

Процесс установки и настройки GNU Radio состоит из нескольких этапов:

1.           установка вспомогательных программных элементов;

2.           модернизация кода GNU Radio под частоту 52 МГц;

3.           установка пакета GNU Radio;

4.           тестирование пакета на связь с USRP.

 

1.            Установка вспомогательных программных элементов

 

Вначале необходимо установить все требуемые библиотеки. Это выполняется с помощью команд:

 

sudo apt-get -y install libfontconfig1-dev libxrender-dev libpulse-dev swig \

g++ automake libtool python-dev libfftw3-dev \

libcppunit-dev libboost-all-dev libusb-dev fort77 sdcc sdcc-libraries \

libsdl1.2-dev python-wxgtk2.8 subversion git-core guile-1.8-dev \

libqt4-dev python-numpy ccache python-opengl libgsl0-dev \

python-cheetah python-lxml doxygen qt4-dev-tools \

libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools \

libpcre3 libpcre3-dbg libpcre3-dev libpcrecpp0 \

python-wxgtk2.8 python-wxtools wx2.8-i18n libwxgtk2.8-dev libgtk2.0-dev \

autoconf libtool libosip2-dev libortp-dev qt4-qmake \

libusb-1.0-0-dev g++ sqlite3 libsqlite3-dev erlang \

asterisk asterisk-mysql libortp8 libortp-dev libosip2-4 libosip2-dev

 

Необходимо установить SWIG (англ. Simplified Wrapper and Interface Generator) —свободный инструмент для связывания программ и библиотек, написанных на С/С++ со скриптовыми языками, такими как Tcl, Perl, Python, Ruby [2]. Скачать архив с кодом можно по ссылке: «http://sourceforge.net/projects/swig/files/swig/». Затем необходимо выполнить команды:

 

cd /home/melsp/projects/openbts/

tar zxvf swig-2.0.9.tar.gz

cd /home/melsp/projects/openbts/swig-2.0.9/

./configure

make

make install

 

Необходимо установить Qwt (Qt Widgets for Technical Applications) — набор Qt-виджетов и вспомогательных классов, необходимых для создания графического представления числовых данных [3]. Скачать архив с кодом можно по ссылке: «http://sourceforge.net/projects/qwt/files/».

 

Затем необходимо выполнить команды:

 

cd /home/melsp/projects/openbts/

tar jxvf qwt-6.1-rc3.tar.bz2

cd /home/melsp/projects/openbts/qwt-6.1-rc3/

qmake

make

make install

 

Необходимо установить Boost — набор библиотек, расширяющих функциональность C++ [4]. Скачать архив с кодом можно по ссылке: «http://sourceforge.net/projects/boost/files/boost/ 1.49.0/boost_1_49_0.zip/download».

Затем необходимо выполнить команды:

 

cd /home/melsp/projects/openbts/

unzip boost_1_49_0.zip

chmod -Rf 777 /usr/local/src/boost_1_49_

mkdir /opt/boost_1_49_0

BOOST_PREFIX=/opt/boost_1_49_0

cd /usr/local/src/boost_1_49_0 

./bootstrap.sh

sudo ./b2 --prefix=$BOOST_PREFIX --with-thread --with-date_time \

--with-program_options --with-filesystem --with-system \

--layout=versioned threading=multi variant=release install

 

Необходимо установить GIT - распределённую систему управления версиями файлов. Для этого необходимо выполнить команды:

 

apt-get install git-core git-doc gitk stgit git-arch git-cvs git-svn git-email gitweb


 

2.            Модернизация кода GNU Radio под частоту 52 МГц

 

По умолчанию тактовая частота тактового генератора USRP равна 64МГц. Тактовые генераторы GSM-систем имеют тактовую частоту, кратную 13 МГц, что связанно со скоростью передачи битов в физическом канале GSM (270,833кбит/с). Изменение частоты тактового генератора USRP до 52 МГц позволит сэкономить ресурсы процессора на передискретизацию, а так же уменьшит риск того, что мобильные станции будут не в состоянии обнаружить нашу сеть [5, 6].

 

Кроме модернизации в аппаратной части USRP, необходимо изменить программный код GNU Radio, ориентировав его на использование тактовой частоты 52 МГц.

 

Скачать архив с исходным кодом GNU Radio можно по ссылке: http://gnuradio.org/redmine/attachments/download/279/gnuradio-3.4.2.tar.gz.

 

Затем необходимо выполнить команды:

 

cd /home/melsp/projects/openbts/

tar zxvf gnuradio-3.4.2.tar.gz

cd /home/melsp/projects/openbts/gnuradio-3.4.2/

 

Необходимо изменить 110-ю строку файла «/home/melsp/projects/openbts/gnuradio-3.4.2/usrp/host/lib/usrp_basic.cc»:

 

//  d_verbose (false), d_fpga_master_clock_freq(64000000), d_db(2)

    d_verbose (false), d_fpga_master_clock_freq(52000000), d_db(2)

 

Необходимо изменить 151-ю строку файла «/home/melsp/projects/openbts/gnuradio-3.4.2/usrp/host/lib/db_bitshark_rx.cc»:

 

// set_clock_scheme(0,64000000);

set_clock_scheme(0,52000000);

 

3.            Установка пакета GNU Radio

 

Необходимо выполнить команды:

 

cd /home/melsp/projects/openbts/gnuradio-3.4.2/

./bootstrap

./configure --disable-usrp2 --enable-usrp

make clean

make all

make check

make install

sudo ldconfig


 

4.            Тестирование пакета на связь с USRP

 

Для тестирования связи USRP с операционной системой и программой GNU Radio в частности, необходимо выполнить команды:

 

cd projects/openbts/gnuradio-3.4.2/gnuradio-examples/python/usrp

./usrp_benchmark_usb.py

 

Если установка GNU Radio прошла успешно и система корректно определила USRP как устройство, в качестве результата появится следующее сообщение:

 

Testing 2MB/sec... usb_throughput = 2M

ntotal    = 1000000

nright    = 999038

runlength = 999038

delta     = 962

OK

 

Testing 4MB/sec... usb_throughput = 4M

ntotal    = 2000000

nright    = 1999558

runlength = 1999558

delta     = 442

OK

 

Testing 8MB/sec... usb_throughput = 8M

ntotal    = 4000000

nright    = 3998349

runlength = 3998349

delta     = 1651

OK

 

Testing 16MB/sec... usb_throughput = 16M

ntotal    = 8000000

nright    = 7992803

runlength = 7992803

delta     = 7197

OK

 

Testing 32MB/sec... usb_throughput = 32M

ntotal    = 16000000

nright    = 15991283

runlength = 15991283

delta     = 8717

OK

 

Max USB/USRP throughput = 32MB/sec

 


 

Использованная литература:

 

1. Сайт проекта GNU Radio [Электронный ресурс]. URL: http://gnuradio.org/redmine/projects/gnuradio/wiki/WhatIsGR (дата обращения: 15.04.2013);

2. Сайт проекта «Wikipedia» [Электронный ресурс]. URL: http://ru.wikipedia.org/wiki/SWIG (дата обращения: 15.04.2013);

3. Сайт проекта «Wikipedia» [Электронный ресурс]. URL: http://ru.wikipedia.org/wiki/Qwt (дата обращения: 15.04.2013);

4. Сайт проекта «Wikipedia» [Электронный ресурс]. URL: http://ru.wikipedia.org/wiki/Boost (дата обращения: 15.04.2013);

5. Сайт проекта GNU Radio [Электронный ресурс]. URL: http://gnuradio.org/redmine/projects/gnuradio/wiki/OpenBTSClockModifications (дата обращения: 17.04.2013);

6. Axelle Apvrille, OpenBTS for dummies, January 15, 2013