用SDR实时伪造GPS信号
zx-165332017/05/01无线电 IP:广东

用开源项目gps-sdr-sim就可以干这个:XXXXXXXXXXXXXXXXXX/osqzss/gps-sdr-sim

不过原版的gps-sdr-sim只能输出一个I/Q信号文件,然后再用相关的软件来把这个I/Q信号文件用SDR发射出去。。没法实时地运行。。

于是fork过来改了一下,加了个用TCP流输出I/Q信号的功能,这样就能和Gnuradio的"TCP Source"连接起来,实时运行。。

2017-04-30 23-32-14屏幕截图.png

不过这样显然不够过瘾,因为原来的gps-sdr-sim只能使用静态的坐标位置或者路径文件。。这样就没法实时改变位置了。。于是又加上了个http的接口,这样就能使用网页地图,想去哪就去哪:

2017-04-30 23-56-48屏幕截图.png

用HackRF来发射,为了限制发射范围,关闭hackrf的RF放大,再加个20dB的衰减器:

IMG_20170430_233721.jpg

使用外部TCXO时钟,要不然HackRF自带的振荡器频率不够准确,信号根本没法被接收。。

IMG_20170430_233910.jpg

用手机接收:

Screenshot_2017-04-30-23-19-32-578_com.chartcross.gpstest.png

大概一分钟多就能3D FIX了。。

去上海 Screenshot_2017-04-30-23-22-54-218_com.autonavi.minimap.png

去杭州 Screenshot_2017-04-30-23-25-00-685_com.autonavi.minimap.png

北京某某门 Screenshot_2017-04-30-23-28-23-872_com.autonavi.minimap.png

因为用的是十几天前的星历文件,所以GPS时间很显然是错的。。不过可以用-T选项来强制替换信号中的日期/时间来解决。。

Screenshot_2017-04-30-23-41-55-271_com.chartcross.gpstest.png

下载:
attachment icon gps-sdr-sim.zip 9.46MB ZIP 547次下载

或者:XXXXXXXXXXXXXXXXXX/gym487/gps-sdr-sim-realtime

使用方法:

先用Gnuradio运行XXXXXXc(其中的sdr用的是设为hackrf的osmocom sink,需要换成自己的..)

然后参照XXXXXXXXX运行gps-sdr-sim(需要开启-n选项连接Gnuradio,开启-w选项连接地图服务器

例子:

<code>./gps-sdr-sim -e tro11110.17n   -n 1234 -v -d 3600 -w
</code>

然后cd进入mapserver目录,

<code>python ./mapper.py
</code>

运行地图服务器,访问 http://127.0.0.1:8080/static/XXXXXXXXXXXml 打开地图

然后就可以到处"旅游"啦~

单击地图移动位置


注:

百度地图上取到的坐标和实际坐标有几百米的偏差。。需要注意一下。。

[修改于 7年0个月前 - 2017/05/01 02:10:15]

来自:电子信息 / 无线电
37
2
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
zx-16533 作者
7年0个月前 IP:广东
833619
引用 ry7740kptv:
话说GNU Radio开发有么有什么参考资料呢?
比如新开发一个硬件外设要和它对接,接口什么的~~~
官方wiki?
XXXXXXXXXXXXXXXXXXXXXXXXX/XXXXXXXXp/Main_Page#Developing_GNU_Radio
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
7年0个月前 修改于 7年0个月前 IP:广东
833624
引用 warmonkey:
用USRP B210回放,ublox NEO-6M NEO-8M 小米4 这些设备都无法接收
是不是没有用外部时钟源?
用了的话要注意下Gnuradio里的这个选项.. 2017-05-01 19-58-50屏幕截图.png

另外虽然没有用过USRP,但是貌似按照README的说法,USRP要用2.5MHz的采样率而不是默认的2.6MHz

HackRF and bladeRF require 2.6 MHz sample rate, while the USRP2 requires 2.5 MHz (an even integral decimator of 100 MHz).


所以要加个-s 2500000的选项并且把Gnuradio里的采样率也改过来..
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
6年11个月前 修改于 6年11个月前 IP:广东
833873

dc tone是自动bias消掉的吗 几年前那些库还不完善的时候 生成的流 看运气会有很高的dc tone,然后接收机就不认了,要手工修正

dc tone是指频谱中间那个高高耸立的DC offset么?不清楚你用的库是是怎么样的。。我这个没有这样的现象。。从顶楼的频谱图也可以看出来。。 库源代码里生成I/Q信号有关的代码主要就这些:

每次循环把载波的相位步进一段,计算下一个采样点的信号:

<code>chan[i].carr_phase += chan[i].carr_phasestep;
</code>

步进长度由卫星初始化时确定:

<code>chan[i].carr_phasestep = (int)(512 * 65536.0 * chan[i].f_carr * delt);
</code>

步进时间delt为采样率倒数:

<code>delt = 1.0/samp_freq;
</code>

载波频率的计算:

<code>// Pseudorange rate.
	rhorate = (rho1.range - chan->rho0.range)/dt;

	// Carrier and code frequency.
	chan->f_carr = -rhorate/LAMBDA_L1;
</code>

由两次步进伪距的差值除以LAMBDA_L1(光速除以GPS L1的频率)得到。(产生多普勒偏移)

生成I/Q信号。。就是把数据比特和伪随机扩频序列还有增益分别和两路相差90度的载波信号乘到一起调制,然后把全部视野内的卫星信号叠加在一起:

<code>					iTable = (chan[i].carr_phase >> 16) & 511;
					ip = chan[i].dataBit * chan[i].codeCA * cosTable512[iTable] * gain[i];
					qp = chan[i].dataBit * chan[i].codeCA * sinTable512[iTable] * gain[i];

					// Accumulate for all visible satellites
					i_acc += ip;
					q_acc += qp;
</code>

显然正常情况下大约正负10kHz的载波信号,与1.023MHz的伪随机序列相乘会产生上下两个边带共2.046MHz带宽的信号的。。不会只在直流上形成一个尖峰。 这种情况姑且胡乱推测一下,这种情况应该是bug导致生成了一个或者多个C/A码一直为0或1的卫星?

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年9个月前 IP:广东
848615
引用iamapighhh发表于13楼的内容
谢谢楼主的帖子。当年实验室里一台GPS信号模拟发生器十几万,现在软件无线电就全搞定了。对了,楼主使用...

GPS Test

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年4个月前 修改于 5年4个月前 IP:广东
852939
引用smith发表于15楼的内容
话说必须要TCXO吗,最近用AD9363的平台试着发射,没有TCXO,频率定为GPS的L1,但是奇怪...

我用HackRF+安卓手机的测试结果是不用TCXO就无法被接收,用了就可以。。GPS接收机对信号频率准确性要求比较高,真正卫星上的信号是原子钟产生的,毕竟要用来进行多普勒/载波相位之类的测量。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年1个月前 修改于 5年1个月前 IP:广东
855700
引用houjiezhuzi发表于18楼的内容
您好,请问一下,我使用您的项目文件去操作,用的硬件是Bladerf,但是在实际操作中,发现并不能欺骗...

 没有用过BladeRF,方便讲下你的具体配置么?

因为按照主贴的操作在实时模式下并不会产生任何输出文件,所以感觉可能是配置的问题。(例如用BladeRF时不要用原项目的脚本,而应该把GnuRadio中流图的sink配置为BladeRF)

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年1个月前 IP:广东
855711
引用houjiezhuzi发表于20楼的内容
  这是我的配置方案。Bandwidth 改为2.5M(参考XXXXXXXXXXript里发射设置)...

感觉可能还是配置上的问题?

从原理上来讲,只要网页地图上不动,生成的数据就和通常的静止坐标的模式没有任何区别,应该不会产生这种无法使用的现象。

建议用GnuRadio搭框图读取那个可以正常欺骗的文件,用这个配置的sink发射看看?

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年1个月前 IP:广东
856268
引用JM发表于22楼的内容
如果在HackRF信号覆盖下我移动手机,会看到手机显示的坐标移动吗?还是说手机显示的坐标一直是你设定...

如果此时手机接收到的只有伪造的信号的话移动手机不会对位置产生影响,只会导致GPS获取的时间产生微小的偏移。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年0个月前 修改于 5年0个月前 IP:广东
856321
引用JM发表于24楼的内容
经过你的提醒我想明白了,因为都是从一台HackRF板子出来,手机的移动只会改变△t的值,不会带来τ的...

理论上可行,但目的是什么?

gps位置的解算还涉及到gps各卫星的轨道参数等复杂的因素,如果这样做最后手机上显示的位置变化和实际的移动是对应不上的。

如果是做室内定位之类的话,有更可靠成熟的方案。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年0个月前 IP:广东
857015
引用helloword发表于26楼的内容
感谢你的教程,但是我遇到了一个问题,使用-w参数,从网页获取经纬度能够正常欺骗手机,但是使用自己输入...

目前版本n选项默认使用w选项,l无效。

原作者设定的默认位置是日本东京。

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
5年0个月前 修改于 5年0个月前 IP:广东
857116
引用helloword发表于28楼的内容
这样啊,那要是想导入路径文件生成连续坐标,比如-g,-u,有没有办法实实现?

更新了一下github上的代码,现在能支持了。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533作者
4年9个月前 IP:广东
861249
引用7N1ght发表于32楼的内容
我用的USRP-B210信号没有发送成功,我的USRP没有GPSDO模块,请问是不是这个原因?

可能是的。

建议加上GPSDO或者接入外部时钟基准

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
zx-16533
进士 学者
文章
125
回复
2655
学术分
4
2010/08/22注册,2年10个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:未同步
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}