卫星导航实践题Satellite-navigation-practice-questions-I( L1频点C/A码信号的并行捕获)

本文介绍了使用MATLAB实现的GPS卫星导航实践项目,涉及C/A码信号的并行捕获,包括信号生成、多普勒和伪码相位的捕获结果分析。作者分享了详细步骤和代码,适用于初学者参考和调试。
摘要由CSDN通过智能技术生成

最近学习了一些GPS卫星导航的一些知识,用matlab实现了三道实践题

比较简单,仅供参考,有问题欢迎指出

newton-fly/Satellite-navigation-practice-questions: Some practice questions on satellite navigation (github.com)

实践内容I : L1频点C/A码信号的并行捕获

  • 建议时间: 约3~4h
  • 工具:MATLAB
  • 内容
    1. 生成信号:信息速率50bps,伪码速率1.023MHz,码长度1023,自行设定中频、多普勒频率和伪码相位偏移,采用 BPSK调制,信噪比为30dB;
    2. 设定积分时间,采用相干或者非相干积分对信号进行捕获;
  • 要求
    1. 图示多普勒和伪码的捕获结果;

生成信号:

% 参数设定
info_rate = 50;          % 数据码信息速率,单位:bps
pseudo_len = 1023;       % C/A 码长度
pseudo_f = 1.023e6;
L1_carrier_freq = 1.57542e9; % L1载波频率,单位:Hz
doppler_freq = 5000;      % 多普勒频率,单位:Hz
pseudo_phase_offset = 200; % 伪码相位偏移
snr = 30;               % 信噪比,单位:dB
infolen=5;             %信息码长

% 初始化 C/A 码序列
ca_code = zeros(1, pseudo_len);

% 生成 C/A 码序列
ca_code = circshift(cacode(1,1), [0 pseudo_phase_offset]);

% 生成随机的信息比特(数据码)
info_bits = randi([0 1], 1, infolen); % 一个码元包括20个完整C/A码周期

% 对信息比特与C/A码进行异或操作(扩频)
spread_info_bits = zeros(1, pseudo_len * 20*infolen);
m=0;
for i = 1:infolen
    info=info_bits(i);
    for j=1:20
        for k=1:pseudo_len
            ca=ca_code(k);
            m=m+1;
            spread_info_bits(m)=xor(info,ca);
        end
    end
end
% 对扩频后的信号进行BPSK调制
modulated_signal = 2 * spread_info_bits - 1;

% 生成时间向量
t_pseudo = (0:length(modulated_signal) - 1)*(0.001/1023) ;

% 多普勒频移

% 生成载波信号
carrier_signal = cos(2 * pi *( L1_carrier_freq+doppler_freq) * t_pseudo );

% 将调制后的信号与载波相乘
signal_with_carrier = modulated_signal .* carrier_signal;

% 添加高斯白噪声
signal_with_noise = awgn(signal_with_carrier, snr, 'measured'); % 添加高斯白噪声

% 显示生成的信号
subplot(2,1,1)
plot(signal_with_carrier);
xlabel('时间');
ylabel('信号幅度');
title('生成的GPS信号');
subplot(2,1,2)
plot(signal_with_noise);
xlabel('时间');
ylabel('信号幅度');
title('生成的GPS信号有噪');

捕获信号:

x=0;
for f=0:1000:20000
    doppler_freq1=f;
    x=x+1;
    y=0;
    for of=0:1023
        pseudo_phase_offset1=of;
        y=y+1;
        % 生成本地的 C/A 码
        lca_code =  circshift(cacode(1,1), [0 pseudo_phase_offset1]);
        m=0;
        local_ca_code = zeros(1, pseudo_len * 20*infolen);
        for i = 1:infolen
            for j=1:20
                for k=1:pseudo_len
                    ca=lca_code(k);
                    m=m+1;
                    local_ca_code(m)=ca;
                end
            end
        end

        % 将本地的 C/A 码与接收到的信号相乘(这是预处理的一部分)
        processed_signal = signal_with_noise .* local_ca_code;

        [carrier_cos, carrier_sin] = generate_local_carrier_signal(length(signal_with_noise), L1_carrier_freq, doppler_freq1);

        % 将本地载波信号的余弦和正弦分量与处理后的信号相乘
        processed_signal_cos = processed_signal .* carrier_cos;
        processed_signal_sin = processed_signal .* carrier_sin;

        % 计算时间步长
        time_step = 0.001/1023; % 采样间隔

        % 选择1ms的时间间隔
        time_interval = 0.001; % 5ms
        num_samples = ceil(time_interval / time_step); % 计算在这段时间内的采样点数

        % 提取1ms时间内的信号
        signal_cos_1ms = processed_signal_cos(1:num_samples);
        signal_sin_1ms = processed_signal_sin(1:num_samples);

        % 计算余弦分量在1ms内的积分值I
        I = sum(signal_cos_1ms) ;
        % 计算正弦分量在1ms内的积分值Q
        Q = sum(signal_sin_1ms);
        % 计算I和Q的平方和
        sum_of_squares = I^2 + Q^2;
        p(x,y)=sum_of_squares;
        % 显示计算得到的I和Q
        %fprintf('在1ms内的积分值I为: %f\n', I);
        %fprintf('在1ms内的积分值Q为: %f\n', Q);
        %fprintf('I和Q的平方和为: %f\n', sum_of_squares);
    end
end
figure 
mesh(p)
title('捕获结果');
figure
subplot(1,2,1)
plot(0:1000:20000,p);
xlabel('多普勒频移');
ylabel('I^2 + Q^2');
title('多普勒频移捕获结果');
subplot(1,2,2)
plot(0:1023,p);
xlabel('C/A码相位');
ylabel('I^2 + Q^2');
title('C/A码相位捕获结果');

结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值