Index: trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 11040)
+++ trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 11041)
@@ -702,5 +702,8 @@
           }
           t_frqAntenna frqAntenna;
-          frqAntenna._freqIndex                = f;
+          frqAntenna._frqType = _ssrCorr->antFreqIndexToStr(si.sysChar, f);
+          if (frqAntenna._frqType.empty()) {
+            continue; // reserved/unmapped DF+018 bit position
+          }
           frqAntenna._nadirCorrectionIndicator = satPart.Freq[f].NadirCorrectionIndicator;
           frqAntenna._nadirCorrection          = satPart.Freq[f].NadirCorrection;
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h	(revision 11040)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h	(revision 11041)
@@ -516,4 +516,8 @@
   virtual std::string codeTypeToRnxType(char system, CodeType type) = 0;
   virtual CodeType rnxTypeToCodeType(char system, std::string type) = 0;
+  /* DF+018 GNSS Frequency Mask bit position (0-based) -> t_frequency::type
+     label (e.g. "G1", "R2", "E7"), per system. Returns "" for a reserved/
+     unmapped bit position. */
+  virtual std::string antFreqIndexToStr(char system, unsigned int freqIndex) = 0;
 
 
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.cpp
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.cpp	(revision 11040)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.cpp	(revision 11041)
@@ -937,2 +937,10 @@
 }
 
+//
+////////////////////////////////////////////////////////////////////////////
+std::string SsrCorrIgs::antFreqIndexToStr(char, unsigned int) {
+  // This format does not decode Satellite Antenna message content; only
+  // present to satisfy SsrCorr's interface.
+  return "";
+}
+
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.h
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.h	(revision 11040)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.h	(revision 11041)
@@ -219,4 +219,5 @@
    std::string metaTypeToStr(unsigned int ind);
    std::string codeTypeToRnxType(char system, CodeType type);
+   std::string antFreqIndexToStr(char system, unsigned int freqIndex);
    SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type);
 
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.cpp
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.cpp	(revision 11040)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.cpp	(revision 11041)
@@ -1391,2 +1391,10 @@
 }
 
+//
+////////////////////////////////////////////////////////////////////////////
+std::string SsrCorrRtcm::antFreqIndexToStr(char, unsigned int) {
+  // Satellite Antenna messages are not defined in (old) RTCM-SSR; only
+  // present to satisfy SsrCorr's interface.
+  return "";
+}
+
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h	(revision 11040)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h	(revision 11041)
@@ -218,4 +218,5 @@
   std::string metaTypeToStr(unsigned int ind);
   std::string codeTypeToRnxType(char system, CodeType type);
+  std::string antFreqIndexToStr(char system, unsigned int freqIndex);
   SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type);
 
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp	(revision 11040)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp	(revision 11041)
@@ -1410,2 +1410,40 @@
   return "reserved!";
 }
+
+//
+////////////////////////////////////////////////////////////////////////////
+std::string SsrCorrRtcmNew::antFreqIndexToStr(char system, unsigned int freqIndex) {
+  switch (system) {
+  case 'G':
+    if (freqIndex == 0) return "G1";
+    if (freqIndex == 1) return "G2";
+    if (freqIndex == 2) return "G5";
+    break;
+  case 'R':
+    if (freqIndex == 0) return "R1";
+    if (freqIndex == 1) return "R2";
+    break;
+  case 'E':
+    if (freqIndex == 0) return "E1";
+    if (freqIndex == 1) return "E6";
+    if (freqIndex == 2) return "E7";
+    if (freqIndex == 3) return "E8";
+    if (freqIndex == 4) return "E5";
+    break;
+  case 'J':
+    if (freqIndex == 0) return "J1";
+    if (freqIndex == 1) return "J6";
+    if (freqIndex == 2) return "J2";
+    if (freqIndex == 3) return "J5";
+    break;
+  case 'C':
+    if (freqIndex == 0) return "C2"; // B1
+    if (freqIndex == 1) return "C6"; // B3
+    if (freqIndex == 2) return "C7"; // B2
+    if (freqIndex == 3) return "C5"; // B2a
+    if (freqIndex == 4) return "C7"; // B2b (same t_frequency::type as B2)
+    if (freqIndex == 5) return "C1"; // B1C
+    break;
+  }
+  return ""; // reserved / unmapped bit position
+}
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.h
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.h	(revision 11040)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.h	(revision 11041)
@@ -273,4 +273,5 @@
   std::string codeTypeToRnxType(char system, CodeType type);
   SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type);
+  std::string antFreqIndexToStr(char system, unsigned int freqIndex);
 
   size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type, int moremessagesfollow, char *buffer, size_t size);
