GPS 入门 9 —— GPS信号的SA和AS

美国政府在GPS的最初设计中,计划向社会提供两种服务,精密定位服务(PPS)和标准定位服务(SPS)。精密定位服务的主要服务对象是政府部门或其他特许民用部门,使用双频P码,预期定位精度达到10米。标准定位服务的主要对象是广大的民间用户,使用C/A码单频接收机,无法利用双频技术消除电离层的折射的影响,其单点实时定位的精度约为100米。

但是在GPS的实验阶段,由于提高了卫星钟的稳定性和改进了卫星轨道的测定精度,使得利用C/A码定位的精度达到14米,利用P码定位的精度达到3米,大大优于预期。美国政府出于自身安全的考虑,于1991年在Block Ⅱ 卫星上实施了SA和AS政策,其目的就是降低GPS的定位精度。

SA(Selective Availability)政策即可用性选择政策,通过控制卫星钟和报告不精确的卫星轨道信息来实现。它包括两项技术:第一项技术是将卫星星历中轨道参数的精度降低到200米左右;第二项技术是在GPS卫星的基准频率施加高抖动噪声信号,而且这种信号是随机的,从而导致测量出来的伪距误差增大。通过这两项技术,使民用GPS定位精度重新回到原先估计的误差水平,即大约100米。

军用接收机则由于装备了特殊的硬件和码,能减轻“SA”的效果。GPS系统管理人员通过地面指挥旋转开关,控制“SA”的开与关。值得指出的是,SA是空间相关的,所以民用用户可以通过差分GPS(DGPS)的方法消除SA,当然用户必须对此增加自己的成本。

2000年5月2日,SA政策被取消。美国放弃这一举措,可能基于两种考虑,一是其国内和国外的应用需求,以及国际竞争的需要,希望保持GPS的国际领先地位,同时成为国际标准的战略性策略;二是美国已经具备新的阻断敌对方利用民用信号对其发动攻击的能力,尤其是在局部区域内的控制使用能力。

AS(Anti-Spoofing) 政策即反电子欺骗政策。它将P码与高度机密的W码模2相加形成新的Y码。其目的在于防止敌方对P码进行精密定位,也不能进行P码和C/A码相位测量的联合求解。

SA和AS技术是各自独立实施的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC++(MFC)数据库程序开发,需要以下几个步骤: 1. 创建数据库 2. 创建表 3. 编写 VC++(MFC)程序 4. 连接数据库 5. 增删改查数据 下面,我们一步一步来实现一个简单的 VC++(MFC)数据库程序。 1. 创建数据库 我们使用 Microsoft SQL Server 数据库。首先,在 SQL Server Management Studio 中创建一个新的数据库。假设我们的数据库名称为 "TestDB"。 2. 创建表 在 "TestDB" 数据库中,创建一个新的表 "Student"。该表包含以下字段: - 学生编号(StudentID):int 类型,主键,自增长 - 姓名(Name):nvarchar(50) 类型 - 年龄(Age):int 类型 - 性别(Gender):nvarchar(10) 类型 3. 编写 VC++(MFC)程序 打开 VC++(MFC) 编辑器,创建一个新的 MFC 应用程序。在 "应用程序类型" 中选择 "单文档",在 "使用 MFC 的类型" 中选择 "使用数据库支持"。 4. 连接数据库 在 "OnInitInstance" 函数中,添加以下代码: ```c++ if (!AfxDaoInit()) { AfxMessageBox("Failed to initialize DAO!"); return FALSE; } CDatabase database; if (!database.OpenEx(_T("ODBC;DSN=TestDB;UID=sa;PWD=123456"))) { AfxMessageBox("Failed to open database!"); return FALSE; } CDaoDatabase* pDaoDB = &database; ``` 这里,我们使用 ODBC 连接数据库。"DSN" 是数据源名称,"UID" 和 "PWD" 是登录数据库的用户名和密码。当然,你也可以使用其他的数据库连接方式。 5. 增删改查数据 在 "Student" 表中插入一条记录: ```c++ CDaoRecordset recordset(pDaoDB); recordset.Open(dbOpenDynaset, _T("SELECT * FROM Student"), dbAppendOnly); recordset.AddNew(); recordset.SetFieldValue(_T("Name"), _T("张三")); recordset.SetFieldValue(_T("Age"), 20); recordset.SetFieldValue(_T("Gender"), _T("男")); recordset.Update(); ``` 在 "Student" 表中查询记录: ```c++ CDaoRecordset recordset(pDaoDB); recordset.Open(dbOpenDynaset, _T("SELECT * FROM Student"), dbReadOnly); CString strResult; while (!recordset.IsEOF()) { CString strName, strGender; int nAge; recordset.GetFieldValue(_T("Name"), strName); recordset.GetFieldValue(_T("Age"), nAge); recordset.GetFieldValue(_T("Gender"), strGender); strResult.Format(_T("%s\t%d\t%s"), strName, nAge, strGender); AfxMessageBox(strResult); recordset.MoveNext(); } ``` 在 "Student" 表中更新记录: ```c++ CDaoRecordset recordset(pDaoDB); recordset.Open(dbOpenDynaset, _T("SELECT * FROM Student"), dbAppendOnly); recordset.MoveFirst(); recordset.SetFieldValue(_T("Age"), 21); recordset.Update(); ``` 在 "Student" 表中删除记录: ```c++ CDaoRecordset recordset(pDaoDB); recordset.Open(dbOpenDynaset, _T("SELECT * FROM Student"), dbAppendOnly); recordset.MoveFirst(); recordset.Delete(); ``` 到此为止,我们就完成了一个简单的 VC++(MFC)数据库程序。当然,这只是一个入门级别的程序,实际开发中还需要更多的功能和处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值