m低信噪比下GPS信号的捕获算法研究,分别使用matlab和FPGA对算法进行仿真和硬件实现

1.算法概述

GPS卫星发送的信号一般由3个分量组成:载波、伪码和导航电文,其中伪码和导航电文采用BPSK技术去调制载波。GPS使用的两个L波段两种载频:




为了跟踪GPS信号,首先要捕获到GPS信号。将捕获到的GPS信号的数据传递给跟踪过程,再通过跟踪过程便可得到卫星的导航电文。传统的GPS捕获方法有:串行搜索捕获、滑动相关法、循环相关法、PMF算法。 采用分段FFT的方法进行运算,算法基本结构如图1所示。




这里分段数目为K,那么每个相关器的相关时间为TCA/K。每个相关器处理的C/A码长度为,然后再对处理后的数据进行FFT变换。由于每个FFT对应的点数仅仅为原来的,故其硬件资源较直接的并行FFT算法要节约。


当接收机处于遮挡比较严重的环境如隧道,高楼林立的市区GPS信号将变得非常微弱。根据经验,这种情况下,GPS信号的载噪比一般只有44dBhz,甚至更低。在这种情况下,获得的信号频谱非常差,甚至难以搜索到其峰值,因此,我们在检测信号最大值的时候,需要通过如下的运算,这里我们仍假设将信号分为K段进行FFT变化。



然后对得到的结果取模。当获得超过门限的峰值,则说明此时信号已经捕获,就得到对码相位和多普勒频移估计值,这样做的有点是可以获得峰值更为明显的谱线。


2.仿真效果预览

matlab2022a,ise10.1仿真






3.MATLAB/FPGA部分代码预览

timescale 1ns / 1ps

module tops(

i_clk,

i_rst,

o_CA,

o_sin,

o_cos,

o_ca_cos,

o_ca_som,

o_sum1,

o_sum2,

o_ca_cos2,

o_ca_som2,

fft_in1,

fft_in2,


fft_out1,

fft_out2


);


input              i_clk;

input              i_rst;

output signed[1:0] o_CA;

output signed[7:0] o_sin;

output signed[7:0] o_cos;

output signed[9:0] o_ca_cos;

output signed[9:0] o_ca_som;

output signed[13:0]o_sum1;

output signed[13:0]o_sum2;

output signed[9:0] o_ca_cos2;

output signed[9:0] o_ca_som2;

output signed[23:0]fft_in1;

output signed[23:0]fft_in2;


output signed[27:0]fft_out1;

output signed[27:0]fft_out2;



CA_carrier_module CA_carrier_module_u(

.i_clk     (i_clk),

.i_rst     (i_rst),

.o_CA      (),

.o_sin     (),

.o_cos     (),

.o_ca_cos  (o_ca_cos),

.o_ca_sin  (o_ca_sin)

);



wire signed[13:0]o_sum1;

wire signed[13:0]o_sum2;


delay_1ms delay_1ms_u1(

.i_clk    (i_clk),

.i_rst    (i_rst),

.i_data   (o_ca_cos),

.o_data1  (),

.o_data2  (),

.o_data3  (),

.o_data4  (),

.o_data5  (),

.o_data6  (),

.o_data7  (),

.o_data8  (),

.o_data9  (),

.o_data10 (),

.o_sum    (o_sum1)

);



delay_1ms delay_1ms_u2(

.i_clk    (i_clk),

.i_rst    (i_rst),

.i_data   (o_ca_sin),

.o_data1  (),

.o_data2  (),

.o_data3  (),

.o_data4  (),

.o_data5  (),

.o_data6  (),

.o_data7  (),

.o_data8  (),

.o_data9  (),

.o_data10 (),

.o_sum    (o_sum2)

);




reg[1:0]cnt1 = 2'b00;

wire    clk2;


always @(posedge i_clk or posedge i_rst)

begin

if(i_rst)

cnt1 <= 2'b00;

else begin

cnt1 <= cnt1 + 1'b1;

end

end


assign clk2 = cnt1[1];

CA_gen CA_gen_u(

.i_clk (clk2),

.i_rst (i_rst),

.o_CA  (o_CA)

);




ncos ncos_u(

.reg_select (1'b0),

.clk        (i_clk),

.we         (1'b1),

.data       (26'd16777216),

.sine       (o_sin),

.cosine     (o_cos)

);


multer multer_u1(

.clk (i_clk),

.a   (o_cos),

.b   (o_CA),

.p   (o_ca_cos2)

);


multer multer_u2(

.clk (i_clk),

.a   (o_sin),

.b   (o_CA),

.p   (o_ca_sin2)

);  


wire [23:0]fft_in1;

wire [23:0]fft_in2;

multer2 multer2_u1(

.clk (i_clk),

.a   (o_sum1),

.b   (o_ca_cos2),

.p   (fft_in1)

);


multer2 multer2_u2(

.clk (i_clk),

.a   (o_sum2),

.b   (o_ca_sin2),

.p   (fft_in2)

);


//==============fft==========================

ffts ffts_u1(

.sclr        (i_rst),

.fd_in       (1'b1),

.fd_out      (),

.forward     (1'b1),//1;fft;0:ifft

.clk         (i_clk),

.rffd        (),

.data_valid  (),

.dout        (fft_out1),

.din         (fft_in1),

.size        (6'd31)

);



ffts ffts_u2(

.sclr        (i_rst),

.fd_in       (1'b1),

.fd_out      (),

.forward     (1'b1),//1;fft;0:ifft

.clk         (i_clk),

.rffd        (),

.data_valid  (),

.dout        (fft_out2),

.din         (fft_in2),

.size        (6'd31)

);



wire signed[13:0]omax1;

wire       [9:0]index;  

reg signed[13:0]o_power_average=14'd550;

reg signed[22:0]r_power_average=23'd281600;



always @(posedge i_clk or posedge i_rst)

begin

if(i_rst)

begin

o_power_average <= 14'd550;

r_power_average <= 23'd281600;

end

else begin

if(omax1[13] == 1'b1 | omax1==14'd0)

o_power_average <= 14'd550;

else begin

r_power_average <= 172*omax1;

o_power_average <= r_power_average[22:9];

end

end

end



find_max find_max_u(

.clk    (i_clk),

.rst    (i_rst), //同步复位

.idata  (o_fadd),

.iTh1   (o_power_average),

.omax1  (omax1),

.oindex1(index),

.omax2  (),

.oindex2(),

.omax3  (),

.oindex3(),

.oen    (),

.oen1   (),

.start  ()

);


endmodule

01_026_m

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容