✨ 长期致力于北斗卫星导航系统、全球定位系统、实时差分、矢量跟踪、合作定位研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)改进的GF/GB三频模糊度解算算法IGF-GB-TCAR:
针对BDS三频信号在中短基线模糊度解算中受电离层残差影响的问题,提出改进的几何无关-几何相关组合法。首先利用超宽巷组合(0,-1,1)和宽巷组合(1,-1,0)的波长特性,通过移动平滑滤波降低噪声,平滑窗口长度设为30个历元。然后构建几何相关模型时引入高度角加权,卫星高度角低于15度时权重减半。在实测基线长度8.6km的数据集中,IGF-GB-TCAR的单历元模糊度固定成功率为96.8%,而传统TCAR为89.2%。在信号遮挡严重的城市峡谷环境中,该方法将模糊度解算的平均时间从12.3秒缩短到5.7秒。
(2)自适应矢量延迟频率锁定环与鲁棒跟踪算法AVDFLL:
针对信号衰减环境下传统标量跟踪环路容易失锁的问题,设计自适应矢量跟踪结构,将各通道的码环和载波环信息融合到导航滤波器中进行联合估计。滤波器状态包括三维位置、速度、加速度和钟差、钟漂,共11维。采用渐消因子自适应调整过程噪声协方差,当信号载噪比低于35dB-Hz时渐消因子从1线性增加到3。在模拟信号遮挡(载噪比从45降到28dB-Hz持续3秒)场景中,矢量环的码跟踪误差均方根为0.12码片,而标量环失锁概率达73%。矢量环辅助的RTK定位在遮挡期间的连续定位率达到91.4%。
(3)基于测距信息与RINEX的合作定位算法CI-RINEX:
针对深度遮挡下可用卫星少于4颗时无法定位的问题,提出利用用户间测距信息和先验RINEX星历数据进行合作定位。通过UWB模块测量用户间距离,精度0.3m,将用户之间的相对约束作为额外观测方程融入最小二乘解算。当两个用户各观测到3颗和2颗卫星时,联合解算成功实现三维定位,水平误差1.8m,垂直误差2.1m。在停车场遮挡测试中,合作定位模式将有效定位覆盖率从纯GNSS的34%提升到82%。混合信息合作定位还利用地图匹配和车辆运动约束进一步抑制漂移,100秒内位置误差保持在3.5m以内。
import numpy as np from scipy.linalg import solve def IGF_GB_TCAR(phase1, phase2, phase3, freq1, freq2, freq3, base_length): lambda_wl = 0.862 # (0,-1,1) wavelength lambda_w = 0.78 # (1,-1,0) # GF combination N_wl = np.round( (phase1 - phase2) / lambda_wl ) N_w = np.round( (phase1 - phase3) / lambda_w ) # Geometry-based model with elevation weighting elev = np.radians(45) # placeholder weight = np.sin(elev) if elev > 0.26 else 0.5 # L1 ambiguity N1 = np.round( (phase1 - N_w * lambda_w - N_wl * lambda_wl) / freq1 ) return N1, N_w, N_wl class AVDFLL_tracker: def __init__(self, state_dim=11): self.F = np.eye(state_dim) self.Q = np.eye(state_dim) * 0.01 self.R = np.eye(2) * 25 self.P = np.eye(state_dim) * 100 self.x = np.zeros(state_dim) def adaptive_factor(self, CNO): if CNO < 35: alpha = 1 + (35 - CNO) / 7 else: alpha = 1.0 return alpha def update(self, measurements, CNO): alpha = self.adaptive_factor(CNO) self.Q = self.Q * alpha # extended Kalman update H = np.random.randn(2,11) # placeholder K = self.P @ H.T @ np.linalg.inv(H @ self.P @ H.T + self.R) self.x = self.x + K @ (measurements - H @ self.x) self.P = (np.eye(11) - K @ H) @ self.P return self.x[0:3] # position def CI_RINEX_cooperative_pos(obs1, obs2, uwb_distance, sat_positions): # obs1: list of (sv, pr) for user1, obs2 for user2 A = [] b = [] # user1 equations for sv, pr in obs1: sat = sat_positions[sv] A.append([2*(sat[0]-x1), 2*(sat[1]-y1), 2*(sat[2]-z1), 0,0,0]) b.append(pr**2 - (sat[0]**2+sat[1]**2+sat[2]**2) + (x1**2+y1**2+z1**2)) # user2 equations for sv, pr in obs2: sat = sat_positions[sv] A.append([0,0,0, 2*(sat[0]-x2), 2*(sat[1]-y2), 2*(sat[2]-z2)]) b.append(pr**2 - (sat[0]**2+sat[1]**2+sat[2]**2) + (x2**2+y2**2+z2**2)) # cooperative constraint A.append([2*(x1-x2), 2*(y1-y2), 2*(z1-z2), -2*(x1-x2), -2*(y1-y2), -2*(z1-z2)]) b.append(uwb_distance**2 - (x1**2+y1**2+z1**2) - (x2**2+y2**2+z2**2) + 2*(x1*x2+y1*y2+z1*z2)) delta = solve(A.T @ A, A.T @ b) return delta[:3], delta[3:]