00001 #pragma ident "$Id: ARSimple.cpp 2937 2011-10-23 19:23:33Z yanweignss $"
00002
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "ARSimple.hpp"
00031
00032
00033 namespace gpstk
00034 {
00035 Vector<double> ARSimple::resolveIntegerAmbiguity(
00036 const Vector<double>& ambFloat,
00037 const Matrix<double>& ambCov )
00038 throw(ARException)
00039 {
00040
00041 if( ambFloat.size()!=ambCov.rows() || ambFloat.size()!=ambCov.cols() )
00042 {
00043 ARException e("The dimension of input does not match.");
00044 GPSTK_THROW(e);
00045 }
00046
00047 const size_t n = ambFloat.size();
00048
00049 Vector<double> ambFixed(n,0.0);
00050 for(int i = 0; i < ambFloat.size(); i++)
00051 {
00052 const double threshold = 3.0 * std::sqrt(ambCov(i,i));
00053
00054 double lowerValue = ambFloat(i) - threshold;
00055 double upperValue = ambFloat(i) + threshold;
00056
00057 if( std::abs(upperValue-lowerValue) <= 1.0 )
00058 {
00059 ambFixed(i) = double( std::floor(ambFloat(i)+0.5) );
00060 }
00061 else
00062 {
00063 ambFixed(i) = ambFloat(i);
00064 }
00065 }
00066
00067 return ambFixed;
00068
00069 }
00070
00071
00072 }
00073