GPS软件接收机跟踪环路滤波器代码书写解释

我们知道跟踪环路常用的是理想二阶环,即环路滤波器用的是一阶环(因为压控振荡器可以看作一个积分环节,有一个1/s,算是一阶)但是代码中是
carrNco = oldCarrNco + (tau2carr/tau1carr) * …
(carrError - oldCarrError) + carrError * (PDIcarr/tau1carr);
看着和理想二阶环的环路滤波器传递函数差不多,但是一直没有推导,现终于有理论推导如下。
在这里插入图片描述
补充:滤波器的阶数是指在滤波器的传递函数中有几个极点.阶数同时也决定了转折区的下降速度,一般每增加一阶(一个极点),就会增加一20dBDec(一20dB每十倍频程)。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的数字环路滤波器的 MATLAB 代码示例: ``` % 设定参数 f_ref = 10; % 参考频率 f_vco = 20; % VCO 频率 Kp = 0.1; % 比例增益 Ki = 0.01; % 积分增益 T = 1/f_vco; % VCO 周期 n = 1000; % 采样点数 % 初始化变量 t = 0; % 时间 theta = 0; % 相位差 theta_err = 0; % 相位误差 theta_err_sum = 0; % 相位误差积分 vco_out = zeros(n, 1); % VCO 输出信号 filter_out = zeros(n, 1); % 数字环路滤波器输出信号 % 模拟数字环路滤波器 for i = 1:n % 计算相位差 theta = mod(theta + 2*pi*f_vco*T, 2*pi); % 更新 VCO 相位 theta_err = mod(theta - 2*pi*f_ref*t, 2*pi); % 计算相位误差 % 计算控制信号 theta_err_sum = theta_err_sum + theta_err; % 相位误差积分 control_signal = Kp*theta_err + Ki*theta_err_sum; % 计算控制信号 % 更新 VCO 频率 f_vco = f_vco + control_signal; T = 1/f_vco; % 计算 VCO 输出信号 vco_out(i) = sin(2*pi*f_vco*t); % 计算数字环路滤波器输出信号 filter_out(i) = vco_out(i)*cos(2*pi*f_ref*t+theta); % 更新时间 t = t + T; end % 绘制结果 t_axis = linspace(0, n*T, n); subplot(2,1,1); plot(t_axis, vco_out); title('VCO 输出信号'); xlabel('时间(秒)'); ylabel('幅度'); subplot(2,1,2); plot(t_axis, filter_out); title('数字环路滤波器输出信号'); xlabel('时间(秒)'); ylabel('幅度'); ``` 这个代码示例中,我们模拟了一个简单的数字环路滤波器,其中参考频率为 10Hz,VCO 初始频率为 20Hz。我们使用比例增益和积分增益来计算控制信号,将其加到 VCO 频率上,然后计算 VCO 输出信号和数字环路滤波器输出信号。最后,我们绘制了 VCO 输出信号和数字环路滤波器输出信号随时间的变化情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值