引用 ry7740kptv:官方wiki?
话说GNU Radio开发有么有什么参考资料呢?
比如新开发一个硬件外设要和它对接,接口什么的~~~
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
用开源项目gps-sdr-sim就可以干这个:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
不过原版的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选项来强制替换信号中的日期/时间来解决。。
下载:
或者:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
使用方法:
先用Gnuradio运行tcp.grc(其中的sdr用的是设为hackrf的osmocom sink,需要换成自己的..)
然后参照XXXXXXXXX运行gps-sdr-sim(需要开启-n选项连接Gnuradio,开启-w选项连接地图服务器
例子:
./gps-sdr-sim -e tro11110.17n -n 1234 -v -d 3600 -w
然后cd进入mapserver目录,
python ./mapper.py
运行地图服务器,访问 http://127.0.0.1:8080/static/baidumap.html 打开地图
然后就可以到处"旅游"啦~
单击地图移动位置
注:
百度地图上取到的坐标和实际坐标有几百米的偏差。。需要注意一下。。
引用 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信号有关的代码主要就这些:
每次循环把载波的相位步进一段,计算下一个采样点的信号:
chan[i].carr_phase += chan[i].carr_phasestep;
步进长度由卫星初始化时确定:
chan[i].carr_phasestep = (int)(512 * 65536.0 * chan[i].f_carr * delt);
步进时间delt为采样率倒数:
delt = 1.0/samp_freq;
载波频率的计算:
// Pseudorange rate.
rhorate = (rho1.range - chan->rho0.range)/dt;
// Carrier and code frequency.
chan->f_carr = -rhorate/LAMBDA_L1;
由两次步进伪距的差值除以LAMBDA_L1(光速除以GPS L1的频率)得到。(产生多普勒偏移)
生成I/Q信号。。就是把数据比特和伪随机扩频序列还有增益分别和两路相差90度的载波信号乘到一起调制,然后把全部视野内的卫星信号叠加在一起:
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;
显然正常情况下大约正负10kHz的载波信号,与1.023MHz的伪随机序列相乘会产生上下两个边带共2.046MHz带宽的信号的。。不会只在直流上形成一个尖峰。 这种情况姑且胡乱推测一下,这种情况应该是bug导致生成了一个或者多个C/A码一直为0或1的卫星?
引用iamapighhh发表于13楼的内容谢谢楼主的帖子。当年实验室里一台GPS信号模拟发生器十几万,现在软件无线电就全搞定了。对了,楼主使用的安卓手机上定位的软件叫啥?
GPS Test
引用houjiezhuzi发表于18楼的内容您好,请问一下,我使用您的项目文件去操作,用的硬件是Bladerf,但是在实际操作中,发现并不能欺骗,如果用原始文件生成制定坐标的文件可以欺骗(排除硬件问题),但是利用您提供的项目文件产生实时文件的时...
没有用过BladeRF,方便讲下你的具体配置么?
因为按照主贴的操作在实时模式下并不会产生任何输出文件,所以感觉可能是配置的问题。(例如用BladeRF时不要用原项目的脚本,而应该把GnuRadio中流图的sink配置为BladeRF)
引用houjiezhuzi发表于20楼的内容[图片] [图片] 这是我的配置方案。Bandwidth 改为2.5M(参考bladerf.script里发射设置)Device number没有写,gnuradio会自动识别板子进行发射。其余命令没...
感觉可能还是配置上的问题?
从原理上来讲,只要网页地图上不动,生成的数据就和通常的静止坐标的模式没有任何区别,应该不会产生这种无法使用的现象。
建议用GnuRadio搭框图读取那个可以正常欺骗的文件,用这个配置的sink发射看看?