GSM的工作频段
GSM900:890~915MHz(MS发、BS收,即为上行链路)
935~960MHz(BS发、MS收,即为下行链路)
双工间隔为45MHz,工作带宽为25 MHz,载频间隔为200 kHz。 调制方式是GMSK。
GSM1800:1710~1785(MS发、BS收,即为上行链路)
1805~1880(BS发、MS收,即为下行链路)
双工间隔为95MHz,工作带宽为75 MHz,载频间隔为200 kHz。
上行链路和下行链路中不同频率的同时使用使得通信有发射TX和接收RX两个方向。
无线载波频率总是成对(上行和下行)的安排,两者之间的差别称为双工频率
逻辑信道到物理信道的映射
假设:每个小区有若干个载频,每个载频都有8个时隙,定义载频数为C0、C1、…、Cn,时隙数为T0、T1、…、T7。
TDMA是指在GSM900的每个载频上按时间分为8个时间段,每一个时间段成为一个时隙(Time Slot),这样的时隙叫做物理信道。
一个载频上连续的8个时隙组成一个TDMA帧,即一个载频上可提供8个物理信道。
每个信道占用的带宽为200kHz/8=25kHz
GSM900的总载波(频道)数为25MHz/200kHz=125,125-1=124
GSM1800的总载波(频道)数为75MHz/200kHz=375,375-1=374
在GSM系统中,逻辑信道可分为专用信道(DCH)和通用信道(CCH)两大类,有时也可分为业务信道和控制信道两大类。
业务信道(TCH)载有编码的话音或用户数据,它有全速率业务信道(TCH/F)和半速率业务信道(TCH/H)之分,两者分别载有总速率为22.8和 11.4kbit/s的信息。使用全速率信道所用时隙的一半,就可得到半速率信道。因此一个载频可提供8个全速率或16个半速率业务信道。
频率校正信道(FCCH),携带有MS和BTS进行频率校正的信息。
控制信道(CCH)用于传送信令或同步数据。它主要有三种:广播信道(BCCH)、公共控制信道(CCCH)和专用控制信道(DCCH)。
1、频率校正信道(FCCH)
载有供移动台频率校正用的信息,通过FCCH,MS就可以定位一个小区并解调出同一小区的其它信息。通过FCCH,MS也可以知道该载频是不是BCCH载频。
2、 同步信道(SCH)
在FCCH解码后,MS接着要解出SCH信道消息,该消息含移动台帧同步和基站识别的信息:基站识别码(BSIC),它占有6个比特其中3个比特为0~7范围的PLMN色码,另3个比特为0~7 范围的基站色码(BCC)。
简化的TDMA帧号(RFN),它占有22个比特。
3、广播控制信道(BCCH)
通常,在每个基站收发信台中总有一个收发信机含有这个信道,以向移动台广播系统消息,这些系统消息使得MS可以在空闲模式下有效工作。
4、 寻呼信道(PCH)
这是一个下行信道,用于寻呼被叫的移动台,当网络想与某一MS建立通信时,它会根据MS当前所登记的LAC向该LAC区域内所有小区通过PCH信道发寻呼消息,标示为TMSI或IMSI。
5、准予接入信道(AGCH)
这是一个下行信道,用于基站对移动台的入网请求作出应答,即分配一个SDCCH或直接分配一个TCH。
6、 随机接入信道(RACH)
上行信道,用于移动台随机提出入网申请,请求分配一个SDCCH,请求包括3bit的建立原因(呼叫请求、寻呼响应、位置更新请求以及短消息请求等)和5bit的参考随机数供MS区别属于自己的接入允许消息。
7、独立专用控制信道(SDCCH)
是双向专用信道,传送建立连接的信令消息、位置更新消息、短消息、鉴权消息、加密命令、信道分配消息、以及各种附加业务等。可分为独立专用控制信道(SD/8)与CCCH相组合的专用控制信道(SD/4)。
8、 慢速随路控制信道(SACCH)
与业务信道或SDCCH联用,在传送用户信息期间带传某些特定信息,上行链路主要传递无线测量报告,下行链路主要传递部分系统消息。这些消息包括通信质量、LAI、CELL ID、邻区BCCH信号强度、NCC限制、小区选项、TA、功率控制级别等。
9、快速随路控制信道(FACCH)
与TCH联用,用于在传输过程中给系统提供比慢速随路控制信道(SACCH)速度和及时性高得多的信令信息。通过从业务信道借取帧来实现接续,传送如“越区切换”等指令信息。由于话音译码器会重复最后20ms的话音,所以这种偷帧中断不会被用户察觉。除了上述三类控制信道外,还有一种小区广播控制信道(CBCH),它用于下行线,载有短消息业务小区广播(SMSCB)信息,使用像SDCCH相同的物理信道。
GSM的信道类型:
一、业务信道(TCH):承载话音或用户数据,全速率业务信道(TCH/F)载有总速率为22.8kbit/s的信息。
TCH信道上提供以下信道:1、全速率话音业务信道(TCH/F9.6);2、9.6kbit/s全速率数据业务信道(TCH/F9.6);3、 4.8kbit/s全速率数据业务信道(TCH/F4.8);4,小于等于2.4kbit/s全速率数据业务信道(TCH/F2.4)。
二、控制信道:主要携信令或同步数据。
1、广播信道(BCH)用于向MS广播各类信息。可分为
a、FCCH:频率校正信道,用于MS频率校正;
b、SCH:同步信道:用于MS的帧同步和BS的识别;
c、BCCH广播控制信道:用于发送小区信息;
2、公共控制信道(CCCH):主要携带接入管理功能所需的信令信息,也可用来携带其它信令,CCCH由网络中各MS共同使用,有三种类型:
a、PCH:寻呼信道,用于BTS寻呼MS;
b、RACH:随机接入信道,用于MS随机接入网络上行信道;
c、AGGH准予接入信道,用于给成功接入的接续分配专用控制信道。
3、专用控制信道:是点对点的双向控制信道。根据通信控制过程的需要,将DCCH分配给MS使之BTS进行点对点信令传输,可分为:
a、SDCCH/8:独立专用控制信道;
b、SACCH/C8:与SDCCH/8随路的慢速随路控制信道;
c、SACCH/TF:与TCH/F随路的慢速随路控制信道;
d、FACCH/F:全速率快速随路控制信道;
e、SDCCH/4:与SDCCH/CCCH结合使用的独立专用控制信道;
f、SACCH/C4:与SDCCH/4随路的慢速随路控制信道。
三、信道组合:根据通信的需要,实际使用时总是将不同类型的逻辑作道映射到同一物理信道上,称为信道组合。允许的信道类型有:
a、TCH/F+FACCH/F+SACCH/TF;
b、FCCH+SCH+BCCH+CCCH;
c、FCCH+SCH+BCCH+CCCH+SDCCH/4+SACCH/C4;
d、BCCH+CCCH
根据GSM规范要求,并在实际应用中,总是将不同类型的逻辑信道映射到同一物理信道上,称为信道组合,一般常用的10种无线信道组合如下:
1)FCCH+SCH+BCCH+CCCH
2)FCCH+SCH+BCCH+CCCH+SDCCH/4(0..3)+SACCH/C4(0..3)
3)BCCH+CCCH
4)SDCCH/8(0..7)+SACCH/C8(0..7)
5)PBCCH+PCCCH+PDTCH/F+PACCH/F+PTCCH/F
6)PCCCH+PDTCH/F+PACCH/F+PTCCH/F
7)TCH/F+FACCH/F+SACCH/TF
8)TCH/H+FACCH/H+SACCH/TH+TCH/H
9)TCH/H+FACCH/H+SACCH/TH+PDTCH/H+PACCH/H
10)PDTCH/F+PACCH/F+PTCCH/F
HackRF,是一款覆盖频率最宽,而且价格最低廉的SDR板卡。它几乎所有的信息都是开源的,甚至包括KiCad文件。缺点是它没有FPGA,使用的低速的USB2接口,ADC/DAC的精度比较低。总的来说,HackRF非常适合那些对开放性要求很高的黑客,和那些那些对价格敏感的用户。
bladeRF,它的亮点在于大容量的FPGA和高速的USB3接口。它能够支持比较宽的频段,但是不如另外两者。它的ADC/DAC精度也还不错。我建议那些想脱机运行程序,并且射频频点不需要太高的人们,考虑选择这款硬件。
USRP B100,这是一款比较老的板卡了,不能支持高带宽的应用。它通过替换子板来改变射频频段,最高可以支持到6GHz。它支持UHD接口。B100的价格跟B200是一样的,但能力却比B200差很多。所以我建议,只有当你有一些很特殊的应用,或者你要使用自己开发的子板时,才考虑B100。
USRP B210/B200,可以支持很宽的频段,也支持高速的接口带宽。它们有大容量的FPGA和快速的USB3接口。不过AD9361这款芯片的开放性略差。B210/B200是三款硬件中价格最贵的。但它们的很多指标已经与Ettus的另一款高端的N210板卡可以媲美。而且,B210还是唯一一款直接支持2×2 MIMO的板卡。我相信B210/B200将是最近市场上,性能最强的SDR平台,而且将得到Ettus公司的大力支持。我建议那些需要高带宽、宽频段,而且不需要脱机使用的应用,考虑这款硬件平台。
对应Ubuntu 14.04
$ sudo apt-get install python-pippython-dev build-essential
$ sudo pip install --upgrade pip
pipy国内镜像目前有:
http://pypi.douban.com/ 豆瓣
http://pypi.hustunique.com/ 华中理工大学
http://pypi.sdutlinux.org/ 山东理工大学
http://pypi.mirrors.ustc.edu.cn/ 中国科学技术大学
如果想手动指定源,可以在pip后面跟-i 来指定源,比如用豆瓣的源来安装web.py框架:
pip install web.py -ihttp://pypi.douban.com/simple
注意后面要有/simple目录!!!
可以配制成默认:
linux下,修改~/.pip/pip.conf,如果没这文件则创建。
内容为:
[global]
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple
$ [sudo] pip install PyBOMBS
sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-makodoxygen python-docutils cmake build-essential
$ pybombs install uhd
找不到uhd,不知为何
没有添加仓库,参考一下链接
https://github.com/EttusResearch/ettus-pybombs
http://files.ettus.com/manual/page_build_guide.html#build_dependencies
会在SDR文件夹下产生uhd文件夹
cd SDR
git clone git://github.com/EttusResearch/uhd.git
需要FPGA源码的话用下面这个(FPFGA源码在UHD使用中不需要)
git clone --recursivegit://github.com/EttusResearch/uhd.git
Generate Makefiles with CMake
cd
mkdir build
cd build
cmake ../
Additionally, configuration variables canbe passed into CMake via the command line. The following common-useconfiguration variables are listed below:
Example usage:
cmake -DCMAKE_INSTALL_PREFIX=/opt/uhd ../
Build and install
make
make test
sudo make install
Setup the library path (Linux)
Make sure that libuhd.so is inyour LD_LIBRARY_PATH, or add it to /etc/ld.so.conf and make sureto run:
sudo ldconfig
LD_LIBRARY_PATH: 动态库的查找路径
设置:
方法一: export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是登出后就失效
方法二: 修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile
1. 在其中添加例如exportPATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH
2. source .bashrc (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)
方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找,
1. /etc/ld.so.conf下面加一行/usr/local/MySQL/lib
2. 保存过后ldconfig一下(ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)
uhd_images_downloader
uhd_find_devices
确保成功
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
cd rtl-sdr/
autoreconf -i
./configure
make
sudo make install
sudo ldconfig
/etc/ld.so.conf中添加build/src,链接librtlsdr.so文件
sudo ldconfig
典型错误
usb_claim_interface error -6, Failed toopen rtlsdr device #0.
You should either blacklistthe dvb_usb_rtl28xxu kernel module, or solve it quickly (will have torepeat it on every reboot):
sudo rmmod dvb_usb_rtl28xxu
解决办法:禁止UBUNTU自动启动rtl-sdr内核模块
方法一
在/etc/modprobe.d/blacklist.conf中添加blacklistdvb_usb_rtl28xxu
方法二
creating "rtlsdr.conf" in"/etc/modprobe.d" and put
blacklist dvb_usb_rtl28xxu
重启之后这个kernel model就不再自动运行了
https://wiki.gnuradio.org/index.php/Download
$ git clone --recursivehttp://git.gnuradio.org/git/gnuradio.git
https://www.cnblogs.com/bitspace/p/6032279.html
https://github.com/gnuradio/pybombs#quickstart
https://github.com/gnuradio/gnuradio
更新源:
pybombs recipes add gr-recipesgit+https://github.com/gnuradio/gr-recipes.git
pybombs recipes add gr-etceteragit+https://github.com/gnuradio/gr-etcetera.git
使用官方默认参数安装:
pybombs prefix init ~/prefix -a myprefix -Rgnuradio-default
此时,所有依赖会安装到 ~/prefix 目录下
报错了
直接删掉 ~/prefix 目录,
给git添加代理:
git config --global http.proxy'socks5://127.0.0.1:1080'
git config --global https.proxy'socks5://127.0.0.1:1080'
重新安装:
pybombs prefix init ~/prefix -a myprefix -Rgnuradio-default
取消git代理
git config --global --unset http.proxy
git config --global --unset https.proxy
在gnuradio的etc目录下
~/SDR/gnuradio/etc/gnuradio/conf.d/grc.conf
local_blocks_path = /usr/local/share/gnuradio/grc/blocks
/home/xujie/SDR/gnuradio/lib
添加到
/etc/ld.so.conf
再更新
sudo ldconfig
Run GNU Radio Companion from your newprefix:
$source ~/SDR/gnuradio/setup_env.sh
$gnuradio-companion
or execute it without changing the currentenvironment:
$pybombs run gnuradio-companion
No module name OpenGL
sudo pip install pyopengl
http://osmocom.org/projects/sdr/wiki/rtl-sdr#Buildingthesoftware
Building with cmake (as described inthe gr-osmosdrwiki page):
git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr/
mkdir build
cd build/
cmake ../
Now cmake should print out a summary ofenabled/disabled components. You may disable certain components by followingguidelines shown by cmake. Make sure the device of your interest is listedhere. Check your dependencies and retry otherwise.
Now build & install
make
sudo make install
sudo ldconfig
https://github.com/ptrkrysik/gr-gsm/wiki/Installation
sudo pybombs install gr-gsm
安装加速库
sudo apt install libvolk1-bin
cmake的时候出现 qt5的错误
sudo apt-get install qt5-default
接着安装了libqt5svg5和 libqt5svg5-dev
For command line builds:
$ git clone https://github.com/csete/gqrx.git
$ cd gqrx
$ mkdir build
$ cd build
$ cmake ..
$ make
On some systems, the default cmake releasebuilds are "over optimized" and perform poorly. In that case tryforcing -O2 using
export CXXFLAGS=-O2
before the cmake step.
二进制运行文件在
At this point, you should find the gqrxexecutable in ~/src/gqrx directory. Start upvia ./gqrx and you’ll get the screen below (or set your values toequal this):
安装
添加路径和快捷方式
sudo make install
下载uhd FPGA镜像
uhd_images_downloader
使用UHD需要sudo权限
sudo gqrx –r
使用-r 参数启动,不会载入预配置参数
sudo apt install wireshark
https://github.com/zimmerle/kalibrate-uhd
chmod a+x bootstrap
./bootstrap
./configure
make
sudo make install
版本都和UHD不兼容
https://github.com/ttsou/kalibrate
GitHub https://github.com/steve-m/kalibrate-rtl
News http://www.rtl-sdr.com/how-to-calibrate-rtl-sdr-using-kalibrate-rtl-on-linux/
扫描GSM基站,给出频偏,计算本地晶振频偏
https://github.com/steve-m/kalibrate-rtl/wiki/How-to-install
git clone https://github.com/steve-m/kalibrate-rtl
cdkalibrate-rtl
./bootstrap&& CXXFLAGS='-W -Wall -O3'
./configure
make
sudomake install
http://www.stuhack.com/safe/net/012812319.html
搜索附近的GSM基站信息:
可以用-g设置增益
kal -s GSM900 -g 40
chan后面的数字是基站编号,power值越小,功率越大。
继续使用kalibrate帮助我们校准电视棒的偏频,使用 -c 参数加我们基站的频道号(channel)来计算出这个误差值:
理论上,你用频率值减去偏频值得到的数字
在频率附件移动一下,频偏不是很准确
对于逻辑信道的解码,由于我的目的是解出不加密的SMS信息,而点对点短信业务,在移动终端(MT)空闲期间利用GSM网的无线独立专用信道(SDCCH)收/发短信,在通话期间利用慢速伴随信道(SACCH)收/发,故在移动终端空闲或通话期间都可收/发短信。
因此,这里解码SDCCH/8信道。
成功接收到8个碎片包组成了一条完整的SMS