欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

gps-sdr-sim c语言程序,用SDR实时伪造GPS信号

发布时间:2024/1/18 编程问答 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 gps-sdr-sim c语言程序,用SDR实时伪造GPS信号 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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-&gt;rho0.range)/dt;

// Carrier and code frequency.

chan-&gt;f_carr = -rhorate/LAMBDA_L1;

</code>

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

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

<code>iTable = (chan[i].carr_phase &gt;&gt; 16) &amp; 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的卫星?

总结

以上是生活随笔为你收集整理的gps-sdr-sim c语言程序,用SDR实时伪造GPS信号的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。