TamTam Research blog

TMC Analyser - decoding RDS-TMC messages from RDS stream

TMC Analyser

TMC Analyser is a program, which consumes stream of RDS data (consumed live or from an archive), detects wide set of RDS quality parameters together with RDS-TMC messages and related information, and produces data files for predefined time intervals (typically 1, 3 or 5 minutes).

Each publication (one XML file) contains three sections with content relevant to the publication time:

  • Information - metainformation
  • Snapshot - all valid events
  • Journal - events received in last period
  • RdsQuality - RDS quality for last period

Files are stored in file system, or made available via pub/sub messaging to other programs.

The document looks like:

<Document formatVersion="TmcAnalyser-0.2dev">
    <Information station="R-REGINA 92.60 MHz" measuredAtLocation="" period="10" programIdentification="2406" serviceIdentifier="2" frequency="92.6" programStation="R-REGINA">
        ...
    </Information>
    <Snapshot time="2014-07-31T13:36:32Z">
        ...
    </Snapshot>
    <Journal>
        ...
    </Journal>
    <RdsQualityMeasurement>
        ...
    </RdsQualityMeasurement>
</Document>

Information section

First element in root Document element is Information:

<?xml version="1.0" encoding="UTF-8"?>
<Document formatVersion="TmcAnalyser-0.2dev">
    <Information station="R-REGINA 92.60 MHz" measuredAtLocation="" period="10" programIdentification="2406" serviceIdentifier="2" frequency="92.6" programStation="R-REGINA">
        <ReferenceData>
            <EventTable version="2.01" language="en"/>
            <LocationTable version="5.0" number="25" country="2"/>
        </ReferenceData>
        <Time start="2014-07-31T13:36:22Z" stop="2014-07-31T13:36:32Z"/>
    </Information>

Snapshot section

RDS decoder receives data for longer term and keeps track of all events, which seem valid for the time of publication.

This shall reflect expected behaviour of any navigation device, trying to build up a picture of current status.

<Snapshot time="2014-07-31T13:36:32Z">
    <Message uuid="{c65bb80d-9557-41b6-b4f9-0a52ef5c6356}" receivedCount="5" versionType="update" groups="1">
        <Time first="2014-07-31T13:35:11Z" last="2014-07-31T13:36:23Z" validUntil="2014-07-31T13:51:23Z"/>
        <TmcMessage urgency="" directionality="2" durationType="D" durationCode="0" diversionRecommended="false">
            <Event eventCode="1804" updateClass="25">(Q sets of) traffic lights not working</Event>
            <Location primaryCode="19093" extent="1" direction="+" isInterRoadMessage="false">
                <Description>Ostrava-město, 1. máje, BETWEEN [T-junction] Pohraniční AND [T-junction] Průmyslová, IN BOTH DIRECTIONS</Description>
                <LineString>18.2645,49.818 18.2636,49.8194</LineString>
            </Location>
            <RdsGroup binary="240685480F0C4A95"/>
        </TmcMessage>
    </Message>
    <Message>
        ...
    </Message>
    <Message>
        ...
    </Message>
</Snapshot>

Journal section

Journal reports received data, created, updated, deleted and expired events during last period.

<Journal>
    <RdsGroup type="3A" binary="240635504080CD46" received="2014-07-31T13:36:22Z">
        <RdsGroup3a8aVariant1 gap="0" sid="2" ltcc="0"/>
    </RdsGroup>
    <Message uuid="{d51d6ef6-8dcd-467f-a876-60141519ac42}" receivedCount="5" versionType="update" groups="1">
        <Time first="2014-07-31T13:35:10Z" last="2014-07-31T13:36:22Z" validUntil="2014-07-31T14:36:22Z"/>
        <TmcMessage urgency="" directionality="1" durationType="L" durationCode="0" diversionRecommended="false">
            <Event eventCode="803" updateClass="11">(Q sets of) construction work</Event>
            <Location primaryCode="23829" extent="1" direction="+" isInterRoadMessage="false">
                <Description>Olomouc, 1. Máje, BETWEEN [T-junction] Komenského AND [square] Žižkovo nám., IN DIRECTION OF Náměstí Republiky</Description>
                <LineString>17.2613,49.597 17.2647,49.5961</LineString>
            </Location>
            <RdsGroup binary="240685480B235D15"/>
        </TmcMessage>
    </Message>
    <RdsGroup type="3A" binary="240635500647CD46" received="2014-07-31T13:36:24Z">
        <RdsGroup3a8aVariant0 locationTableNumber="25" alternativeFrequencyIndicator="false" transmissionMode="basic" international="false" national="true" regional="true" urban="true"/>
    </RdsGroup>
    <RdsGroup type="8A" binary="2406855554534B20" received="2014-07-31T13:36:24Z">
        <RdsGroup8aTuningVariant5 characters="TSK "/>
    </RdsGroup>
    <Message>
        ...
    </Message>
    <RdsGroup>
        ...
    </RdsGroup>
</Journal>

RdsQualityMeasurement section

Section RdsQualityMeasurement describes various statistics and information related to general RDS.

<RdsQualityMeasurement>
    <RdsGroupReceived valid="114" corrected="0" invalid="0"/>
    <RdsGroupsCounts>
        <Count group="0A" count="21"/>
        <Count group="2A" count="43"/>
        <Count group="3A" count="7"/>
        <Count group="8A" count="43"/>
    </RdsGroupsCounts>
    <Group8ATypeRepetition>
        <Group8A type="single">
            <Count sequenceLength="2" count="3"/>
        </Group8A>
        <Group8A type="tuning">
            <Count sequenceLength="2" count="15"/>
        </Group8A>
        <Group8A type="multigroup_1st_grp">
            <Count sequenceLength="2" count="2"/>
        </Group8A>
        <Group8A type="multigroup_2nd_grp">
            <Count sequenceLength="2" count="1"/>
        </Group8A>
        <Group8A type="multigroup_Nth_grp"/>
        <Group8A type="alertPlus"/>
    </Group8ATypeRepetition>
    <TmcMsgTypeCount>
        <Count type="single" valid="3" invalid="0"/>
        <Count type="tuning" valid="15" invalid="0"/>
        <Count type="multigroup_2grp" valid="1" invalid="0"/>
        <Count type="multigroup_3+grp" valid="0" invalid="0"/>
        <Count type="alertPlus" valid="0" invalid="0"/>
    </TmcMsgTypeCount>
    <Group8AGap>
        <Group3AConfig gapValue="3" transmissionMode="basic"/>
        <Gap sequenceLength="0" count="21"/>
        <Gap sequenceLength="3" count="15"/>
        <Gap sequenceLength="4" count="7"/>
    </Group8AGap>
</RdsQualityMeasurement>

Real life use cases

Assuming we have access to archived or live RDS data of some RDS-TMC service, we may audit quality and content.

This may help when moving your RDS-TMC service into production, searching for improvement or evaluating what could your users really receive.

Comments