引用 ry7740kptv:官方wiki?
话说GNU Radio开发有么有什么参考资料呢?
比如新开发一个硬件外设要和它对接,接口什么的~~~
XXXXXXXXXXXXXXXXXXXXXXXXX/XXXXXXXXp/Main_Page#Developing_GNU_Radio
用开源项目gps-sdr-sim就可以干这个:XXXXXXXXXXXXXXXXXX/osqzss/gps-sdr-sim
不过原版的gps-sdr-sim只能输出一个I/Q信号文件,然后再用相关的软件来把这个I/Q信号文件用SDR发射出去。。没法实时地运行。。
于是fork过来改了一下,加了个用TCP流输出I/Q信号的功能,这样就能和Gnuradio的"TCP Source"连接起来,实时运行。。
不过这样显然不够过瘾,因为原来的gps-sdr-sim只能使用静态的坐标位置或者路径文件。。这样就没法实时改变位置了。。于是又加上了个http的接口,这样就能使用网页地图,想去哪就去哪:
用HackRF来发射,为了限制发射范围,关闭hackrf的RF放大,再加个20dB的衰减器:
使用外部TCXO时钟,要不然HackRF自带的振荡器频率不够准确,信号根本没法被接收。。
用手机接收:
大概一分钟多就能3D FIX了。。
去上海
去杭州
北京某某门
因为用的是十几天前的星历文件,所以GPS时间很显然是错的。。不过可以用-T选项来强制替换信号中的日期/时间来解决。。
下载:
或者: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年8个月前 - 2017/05/01 02:10:15]
引用 ry7740kptv:官方wiki?
话说GNU Radio开发有么有什么参考资料呢?
比如新开发一个硬件外设要和它对接,接口什么的~~~
引用 warmonkey:是不是没有用外部时钟源?
用USRP B210回放,ublox NEO-6M NEO-8M 小米4 这些设备都无法接收
HackRF and bladeRF require 2.6 MHz sample rate, while the USRP2 requires 2.5 MHz (an even integral decimator of 100 MHz).
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的卫星?
引用iamapighhh发表于13楼的内容谢谢楼主的帖子。当年实验室里一台GPS信号模拟发生器十几万,现在软件无线电就全搞定了。对了,楼主使用...
GPS Test
话说必须要TCXO吗,最近用AD9363的平台试着发射,没有TCXO,频率定为GPS的L1,但是奇怪...
我用HackRF+安卓手机的测试结果是不用TCXO就无法被接收,用了就可以。。GPS接收机对信号频率准确性要求比较高,真正卫星上的信号是原子钟产生的,毕竟要用来进行多普勒/载波相位之类的测量。
引用houjiezhuzi发表于18楼的内容您好,请问一下,我使用您的项目文件去操作,用的硬件是Bladerf,但是在实际操作中,发现并不能欺骗...
没有用过BladeRF,方便讲下你的具体配置么?
因为按照主贴的操作在实时模式下并不会产生任何输出文件,所以感觉可能是配置的问题。(例如用BladeRF时不要用原项目的脚本,而应该把GnuRadio中流图的sink配置为BladeRF)
引用houjiezhuzi发表于20楼的内容这是我的配置方案。Bandwidth 改为2.5M(参考XXXXXXXXXXript里发射设置)...
感觉可能还是配置上的问题?
从原理上来讲,只要网页地图上不动,生成的数据就和通常的静止坐标的模式没有任何区别,应该不会产生这种无法使用的现象。
建议用GnuRadio搭框图读取那个可以正常欺骗的文件,用这个配置的sink发射看看?
如果在HackRF信号覆盖下我移动手机,会看到手机显示的坐标移动吗?还是说手机显示的坐标一直是你设定...
如果此时手机接收到的只有伪造的信号的话移动手机不会对位置产生影响,只会导致GPS获取的时间产生微小的偏移。
经过你的提醒我想明白了,因为都是从一台HackRF板子出来,手机的移动只会改变△t的值,不会带来τ的...
理论上可行,但目的是什么?
gps位置的解算还涉及到gps各卫星的轨道参数等复杂的因素,如果这样做最后手机上显示的位置变化和实际的移动是对应不上的。
如果是做室内定位之类的话,有更可靠成熟的方案。
感谢你的教程,但是我遇到了一个问题,使用-w参数,从网页获取经纬度能够正常欺骗手机,但是使用自己输入...
目前版本n选项默认使用w选项,l无效。
原作者设定的默认位置是日本东京。
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。