从卫星接收机到组合导航【一】


介绍

本系列文章介绍的是本人从卫星接收机的中频数据到组合导航过程。

硬件部分

经过多次迭代,硬件部分基本确定下来😖,大致的组成如下图:
惯性导航系统

其中主要包含XC7Z020(处理器+FPGA)核心板、3个单轴光纤陀螺、3个单轴石英加速度计、4个3轴陀螺和3轴加速度MEMS IMU、大气压传感器、OEM718、千M以太网。该系统还是比较全的,包含了大部分民用惯导的硬件。

中频数据采集和处理

射频参考时钟输入为10M,默认输出的是60M采样率,按照60M采样 4bit I/Q采样,采集出来的数据暂时跟踪不上😖,退而求其次使用26M 2bit I/Q采样。基本设置如下表:

本振采样率滤波类型滤波带宽采样类型
1566.5MHz26MHz低通滤波20MHz2bit I/Q

中心频率如下:

频率类型中频(MHz)
GPS L11575.42 - 1566.5 = 8.92
BD B1I1561.098 - 1566.5 = -5.402

由于采样率为26MHz,所以一个通道无法采集GLONASS L1信号,但是可以采集出GPS L1和BD B1I信号。

GNSS-SDRLIB处理的配置,配置如下图:
GNSS-SDRLIB
正常运行后可以看到能捕获6颗GPS卫星,如下图所示:
GNSS-SDRLIB
等待处理完,test/output目录会生成.obs和.nav文件,使用RTKLIB对其进行处理,结果如下:
处理结果
可以看到定位结果在5m左右,如果不看绝对精度的话,是满足单点定位精度的。

分离出单GPS L1中频信号

使用matlab脚本对中频信号进行预处理,中频信号变成零中频信号的基带信号,代码如下

fclose('all');
clear


%% 读取数据

fp = fopen('E:\Data20230620-1566.5M-26M-2bit-IQ.dat','rb');
fp1 = fopen('E:\Data20230620-26M-zero-gps.bin','wb');

%% 初始化低通滤波参数

Fs = 26;  % Sampling Frequency

N    = 44;       % Order
Fc   = 1.5;        % Cutoff Frequency
flag = 'scale';  % Sampling Flag

% Create the window vector for the design algorithm.
win = hamming(N+1);

% Calculate the coefficients using the FIR1 function.
h  = fir1(N, Fc/(Fs/2), 'low', win, flag);

%%
wrbuf = int8(1:(26000*2));

phi=8.92/26*2*pi;

zf_state=0;

while 1
    
    %% 读取1ms数据
    z = fread(fp,26000000 * 0.001*2,'int8');
    [n m]= size(z);
        
    if (n == 26000000 * 0.001*2)
        z=z;
    else
      	break; 
    end
    
    read_real=zeros(n,1);
    read_imag=zeros(n,1);

    for k=1:n/2
        
       read_imag(k) = z(2*k-1);
       
       read_real(k) = z(2*k);
       
    end
    
    for i=1:26000
        % 正常的下变频  复数乘是加,这个方式减频率,见《GPS原理与接收机设计》P258
        II(i) = read_real(i) * cos(phi) +  read_imag(i) * sin(phi);
        QQ(i) = read_imag(i) * cos(phi) -  read_real(i) * sin(phi);

        phi = phi+8.92/26*2*pi;
        
        if phi>2*pi
            phi = phi - 2*pi;
        end
    end
    
    if zf_state==0
        [x_I zf_I] = filter(h,1,II);
        [x_Q zf_Q] = filter(h,1,QQ);
        
        zf_state=1;
    else
        [x_I zf_I] = filter(h,1,II,zf_I);
        [x_Q zf_Q] = filter(h,1,QQ,zf_Q);

    end
%%
    for i=1:26000
        wrbuf(i*2-1) = round(x_I(i)*55);
        wrbuf(i*2) = round(x_Q(i)*55);
    end

    fwrite(fp1,wrbuf,'int8');

end

fclose('all');

分离出单BD B1I信号

分离出BD B1I信号和分离GPS L1信号一样。

GNSS-SDRLIB存在的问题

1、在对BD B1I信号处理时,能捕获跟踪卫星,经常闪退,暂时不知道原因。

数据下载地址

链接:https://pan.baidu.com/s/1TCSutasva74fNYowr8Sw2g
提取码:xqzg

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值