gps-sdr-sim c语言程序,用SDR实时伪造GPS信号
dc tone是自動(dòng)bias消掉的嗎
幾年前那些庫還不完善的時(shí)候 生成的流 看運(yùn)氣會(huì)有很高的dc tone,然后接收機(jī)就不認(rèn)了,要手工修正
dc tone是指頻譜中間那個(gè)高高聳立的DC offset么?不清楚你用的庫是是怎么樣的。。我這個(gè)沒有這樣的現(xiàn)象。。從頂樓的頻譜圖也可以看出來。。
庫源代碼里生成I/Q信號有關(guān)的代碼主要就這些:
每次循環(huán)把載波的相位步進(jìn)一段,計(jì)算下一個(gè)采樣點(diǎn)的信號:
<code>chan[i].carr_phase += chan[i].carr_phasestep;
</code>
步進(jìn)長度由衛(wèi)星初始化時(shí)確定:
<code>chan[i].carr_phasestep = (int)(512 * 65536.0 * chan[i].f_carr * delt);
</code>
步進(jìn)時(shí)間delt為采樣率倒數(shù):
<code>delt = 1.0/samp_freq;
</code>
載波頻率的計(jì)算:
<code>// Pseudorange rate.
rhorate = (rho1.range - chan->rho0.range)/dt;
// Carrier and code frequency.
chan->f_carr = -rhorate/LAMBDA_L1;
</code>
由兩次步進(jìn)偽距的差值除以LAMBDA_L1(光速除以GPS L1的頻率)得到。(產(chǎn)生多普勒偏移)
生成I/Q信號。。就是把數(shù)據(jù)比特和偽隨機(jī)擴(kuò)頻序列還有增益分別和兩路相差90度的載波信號乘到一起調(diào)制,然后把全部視野內(nèi)的衛(wèi)星信號疊加在一起:
<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>
顯然正常情況下大約正負(fù)10kHz的載波信號,與1.023MHz的偽隨機(jī)序列相乘會(huì)產(chǎn)生上下兩個(gè)邊帶共2.046MHz帶寬的信號的。。不會(huì)只在直流上形成一個(gè)尖峰。
這種情況姑且胡亂推測一下,這種情況應(yīng)該是bug導(dǎo)致生成了一個(gè)或者多個(gè)C/A碼一直為0或1的衛(wèi)星?
總結(jié)
以上是生活随笔為你收集整理的gps-sdr-sim c语言程序,用SDR实时伪造GPS信号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非开挖管道修复中常用的材料树脂,环氧树脂
- 下一篇: springboot缓存@Cacheab