PART I -
A GUIDE TO THE CODE FORM FM-94 BUFR
TABLE OF CONTENTS
Introduction
Chapter 1. Sections of a BUFR message
Chapter 2. BUFR tables
Chapter 3. Using data replication
Chapter 4. Data compression
Chapter 5. Table c - data description operators
Chapter 6. Quirks, advanced features, and special uses of BUFR
The World Meteorological Organization (WMO) code form FM 94 BUFR (Binary Universal Form for the Representation of meteorological data) is a binary code designed to represent, employing a continuous binary stream, any meteorological data. There is, however, nothing uniquely meteorological about BUFR. The meteorological emphasis is the result of the origin of the code. The code form may be applied to any numerical or qualitative data type.
BUFR is the result of a series of informal and formal "expert meetings" and periods of experimental usage by several meteorological data processing centers. The WMO Commission for Basic Systems (CBS) approved BUFR at its January/February 1988 meeting. Changes were introduced at the CBS Working Group on Data Management, Sub-Group on Data Representation meetings in May, 1989 and October 1990. The changes introduced at the October 1990 meeting were of such magnitude that BUFR, Edition 2 was defined, with an effective date of November 7, 1991.
The key to understanding the power of BUFR is the code's self-descriptive nature. A BUFR "message" (or record, the terms are interchangeable in this context) containing observational data of any sort also contains a complete description of what those data are: the description includes identifying the parameter in question, (height, temperature, pressure, latitude, date and time, whatever), the units, any decimal scaling that may have been employed to change the precision from that of the original units, data compression that may have been applied for efficiency, and the number of binary bits used to contain the numeric value of the observation. This data description is all contained in tables which are the major part of the BUFR documentation.
The strength of this self-descriptive feature is in accommodating change. For example, if new observations or observational platforms are developed, there is no need to invent a new code form to represent and transmit the new data; all that is necessary is the publication of additional data description tables. Similarly for the deletion of possibly outdated observations: instead of having to send "missing" indicators for a long period while awaiting a change to a fixed format code, the "missing" data are simply not sent in the message and the data description section is adjusted accordingly. The data description tables are not changed, however, so that archives of old data may be retrieved.
This self-descriptive feature leads to another advantage over character oriented codes - The relative ease of decoding a BUFR message. Where a large number of specialized and complex programs are now needed to decode the plethora of character codes in current use, it is entirely feasible to write a single "universal BUFR decoder" program capable of decoding any BUFR message. It is not a trivial task to write such a BUFR decoder, but once it is done, it is done for all time. The program will not have to change with changes in observational practices; only the tables will need to be augmented, a relatively trivial task.
The development of BUFR has been synonymous with the development of the data description language that is integral to it. Indeed the major portion of the full description of BUFR is a description of the vocabulary and syntax of the data description language. The definition of the data description language, and the "descriptors" that are its vocabulary, are what give BUFR its "universal" aspect: any piece of information can be described in the language, not just meteorological observations.
The other major aspect of BUFR is reflected in the first initial, "B"; BUFR is a purely binary or bit oriented form, thus making it both machine dependent and, at the same time, machine independent. The dependency comes in the construction or interpretation of BUFR messages: there is not much for a human to look at (unless she is very patient) as all the numbers in a message, whether data descriptors or the data themselves, are binary integers. And that, of course, leads to the machine independence: with BUFR consisting entirely of binary integers any brand of machine can handle BUFR as well as any other.
The binary nature of BUFR leads to another advantage over character codes: the ease and speed of converting the message into an internally useful numeric format. With character codes the conversion from ASCII (or EBCDIC) to integer or floating point is expensive relative to the conversion from binary integers to floating point. The latter is all that BUFR requires. In some tests, the European Centre for Medium-Range Weather Forecasts found a speedup of better than 6 times in decoding BUFR messages over the corresponding TEMP (WMO Radiosonde character code FM 35-IX Ext.) messages. The BUFR data also required about half the machine memory as the character data.
All of this does assume the availability of well designed computer programs that are capable of parsing the descriptors, which can be a complex task, matching them to the bit stream of data and extracting the numbers from the stream, responding properly to the arrival of new (or the departure of old) data descriptors, and reformatting the numbers in a way suitable for subsequent calculations. The bit oriented nature of the message also requires the availability of bit transparent communications systems such as the x.25 protocol. Such protocols have various error detecting schemes built in so there need be little concern about the corruption of information in the transmission process.
Dr. John D. Stackpole
NOAA/NWS
National Meteorological Center
Camp Springs, MD 20746 U.S.A.
Sections of a BUFR Message
1.1 Introduction. The term "message" refers to BUFR being used as a data transmission format; however, BUFR can, and is, used in several meteorological data processing centers as an on-line storage format as well as a data archiving format.
1.2 Specifications of Octets Within Each Section. For transmission of data, each BUFR message consists of a continuous binary stream comprising 6 sections.
C O N T I N U O U S B I N A R Y S T R E A M |
|||||||
section 0 |
section 1 |
section 2 |
section 3 |
section 4 |
section 5 |
||
Section |
Name |
Contents |
|||||
number |
|
|
|||||
0 |
indicator section |
"BUFR" (coded according to the CCITT International Alphabet No. 5, which is functionally equivalent to ASCII), length of message, BUFR edition number |
|||||
1 |
identification |
length of section, identification of the section message |
|||||
2 |
optional section |
length of section and any additional items for local use by data processing centers |
|||||
3 |
data description |
length of section, number of data section subsets, data category flag, data compression flag, and a collection of data descriptors which define the form and content of individual data elements |
|||||
4 |
data section |
length of section and binary data |
|||||
5 |
end section |
"7777" (coded in CCITT International Alphabet No. 5) |
Each of the sections of a BUFR message is made up of a series of octets. The term octet, meaning 8 bits, was coined to avoid having to continually qualify byte as an 8-bit byte. Also, in French, the words "byte" and "bit" are pronounced the same (as "beet"), "octet" clearly avoids that problem, too. An individual section shall always consist of an even number of octets, with extra bits added on and set to zero when necessary. Within each section, octets are numbered 1, 2, 3, etc., starting at the beginning of each section. Bit positions within octets are referred to as bit 1 to bit 8, where bit 1 is the most significant, leftmost, or high order bit. An octet with only bit 8 set would have the integer value 1.
Theoretically there is no upper limit to the size of a BUFR message but, by convention, BUFR messages are restricted to 15000 octets or 120000 bits. This limit is to allow an entire BUFR message to be contained within memory of most computers for decoding. It is also a limit set by the capabilities of the Global Telecommunications System (GTS) of the WMO. The BLOK feature, described elsewhere, can be used to break very long BUFR messages into parts, if necessary.
Figure 1-1 is an example of a complete BUFR message containing 52 octets. This particular message contains 1 temperature observation of 295.2 degrees K from WMO block/station 72491. Figures 1-2 through 1-7 illustrate decoding of the individual sections. The spaces between octets in Figures 1-2 through 1-7 were added to improve readability.
end of section 0 --+ ¦ 010000100101010101000110010100100000000000000000001101000000001000000000000000 000001001000000000000000000011100000000000000000000000001000000000000000100000 end of section 1 --+ ¦ 000101011101000001000001110100001100000000000000000000000000000000000000111000 000000000000000000000110000000000000010000000100000001000000100000110000000100 +-- end of section 3 end of section 4 --+ ¦ ¦ 000000000100000000000000000010000000000010010000111101011101110001000000001101 end of section 5 --+ ¦ 11001101110011011100110111
Figure 1-1. Example of a complete BUFR message containing 52 octets
1.2.1 Section 0 - Indicator section.
C O N T I N U O U S B I N A R Y S T R E A M |
|||||
SECTION 0 |
section 1 |
Section 2 |
section 3 |
section 4 |
section 5 |
Octet No. |
contents |
1 - 4 |
"BUFR" (coded according to the CCITT International Alphabet No. 5) |
5 - 7 |
Total length of BUFR message, in octets (including Section 0) |
8 |
BUFR edition number (currently 2) |
The earlier editions of BUFR did not include the total message length in octets 5-7. Thus, in decoding BUFR Edition 0 and 1 messages, there was no way of determining the entire length of the message without scanning ahead to find the individual lengths of each of the sections. Edition 2 eliminates this problem by including the total message length right up front. By design, in BUFR Edition 2, octet 8, containing the BUFR Edition number, is in the same octet position relative to the start of the message as it was in Editions 0 and 1. By keeping the relative position fixed, a decoder program can determine, at the outset, which BUFR version was used for a particular message and then behave accordingly. This means, for example, that archives of old (pre-Edition 2) records need not be updated.
OCTET NO. 1 2 3 4 5 6 7 8 BINARY 01000010 01010101 01000110 01010010 00000000 00000000 00110100 00000010 HEXADECIMAL 4 2 5 5 4 6 5 2 0 0 0 0 3 4 0 2 DECODED B U F R 52 2 ¦ ¦ ¦ ¦ ¦ ¦ length of message in octets ----+ ¦ ¦ BUFR Edition ----+
Figure 1-2
. Section 01.2.2 Section 1 - Identification Section.
C O N T I N U O U S B I N A R Y S T R E A M |
||||||
section 0 |
SECTION 1 |
section 2 |
Section 3 |
Section 4 |
Section 5 |
|
Octet No. |
Contents |
|||||
1 - 3 |
Length of section, in octets |
|||||
4 |
BUFR master table (zero if standard WMO FM 94 BUFR tables are used - provides for BUFR to be used to represent data from other disciplines, and with their own versions of master tables and local tables) |
|||||
5 - 6 |
Originating centre: code table 0 01 031 |
|||||
7 |
Update sequence number (zero for original BUFR messages; incremented for updates) |
|||||
8 |
Bit 1 = 0 No optional section |
|||||
|
= 1 Optional section included |
|||||
|
Bits 2 - 8 set to zero (reserved) |
|||||
9 |
Data Category type (BUFR Table A) |
|||||
10 |
Data Category sub-type (defined by local ADP centres) |
|||||
11 |
Version number of master tables used (currently 2 for WMO FM 94 BUFR tables) |
|||||
12 |
Version number of local tables used to augment the master table in use |
|||||
13 |
Year of century |
|||||
14 |
Month |
|||||
15 |
Day |
|||||
16 |
Hour |
|||||
17 |
Minute |
|||||
18 - |
Reserved for local use by ADP centres |
OCTET NO. 1 2 3 4 5 6 7 8 BINARY 00000000 00000000 00010010 00000000 00000000 00111010 00000000 00000000 ¦ HEXADECIMAL 0 0 0 0 1 2 0 0 0 0 3 A 0 0 ¦ DECODED 18 0 58 ¦ length of section -----+ ¦ ¦ ¦ standard BUFR tables -----+ ¦ ¦ originating center (US Navy - FNOC) -----+ ¦ flag indicating Section 2 not included -----+ OCTET NO. 9 10 11 12 13 14 15 16 BINARY 00000010 00000000 00000010 00000001 01011110 00000100 00011101 00001100 HEXADECIMAL 0 2 0 0 0 2 0 1 5 E 0 4 1 D 0 C DECODED 2 0 2 1 94 4 29 12 data category --+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ data category sub-type ---+ ¦ ¦ ¦ ¦ ¦ ¦ version of master tables ---+ ¦ ¦ ¦ ¦ ¦ version of local tables ---+ ¦ ¦ ¦ ¦ year of century ---+ ¦ ¦ ¦ month ---+ ¦ ¦ day ---+ ¦ hour ---+ OCTET NO. 17 18 BINARY 00000000 00000000 HEXADECIMAL 0 0 0 0 DECODED 0 0 ¦ ¦ minute ---+ ¦ local use ---+
Figure 1-3. Section 1
The length of section 1 can vary between BUFR messages. Beginning with Octet 18, a data processing center may add any type of information as they choose. A decoding program may not know what that information may be. Knowing what the length of the section is, as indicated in octets 1-3, a decoder program can skip over the information that begins at octet 18 and position itself at the next section, either section 2, if included, or section 3. Bit 1 of octet 8 indicates if section 2 is included. If there is no information beginning at octet 18, one octet must still be included (set to 0) in order to have an even number of octets within the section.
1.2.3 Section 2 - Optional Section.
C O N T I N U O U S B I N A R Y S T R E A M |
|||||
section 0 |
section 1 |
SECTION 2 |
section 3 |
section 4 |
section 5 |
Octet No. |
Contents |
1 - 3 |
Length of section, in octets |
4 |
set to zero (reserved) |
5 - |
Reserved for use by ADP centres |
Section 2 may or may not be included in any BUFR message. When it is contained within a BUFR message, bit 1 of octet 8, Section 1, is set to 1. If Section 2 is not included in a message then bit 1 of octet 8, Section 1 is set to 0. Section 2 may be used for any purpose by an originating center. The only restrictions on the use of Section 2 are that octets 1 - 3 are set to the length of the section, octet 4 is set to zero and the total length of the section contains an even number of octets.
A typical use of this optional section could be in a data base context. The section might contain pointers into the data section of the message, pointers which indicate the relative location of the start of individual sets of observations (one station's worth, for example) in the data. There could also be some sort of index term included, such as the WMO block and station number. This would make it quite easy to find a particular observation quickly and avoid decoding the whole message just to find one or two specific data elements.
1.2.4 Section 3 - Data description section.
C O N T I N U O U S B I N A R Y S T R E A M |
|||||
section 0 |
section 1 |
section 2 |
SECTION 3 |
section 4 |
section 5 |
Octet No. |
Contents |
1 - 3 |
Length of section, in octets |
4 |
set to zero (reserved) |
5 - 6 |
number of data subsets |
7 |
Bit 1 = 1 observed data |
|
= 0 other data |
|
Bit 2 = 1 compressed data |
|
= 0 non-compressed data |
|
Bit 3 - 8 set to zero (reserved) |
8 - |
A collection of descriptors which define the form and content of individual data elements comprising one data subset in the data section. |
If octets 5-6 indicate that there is more than one data subset in the message, with the total number of the subsets given in those octets, then multiple sets of observations, all with the same format (as described by the data descriptors) will be found in Section 4. This is, for example, a means of building "collectives" of observations. Doing so realizes a large portion of the potential of efficiency in BUFR.
In the flag bits of octet 7, "observed data" is taken to mean just that; "other data", is by custom, if not explicit statement, presumed to be forecast information, or possibly some form of "observation", indirectly derived from "true" observations. The nature of "data compression" will be described in Chapter 4.
OCTET NO. 1 2 3 4 5 6 7 BINARY 00000000 00000000 00001110 00000000 00000000 00000001 10000000 ¦¦ HEXADECIMAL 0 0 0 0 0 E 0 0 0 0 0 1 ¦¦ ¦¦ DECODED 14 0 0 1 ¦¦ ¦ ¦ ¦ ¦¦ length of section ---+ ¦ ¦ ¦¦ reserved ---+ ¦ ¦¦ number of data subsets ---+ ¦¦ flag indicating observed data ---+¦ flag indicating non-compressed data ----+ OCTET NO. 8 9 10 11 12 13 14 BINARY 00000001 00000001 00000001 00000010 00001100 00000100 00000000 HEXADECIMAL 0 1 0 1 0 1 0 2 0 C 0 4 0 0 DECODED 0 01 001 0 01 002 0 12 004 0 ¦ ¦ ¦ ¦ descriptors in F X Y ----------------------------------------+ ¦ format (Chapter 2) ¦ ¦ needed to complete section with ----+ an even number of octets
Figure 1-4.
Section 3
1.2.5 Section 4 - Data Section.
C O N T I N U O U S B I N A R Y S T R E A M |
|||||
section 0 |
section 1 |
section 2 |
section 3 |
SECTION 4 |
section 5 |
Octet No. |
Contents |
1 - 3 |
Length of section, in octets |
4 |
set to zero (reserved) |
5 |
Binary data as defined by descriptors which begin at octet 8, Section 3. |
OCTET NO. 1 2 3 4 5 6 7 8 BINARY 01000000 00000000 00001000 00000000 10010000 11110101 11011100 01000000 ¦ ¦ HEXADECIMAL 0 0 0 0 0 8 0 0 +---------------------------------+ ¦ DECODED 8 0 data as described by descriptors ¦ ¦ in Section 3 (Figure 1-6) length of section ----+ ¦ reserved ----+
Figure 1-5. Section 4
OCTET NO. 5 6 7 8 BINARY 1 0 0 1 0 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 0 1 0 0 0 0 0 0 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ HEXADECIMAL +---- 48 ---+ +------- 1EB -------+ +---------- B88 -------+ +---+ ¦ DECODED 72 491 2952 ¦ 3 bits of zero to end octet --+
Figure 1-6.
Section 4 data as described by descriptors1.2.6 Section 5 - End Section.
C O N T I N U O U S B I N A R Y S T R E A M |
|||||
Section 0 |
section 1 |
section 2 |
section 3 |
section 4 |
SECTION 5 |
Octet No. |
Contents |
1 - 4 |
"7777" (coded according to the CCITT International Alphabet No. 5) |
|
OCTET NO. 1 2 3 4 |
|
BINARY 00110111 00110111 00110111 00110111 |
|
HEXADECIMAL 3 7 3 7 3 7 3 7 |
|
DECODED 7 7 7 7 |
Figure 1-7. Section 5
1.2.7 Required Entries. In any BUFR message there will be a minimum number of bits to represent even the smallest amount of data.
C O N T I N U O U S B I N A R Y S T R E A M |
|||||
section 0 64 bits |
section 1 144 bits |
section 2 (optional) |
section 3 80 bits |
section 4 48 bits |
section 5 32 bits |
368 bits
The required entries for each section are:
Section 0 - octets 1 - 8
Section 1 - octets 1 - 18
Section 2 - optional, but if included, octets 1 - 4 are required with any information to begin in octet 5.
Section 3 - octets 1 - 7 The data descriptors begin in octet 8. A single data descriptor occupies 16 bits, or 2 octets. Since the section must contain an even number of octets, there will be a minimum of 10 octets in the section 3. Section 3 will always conclude with 8 bits set to zero since all descriptors are 16 bits in length and the first descriptor begins in octet 8.
Section 4 - octets 1 - 4 The data begins in octet 5.
Since the section must contain an even number of octets there must be at least 2 octets after octet 4.
Section 5 - octets 1 - 4
Figure 1-8 is the same BUFR message as in Figures 1-1 to 1-7. The bold areas in Figure 1-8 are those octets which are required in any BUFR message. Not included in the bold areas are descriptors contained in octets 8 - 14 of Section 3 and the data in Octets 5 - 8 of section 4.
end of section 0 ---+ 01000010010101010100011001010010000000000000000000110100000000100 00000000000000000010010000000000000000000111000000000000000000000 00001000000000000000100000000101011101000001000001110100001100000 +-- end of section 1 00000000000000000000000000000000011100000000000000000000000011000 end of section 3 --+ 00000000000100000001000000010000001000001100000001000000000001000 ¦ 8 9 10 11 12 13 14 ¦ +---------------------- octets ------------------------+ end of section 4 --+ 00000000000000010000000000010010000111101011101110001000000001101 ¦ 5 6 7 8 ¦ +---------- octets ------------+ end of section 5 --+ 11001101110011011100110111
Figure 1-8. Required entries in sample BUFR message
1.2.8 BUFR and Data Management. Sections 3 and 4 of BUFR contain all of the information necessary for defining and representing data. The remaining sections are defined and included purely as aids to data management. Key information within these sections is available from fixed locations relative to the start of each section. It is thus possible to categorize and classify the main attributes of BUFR data without decoding the data description in Section 3, and the data in Section 4.
BUFR Tables
2.1 Introduction. BUFR employs 3 types of tables: BUFR tables, code tables and flag tables.
The tables in BUFR that contain information to describe, classify and define the contents of a BUFR message are called BUFR tables. There are 4 tables defined: Tables A, B, C and D.
2.2 TABLE A - Data Category. Table A is referred to in Section 1 and provides a quick check for the type of data represented in the message. Of the 256 possible entries for Table A, 17 are currently defined:
Table 2-1. BUFR TABLE A - DATA CATEGORY
Code |
|
Figure |
Meaning |
0 |
Surface data - land |
1 |
Surface data - sea |
2 |
Vertical soundings (other than satellite) |
3 |
Vertical soundings (satellite) |
4 |
Single level upper-air data (other than satellite) |
5 |
Single level upper-air data (satellite) |
6 |
Radar data |
7 |
Synoptic data |
8 |
Physical/chemical constituents |
9 |
Dispersal and transport |
10 |
Radiological data |
11 |
BUFR tables, complete replacement or update |
12 |
Surface data (satellite) |
13-19 |
Reserved |
20 |
Status information |
21 |
Radiances |
22-30 |
Reserved |
31 |
Oceanographic data |
32-100 |
Reserved |
101 |
Image data |
102-255 |
Reserved |
The setting of one of the code figures for Table A (Table 2-1) in octet 9 of Section 1 is actually redundant. The descriptors used in Section 3 of a message define the data in Section 4, regardless of the Table A code figure. Decoding programs may well reference Table A, finding it useful to have a general classification of the data available prior to actually decoding the information and passing it on to some subsequent application program.
2.3 TABLE B - Classification of Elements. Table B is referenced in Section 3 of a BUFR message and contains descriptions of parameters encoded in Section 4. Table B entries, as described in the WMO Manual On Codes, Volume 1, Part B, consist of 6 entities:
a descriptor consisting of the 3 parts F, X and Y
element name
units: basic (SI) units for the element
scale: factor (equal to 10 to the power [scale]) by which the element has been multiplied prior to encoding
reference value: a number to be subtracted from the element, after scaling, (if any), and prior to encoding
data width, in bits, the element requires for representation in Section 4
A Table B descriptor consists of 16 bits (2 octets) divided into 3 parts, F, X and Y.
+---------------------------+ ¦ ¦ ¦ ¦ ¦ F ¦ X ¦ Y ¦ ¦ ¦ ¦ ¦ ¦ 2 bits ¦ 6 bits ¦ 8 bits ¦ +---------------------------+
F (2 bits) indicates the type of descriptor. In 2 bits there are 4 possibilities, 0, 1, 2 and 3. The numeric value of the 2 bit quantity F, indicates the type of descriptor.
F = 0 Element descriptor (Table B entry)
F = 1 Replication operator
F = 2 Operator descriptor (Table C entry)
F = 3 Sequence descriptor (Table D entry)
X (6 bits) indicates the class or category of descriptor. There are 64 possibilities, classes 00 to 63. Thus far, 28 classes have been defined.
Y (8 bits) indicates the entry within an X class. 8 bits will yield 256 possibilities within each of the 64 classes. There are a varying number of entries within each of the 28 classes that are currently defined.
It is the F X Y descriptors in Section 3 that refer to data represented in Section 4. The 16 bits of F, X and Y are not to be treated as a 16 bit numeric value, but rather as 16 bits divided into 3 parts, where each part (F, X and Y) are in themselves 2, 6 and 8 bit numeric values. Some examples of descriptors with their corresponding bit settings:
Descriptor F X Y 0 01 001 00 000001 00000001 (Figure 1-4) 1 02 006 01 000010 00000110 2 01 131 10 000001 10000011 3 07 002 11 000111 00000010 If the following descriptors were contained in Section 3: 0 01 001 0 01 002 0 02 001 0 04 001 0 04 002 0 04 003 0 04 004 0 04 005 0 05 002 0 06 002 these descriptors would refer to the following extracts from BUFR Table B: Table Element Units Scale Reference Data Width Reference Name Value (Bits) F X Y 0 01 001 WMO block number numeric 0 0 7 0 01 002 WMO station number numeric 0 0 10 0 02 001 Type of station code table 0 0 2 0 04 001 Year Year 0 0 12 0 04 002 Month Month 0 0 4 0 04 003 Day Day 0 0 6 0 04 004 Hour Hour 0 0 5 0 04 005 Minute Minute 0 0 6 0 05 002 Latitude Degree 2 -9000 15 (coarse accuracy) 0 06 002 Longitude Degree 2 -18000 16 (coarse accuracy)
The element name is a plain language description of the element entry of the table.
The units of Table B entries refer to the format of how the data in Section 4 is represented. The data may be numeric as in the case of a WMO block number, character data as in the case of an aircraft identifier. When data is in character form, the character representation is always according to the CCITT International Alphabet No. 5. The units may also refer to a code or flag table, where the code or flag table is described in the WMO Manual On Codes using as the code or flag table number the same number as the F X Y descriptor. Other units are in Standard International (SI) units, such as meters or degrees Kelvin.
The scale refers to the power of 10 that the element in Section 4 has been multiplied by in order to retain the desired precision in the transmitted data. For example, the units of latitude are whole degrees in Table B. But this is not precise enough for most usages, therefore the elements are to be multiplied by 100 (102) so that the transmitted precision will be centidegrees, a more useful precision. On the other hand, the (SI) unit of pressure in Table B is Pascals, a rather small unit that would result in unnecessarily precise numbers being transmitted. The BUFR Table B calls for pressure to be divided by 10 (10-1) resulting in a transmitted unit of 10ths of hPa, or tenths of millibars, a more reasonable precision for meteorological usage. These precisions can be changed on the fly, so to speak, if the table values are not appropriate in special cases. This is done through the use of "operator descriptors" - see below, 2.4 Table C.
The reference value is a value that is to be subtracted from the data after multiplication by the scale factor, if any, before encoding into Section 4 in order to produce, in all cases, a positive value. In the case of latitude and longitude, south latitude and west longitude are negative before applying the reference value. If, for example, a position of 35.50 degrees south latitude were being encoded, multiplying -35.50 by 100 (scale of 2) would produce -3550. Subtracting the reference value -9000 would give 5450 that would be encoded in Section 4. To obtain the original value in decoding Section 4, adding back the -9000 reference value to 5450 would result in -3550, then dividing by the scale (100) would obtain -35.50.
The data width of Table B entries is a count of how many bits the largest possible value of an individual data item of Section 4 occupies.
In those instances where a Table B descriptor defines an element of data in Section 4, where that element is missing for a given subset, then all bits for that element will be set to 1's in Section 4.
Obviously, without an up-to-date Table B, a decoder program would not be able to determine the form or content of data appearing in Section 4.
2.3.1 Data Replication. A special descriptor called the replication operator (F = 1) is used to define a range of subsequent descriptors, together with a replication factor. This enables the appropriate descriptors to be considered to be repeated a number of times. In general for data replication, X indicates the number of immediately following descriptors that are to be replicated as a repeated set, and Y indicates the total number of replications. This, of course, implies, that the same pattern will be found in Section 4, the data section. This ability to describe a repeated pattern in the data by a single set of descriptors contributes to the efficiency of BUFR.
As an example, imagine the following sequence appears in Section 3:
1 02 006 0 07 004 0 01 003
the meaning of 1 02 006 is that the next 2 descriptors are repeated 6 times, or the equivalent set of descriptors:
0 07 004 0 01 003 0 07 004 0 01 003 0 07 004 0 01 003
0 07 004 0 01 003 0 07 004 0 01 003 0 07 004 0 01 003
A special form of the replication operator allows the replication factor to be stored with the data in Section 4, rather than with the descriptor in Section 3. This special form is called delayed replication. It is indicated by Y = 0. It allows the data to be described in a general way, with the number of replications being different from subset to subset. Since the data now contains an additional data element, the actual replication count, a descriptor must be added to Section 3 to account for, and describe, this (special) data element. The appropriate descriptor is found in Class 31. Special note: the 0 31 YYY (delayed replication factor) descriptor follows immediately after the 1 X 000 (delayed replication) descriptor but is NOT included in the count (X) of the following descriptors to be replicated.
Another form of delayed replication enables both the data description and the corresponding data item or items to be repeated. Entries in Class 31 of Table B are used in association with the delayed replication operator to enable this to be done.
2.4 Table C - Data Description Operators. Table C data description operators (Chapter 5) are used when there is a need to redefine Table B attributes temporarily, such as the need to change data width, scale or reference value of a Table B entry. Table C is also used to add associated fields such as quality control information, indicate characters as data items, and signify data width of local descriptors.
SECTION 4 WIDTH IN BITS 0 54 192------------------------------------ LOCAL DESCRIPTOR ---------- 3 + 0 01 001 --- WMO BLOCK NO. ------------- 7 +3 01 001 --- 0 01 002 --- WMO STATION NO. ----------- 10 ¦ ¦0 02 001 ---------------- TYPE OF STATION ----------- 2 ¦ +3 01 032-¦ + 0 04 001 --- YEAR ---------------------- 12 ¦ ¦3 01 011 --¦ 0 04 002 --- MONTH --------------------- 4 ¦ ¦ + 0 04 003 --- DAY ----------------------- 6 ¦ ¦ ¦ ¦ + 0 04 004 --- HOUR ---------------------- 5 ¦ ¦3 01 012 --- 0 04 005 --- MINUTE -------------------- 6 ¦ ¦ ¦ ¦ + 0 05 002 --- LATITUDE (COARSE ACCURACY) 15 ¦ +3 01 024 --¦ 0 06 002 --- LONGITUDE(COARSE ACCURACY) 16 ¦ + 0 07 001 --- HEIGHT OF STATION --------- 15 ¦ ¦ + 0 10 004 --- PRESSURE ------------------ 14 3 07 002¦ +3 02 001 --¦ 0 10 051 --- PRESSURE REDUCED TO MSL --- 14 ¦ ¦ ¦ 0 10 061 --- 3 HR PRESSURE CHANGE ------ 10 ¦ ¦ + 0 10 063 --- CHARACTERISTIC OF PRESSURE 4 ¦ ¦ + 0 11 011 --- WIND DIRECTION ------------ 9 ¦ ¦ ¦ 0 11 012 --- WIND SPEED AT 10m --------- 12 ¦ ¦ ¦ 0 12 004 --- DRY BULB TEMP AT 2m ------- 12 ¦ ¦ ¦ 0 12 006 --- DEW POINT TEMP AT 2m ------ 12 ¦ ¦3 02 003 --¦ 0 13 003 --- RELATIVE HUMIDITY --------- 7 ¦ ¦ ¦ 0 20 001 --- HORIZONTAL VISIBILITY ----- 13 ¦ ¦ ¦ 0 20 003 --- PRESENT WEATHER ----------- 8 ¦ ¦ ¦ 0 20 004 --- PAST WEATHER (1) ---------- 4 ¦ ¦ + 0 20 005 --- PAST WEATHER (2) ---------- 4 ¦ ¦ +3 02 011-¦ + 0 20 010 --- CLOUD COVER (TOTAL) ------- 7 ¦ ¦ 0 08 002 --- VERTICAL SIGNIFICANCE ¦ ¦ SURFACE OBS --------------- 6 ¦ ¦ 0 20 011 --- CLOUD AMOUNT -------------- 4 +3 02 004 --¦ 0 20 013 --- HEIGHT OF BASE OF CLOUD --- 11 ¦ 0 20 012 --- CLOUD TYPE Cl ------------- 6 ¦ 0 20 012 --- CLOUD TYPE Cm ------------- 6 + 0 20 012 --- CLOUD TYPE Ch ------------- 6 --- TOTAL BITS 270
2.5 Table D - Lists of Common Sequences. Table D contains descriptors which describe additional descriptors. A single descriptor used in Section 3 with F = 3 is a pointer to a Table D entry which contains other descriptors. If the Table D descriptor 3 01 001 were used in Section 3, the expansion of that descriptor is two Table B descriptors, 0 01 001 and 0 01 002.
+ 0 01 001 ---WMO block number 3 01 001-----¦ + 0 01 002 ---WMO station number Table D descriptors may also refer to an expansion list of descriptors that contain additional Table D descriptors. The descriptor 3 01 025 expands to 3 01 023, 0 04 003 and 3 01 012. In the expansion, 3 01 023 additionally expands to 0 05 002 and 0 06 002. The remaining descriptor 3 01 012 expands to 0 04 004 and 0 04 005. Thus, the single Table D descriptor 3 01 025 expands to a total of 5 separate Table B entries. + 0 05 002 ---Latitude + 3 01 023----¦ ¦ + 0 06 002 ---Longitude ¦ ¦ 3 01 025-----¦ 0 04 003------------------Day ¦ ¦ ¦ ¦ + 0 04 004 ---Hour + 3 01 012----¦ + 0 04 005 ---Minute The order of the data in Section 4 is then according to the following sequence of Table B entries: 0 05 002 0 06 002 0 04 003 0 04 004 0 04 005. There are currently defined 19 categories of common sequences in Table D (Table 2-2). Table 2-2. BUFR Table D list of common sequences F X CATEGORY OF SEQUENCES 3 00 BUFR table entries sequences 3 01 Location and identification sequences 3 02 Meteorological sequences common to surface data 3 03 Meteorological sequences common to vertical sounding data 3 04 Meteorological sequences common to satellite observations 3 05 Reserved 3 06 Meteorological or oceanographic sequences common to oceanographic observations 3 07 Surface report sequences (land) 3 08 Surface report sequences (sea) 3 09 Vertical sounding sequences (conventional data) 3 10 Vertical sounding sequences (satellite data) 3 11 Single level report sequences (conventional data) 3 12 Single level report sequences (satellite data) 3 13 Sequences common to image data 3 14 Reserved 3 15 Oceanographic report sequences 3 16 Synoptic feature sequences 3 18 Radiological report sequences 3 21 Radar report sequences
Any BUFR message may be encoded without using Table D. The data description contained within Section 3 can be accomplished entirely by using only element descriptors of Table B and operator descriptors of Table C. To do so, however would involve considerable overhead in terms of the length of the Section 3 data description. The use of Table D is another major contributor to the efficiency of BUFR.
2.6 Message Layout. Figure 2-1 illustrates how the single descriptor 3 07 002 expands into 2 more Table D descriptors, 3 01 032 and 3 02 011. The descriptor 3 01 032 further expands into 5 more descriptors 3 01 001, 0 02 001, 3 01 011, 3 01 012 and 3 01 024. As is shown in Figure 2-1, descriptors in Table D may themselves refer to Table D, provided no circularity results on repeated expansion. Completion of the expansion process leads to a total of 31 Table B descriptors. The 16 bits in Section 3 taken by the descriptor 3 07 002 results in a savings of 480 bits (30 x 16 bits) over what the 31 Table B descriptors would occupy in bits.
Table D has been limited to lists of descriptors likely to be most frequently used. Table D was not designed to be comprehensive of all sequences likely to be encountered. To do so would require an excessively large Table D and would reduce considerably flexibility when encoding minor differences in reporting practices. More flexibility is retained if the Data Description Section contains several descriptors.
A complete layout of a BUFR message containing just 1 surface observation is illustrated in Figure 2-2. As indicated in octets 5-7 of Section 1, there are a total of 78 octets in the message, or 624 bits. Of the 624 bits, 267 are for the actual parameters of data (Figure 2-1) and the remaining 357 bits are BUFR overhead. BUFR overhead in this context is the number of bits that are not actual surface data. In this example there are more bits used for the overhead than for the surface data.
Figure 2-3 is a complete layout of a BUFR message containing the maximum number of 448 subsets to fit within the 15000 octet limit. This message would contain 14996 octets or 119968 bits. Of these 119968 bits, 119616 are data and 352 bits are BUFR overhead. The 5 bit difference in overhead from Figure 2-2 (357 bits) and Figure 2-3 (352 bits) is due to the number of bits set to 0 at the end of Section 4 in order to complete the section at the end of an even numbered octet. For 1 subset of 267 bits, 5 additional bits are needed to complete the octet. For 448 subsets, or 119616 bits, no additional bits are needed to complete the last octet.
2.6.1 Comparison of BUFR and Character Code Bit Counts. The surface observations illustrated in Figures 2-1 to 2-3 are the equivalent of the following parameters in the WMO code form FM 12-IX Ext. SYNOP:
YYGGiw IIiii iRixhVV Nddff 1snTTT 2snTdTdTd 3PoPoPoPo
4PPPP 5appp 7wwW1W2 8NhCLCMCH
Data encoded in this form would consist of 55 characters plus 10 spaces between each group of 5 characters for a total of 65 characters. For transmission purposes these 65 characters would require a total number of 520 bits (65 X 8 bits per character). A complete BUFR message with 1 observation (Figure 2-2) requires 78 octets or 624 bits, 104 more than the corresponding character representation. Of these 624 bits, 267 are taken by the surface observation and 357 as BUFR overhead. If, however, 448 observations in character form were transmitted, the total number of bits would be 232960 (520 X 448). The corresponding BUFR representation (Figure 2-3) would require 14996 octets, or 119968 bits, a savings of 112992 bits over the character representation. The 112992 bits is equivalent to 217 observations in character form or 423 observations in BUFR, not counting the BUFR overhead. While these numbers may be viewed in different ways, the real significance is that BUFR is far more efficient, in terms of number of bits to represent a meteorological observation, than character forms.
SECTION 4 WIDTH IN BITS +0 01 001---WMO BLOCK NO.------------------ 7 +3 01 001--0 01 002---WMO STATION NO.---------------- 10 ¦ ¦0 02 001-------------TYPE OF STATION---------------- 2 ¦ +3 01 032-¦ +0 04 001---YEAR--------------------------- 12 ¦ ¦3 01 011-¦0 04 002---MONTH-------------------------- 4 ¦ ¦ +0 04 003---DAY---------------------------- 6 ¦ ¦ +0 04 004---HOUR--------------------------- 5 ¦ ¦3 01 012--0 04 005---MINUTE------------------------- 6 ¦ ¦ ¦ ¦ +0 05 002---LATITUDE (COURSE ACCURACY)----- 15 ¦ +3 01 024-¦0 06 002---LONGITUDE (COURSE ACCURACY)---- 16 ¦ +0 07 001---HEIGHT OF STATION-------------- 15 ¦ ¦ +0 10 004---PRESSURE----------------------- 14 3 07 002-¦ +3 02 001-¦0 10 051---PRESSURE REDUCED TO MSL-------- 14 ¦ ¦ ¦0 10 061---3 HR PRESSURE CHANGE----------- 10 ¦ ¦ +0 10 063---CHARACTERISTIC OF PRESSURE----- 4 ¦ ¦ ¦ ¦ +0 11 011 WIND DIRECTION----------------- 9 ¦ ¦ ¦0 11 012 WIND SPEED AT 10m-------------- 12 ¦ ¦ ¦0 12 004 DRY BULB AT 2m----------------- 12 ¦ ¦ ¦0 12 006 DEW POINT TEMP AT 2m----------- 12 ¦ ¦3 02 003-¦0 13 003 RELATIVE HUMIDITY-------------- 7 ¦ ¦ ¦0 20 001 HORIZONTAL VISIBILITY---------- 13 ¦ ¦ ¦0 20 003 PRESENT WEATHER---------------- 8 ¦ ¦ ¦0 20 004 PAST WEATHER (1)--------------- 4 ¦ ¦ +0 20 005 PAST WEATHER (2)--------------- 4 +3 02 011 ¦ +0 20 010 CLOUD COVER (TOTAL)------------ 7 ¦ ¦0 08 002 VERTICAL SIGNIFICANCE ¦ ¦ SURFACE OBS-------------------- 6 ¦ ¦0 20 011 CLOUD AMOUNT------------------- 4 +3 02 004-¦0 20 013 HEIGHT OF BASE OF CLOUD-------- 11 ¦0 20 012 CLOUD TYPE C1------------------ 6 ¦0 20 012 CLOUD TYPE Cm------------------ 6 +0 20 012 CLOUD TYPE Ch------------------ 6 ---- TOTAL BITS 267
Figure 2-1. Example of surface observations sequence using Table D descriptor 3 07 002
|
Section |
Octet in Message |
Encoded Value |
Description |
Section 0 (indicator section) |
1-4 |
1-4 |
BUFR |
encoded international CCITT |
|
|
|
Alphabet No. 5 |
|
5-7 |
5-7 |
78 |
total length of message (octets) |
|
8 |
8 |
2 |
BUFR edition number |
|
Section 1 (identification section) |
1-3 |
9-11 |
18 |
length of section (octets) |
4 |
12 |
0 |
BUFR master table |
|
5-6 |
13-14 |
58 |
originating center (U.S. Navy - FNOC) |
|
7 |
15 |
0 |
update sequence number |
|
8 |
16 |
0 |
indicator that Section 2 not included |
|
9 |
17 |
0 |
Table A - surface land data |
|
10 |
18 |
0 |
BUFR message sub-type |
|
11 |
19 |
2 |
version number of master tables |
|
12 |
20 |
0 |
version number of local tables |
|
13 |
21 |
92 |
year of century |
|
14 |
22 |
4 |
month |
|
15 |
23 |
18 |
day |
|
16 |
24 |
0 |
hour |
|
17 |
25 |
0 |
minute |
|
18 |
26 |
0 |
reserved for local use by ADP centers (also needed to complete even number of octets for section |
|
Section 3 (Data description section) |
1-3 |
27-29 |
10 |
length of section (octets) |
30 |
0 |
reserved |
|
|
5-6 |
31-32 |
1 |
number of data subsets |
|
7 |
33 |
bit 1=1 |
flag indicating observed data |
|
8-9 |
34-35 |
3 07 002 |
Table D descriptor for surface land in F X Y format |
|
10 |
36 |
0 |
need to complete section with an even number of octets |
|
Section 4 (Data section) |
1-3 |
37-39 |
38 |
length of section (octets) |
4 |
40 |
0 |
reserved |
|
5-38 |
41-74 |
data |
continuous bit stream of data for 1 observations, 267 bits plus 5 bits to end on even octet (see Figure 2-1 for expansion) |
|
Section 5 (End section) |
1-4 |
75-78 |
7777 |
encoded CCITT International Alphabet No. 5 |
Figure 2-2. BUFR message of 1 surface observation using Table D descriptor 3 07 002
|
Section Octet No. |
Octet in Message |
Encoded Value |
Description |
Section 0 (Indicator section) |
1-4 |
1-4 |
BUFR |
encoded international CCITT section)Alphabet No. 5 |
5-7 |
5-7 |
14996 |
total length of message (octets) |
|
8 |
8 |
2 |
BUFR edition number |
|
|
|
|
|
|
Section 1 (identification section) |
1-3 |
9-11 |
18 |
length of section (octets) |
4 |
12 |
0 |
BUFR master table |
|
5-6 |
13-14 |
58 |
originating center (U.S. Navy - FNOC) |
|
7 |
15 |
0 |
update sequence number |
|
8 |
16 |
0 |
indicator that Section 2 not included |
|
9 |
17 |
0 |
Table A - surface land data |
|
10 |
18 |
0 |
BUFR message sub-type |
|
11 |
19 |
2 |
version number of master table |
|
12 |
20 |
0 |
version number of local tables |
|
13 |
21 |
92 |
year of century |
|
14 |
22 |
4 |
month |
|
15 |
23 |
18 |
day |
|
16 |
24 |
0 |
hour |
|
17 |
25 |
0 |
minute |
|
18 |
26 |
0 |
reserved for local use by ADP centers (also needed to complete even number of octets for section |
|
Section 3 (Data Description Section) |
1-3 |
27-29 |
10 |
length of section (octets) |
4 |
30 |
0 |
reserved |
|
5-6 |
31-32 |
448 |
number of data subsets |
|
7 |
33 |
bit 1=1 |
flag indicating observed data |
|
8-9 |
34-35 |
3 07 002 |
Table D descriptor for surface land in F X Y format |
|
10 |
36 |
0 |
need to complete section with an even number of octets |
|
Section 4 (Data section) |
1-3 |
37-39 |
14956 |
length of section (octets) |
4 |
40 |
0 |
reserved |
|
5-14956 |
41-14992 |
data |
continuous bit stream of data for 448 observations, 267 bits per observation with no added bits to end on an even octet |
|
Section 5 (End section) |
1-4 |
14993- |
7777 |
encoded CCITT International Alphabet No. 5 |
Figure 2-3. BUFR message of 448 surface observations using Table D descriptor 3 07 002
2.7 Code Tables and Flag Tables. Since some meteorological parameters are qualitative or semi-qualitative, they are best represented with reference to a code table.
2.7.1 Code Tables. BUFR code tables and flag tables refer to elements defined within BUFR Table B. They are numbered according to the X and Y values of the corresponding Table B reference. For example, the Table B entry 0 01 003, WMO Region number, geographical area, indicates in the Unit column that this is a BUFR code table, the number of that code table being 0 01 003.
Many of the code tables that have been included in the BUFR specification are similar to existing WMO code tables for representing character data. Attachment II of the WMO Manual on Codes, Volume 1, Part B is a list of the code tables associated with BUFR Table B and the existing specifications and code tables of the WMO Manual on Codes, Volume 1, Part A.
There is not a one-to-one BUFR code table relationship to the character code tables. The character Code Table 3333, Quadrant of the Globe, for example, has no meaning in BUFR, as all points on the globe in BUFR are completely expressed as latitude and longitude values.
2.7.2 Flag tables. In a flag table, each bit indicates an item of significance. A bit set to 1 indicates an item is included, or is true, while a bit set to 0 indicates omission, or false. In any flag table, when all bits are set it is an indication of a missing value. Flag tables additionally enable combinations to be identified. In all flag tables within the BUFR specification, bits are numbered from 1 to N from most significant to least significant within a data width of N bits, i.e., from left (bit 1) to right (bit N).
2.7.3 Flags. Flags, without reference to a flag table, are also used within Sections 1 and 3 of a BUFR message. In Section 1, octet 8, if bit 1 = 0 this is an indication that the optional section 2 is not contained within the message. If bit 1 = 1, then Section 2 is included.
Section 1 Section 1 Octet 8 Octet 8 00000000 10000000 ¦ ¦ + Section 2 not included + Section 2 included Similarly, the two flag bits in Section 3, octet 7 have these meanings: Section 3 Section 3 Octet 7 Octet 7 00000000 11000000 ¦¦ ¦¦ ¦+ non-compressed data ¦+ compressed data ¦ ¦ + other data + observed data
2.8 Local Tables. Since a data processing center may need to represent data conforming to a local requirement, and this data is not defined within Table B, specific areas of Table B and D are reserved for local use (Figure 2-4). These areas are defined as entries 192 to 255 inclusive of all classes. Centers defining classes or categories for local use should restrict their use to the range 48 to 63 inclusive.
0 +------------------------------------------------------+ ¦ ¦ ¦ ¦ ¦ For ¦ ¦ For ¦ ¦ International ¦ ¦ Local ¦ ¦ Use ¦ ¦ Use ¦ ¦ ¦ ¦ ¦ 31 +----------------+ +------------¦ ¦ ¦ ¦ ¦ R e s e r v e d ¦ For ¦ ¦ ¦ Local ¦ ¦ F o r ¦ Use ¦ ¦ ¦ (if needed)¦ ¦ F u t u r e U s e ¦ ¦ ¦ ¦ ¦ 48 ¦- - - - - - - - - - - - - - - - - - - - -¦- - - - - - ¦ ¦ ¦ ¦ ¦ ¦ For ¦ ¦ For Local Use (if needed) ¦ Local ¦ ¦ ¦ Use ¦ 63 +------------------------------------------------------+ 0 63 192 255
Figure 2-4. Table reservations
If a data processing center had multiple sources of data receipt, for example, it may be necessary to indicate the source of an observation by the circuit from which the data was received. A local Table B descriptor such as 0 54 192 could be used which may be a code table specifying circuits of transmission. The Table B entry could be:
Table Reference |
Element Name |
Units |
Scale |
Reference Value |
Data Width |
0 54 192 |
Circuit |
Code table |
0 |
0 |
3 |
The corresponding local code table could be:
0 54 192
Circuit designators for data receipt
code figure circuit
0 GTS
1 AWN
2 AUTODIN
3 ANTARCTIC
4-7 Reserved
Using the same Table D descriptor, 3 07 002, as in Figure 2-1, adding the local descriptor 0 54 192 would produce the expansion as in Figure 2-5. The following modifications would have to be made to the BUFR message if the local descriptor 0 54 192 were to be included in a message (Figure 2-6):
Section 0, octets 5-7, the total length of the message, increases from 14996 octets to 14998 octets.
Section 1, octet no. 12 (octet 20 within the message) would have the version number of the local tables in use.
Section 3, octets 1-3, the encoded value would increase from 10 octets to 12 octets. If one descriptor were being added, the length of the section increases by 2 in order to keep the section an even number of octets. Octets 5-6, number of data subsets decreases from 448 to 443. The number of data subsets have been reduced to keep the total message length under the 15000 octet maximum.
Also in Section 3, the descriptors will occupy octets 8-11 vice octets 8-9 to accommodate the added descriptor.
Note that in Section 4, octets 1-3, the encoded value for length of section remains the same at 14956 octets. The number of bits needed for 448 subsets without a local descriptor is 119616 (448 X 267), or exactly 14952 octets. For 443 subsets with 3 bits added to each subset for the local information, 119610 bits are needed (443 X 270). Adding 6 bits to complete the octet brings the total bit count for all 443 subsets to 119616, the same number of bits as 448 subsets without the added local information.
Figure 2-5. Example of surface observations sequence using Table D descriptor 3 07 002 and local descriptor
|
Section Octet No. |
Octet in Message |
Encoded Value |
Description |
Section 0 (indicator section) |
1-4 |
1-4 |
BUFR |
Encoded international CCITT |
|
|
|
Alphabet No. 5 |
|
5-7 |
5-7 |
14998 |
total length of message (octets) |
|
8 |
8 |
2 |
BUFR edition number |
|
Section 1 (identification section) |
1-3 |
9-11 |
18 |
length of section (octets) |
4 |
12 |
0 |
BUFR master table |
|
5-6 |
13-14 |
58 |
originating center (U.S. Navy - FNOC) |
|
7 |
15 |
0 |
update sequence number |
|
8 |
16 |
0 |
indicator that Section 2 not included |
|
9 |
17 |
0 |
Table A - surface land data |
|
10 |
18 |
0 |
BUFR message sub-type |
|
11 |
19 |
2 |
version number of master tables |
|
12 |
20 |
1 |
version number of local tables |
|
13 |
21 |
92 |
year of century |
|
14 |
22 |
4 |
month |
|
15 |
23 |
18 |
day |
|
16 |
24 |
0 |
hour |
|
17 |
25 |
0 |
minute |
|
18 |
26 |
0 |
reserved for local use by ADP centers (also need to complete even number of octets for Section 3 |
|
Section 3 |
1-3 |
27-29 |
12 |
length of section (octets) |
4 |
30 |
0 |
reserved |
|
5-6 |
31-32 |
443 |
number of data subsets |
|
7 |
33 |
BIT 1=1 |
flag indicating observed data |
|
8-11 |
34-37 |
0 54 192 |
local and Table D descriptors |
|
|
|
3 07 002 |
in F X Y format |
|
10 |
38 |
0 |
need to complete section with an even number of octets |
|
Section 4 |
1-3 |
39-41 |
14956 |
length of section (octets) |
4 |
42 |
0 |
reserved |
|
5-14956 |
43-14994 |
data |
continuous bit stream of data for 443 observations, 270 bits per observation plus 6 bits to end on even octet |
|
Section 5 |
1-4 |
14995- |
7777 |
encoded CCITT international Alphabet No. 5 |
Figure 2-6. BUFR message of 443 surface observations using 2 descriptors, local descriptor 0 54 192 and Table B descriptor 3 07 002.
Using Data Replication
3.1 Introduction. When encoding a series of parameters a fixed number of times for all reports represented in Section 4, it may be possible to choose from one of several methods for using Section 3 descriptors.
3.2 Data Replication Examples. If there were 4 elements of cloud information that were described by the Table B descriptors 0 08 002 0 20 011 0 20 012 0 20 013, and these elements were to be repeated 4 times, these 16 total elements of data in Section 4 may be described in the following ways:
1. long and cumbersome method - each element described individually
0 08 002 0 20 011 0 20 012 0 20 013
0 08 002 0 20 011 0 20 012 0 20 013
0 08 002 0 20 011 0 20 012 0 20 013
0 08 002 0 20 011 0 20 012 0 20 013
2. using the replication operator -
1 04 004 0 08 002 0 20 011 0 20 012 0 20 013
The meaning of the descriptor 1 04 004 is that the F portion (1) is indicating this is a replication operator, the X portion (04) means the following 4 descriptors are to be repeated Y (004) times.
3. combine replication operator and Table D descriptor
1 01 004 3 02 005
In this particular example of Table B descriptors there is defined a Table D descriptor 3 02 005 which expands to the 4 descriptors
0 08 002 0 20 011 0 20 012 0 20 013.
The replication operator 1 01 004 followed by 3 02 005 means the data in Section 4, defined by the Table D descriptor 3 02 005, is repeated 4 times.
Using either a replication operator followed by a Table B descriptor or a replication operator followed by a Table D descriptor, if it exists, produces the same definition of data as repeating Table B descriptors. Note, in example 3, that the count of the number of descriptors to be replicated (X, 01) applies to the single Table D descriptor that is actually in the message, and NOT to the set of possibly very many descriptors that the single type 3 descriptor represents.
A special form of the replication operator allows the replication factor to be stored with the data in Section 4, rather than with the descriptor in Section 3. This is particularly useful when describing data such as TEMP or BATHY observations where the number of levels differs from observation to observation. The delayed replication operator is of the form F X Y where F = 1, X indicates how many descriptors are to be replicated, and Y = 000. This operator is to be followed by a Table B descriptor from Class 31. The Class 31 descriptor is not included in the count (X) of the number of following descriptors to be replicated. Thus, if the following sequence of descriptors appeared in Section 3: 1 01 000 0 31 001 0 03 014, the meaning of these descriptors is:
1 01 000 |
F = 1 |
replication operator |
|
X = 01 |
1 descriptor is replicated, not counting, i.e. skipping over, the 0 31 001 descriptor |
|
Y = 000 |
delayed replication |
0 31 001 |
F = 0 |
Table B descriptor |
|
X = 31 |
Class 31 - data description operator qualifiers |
|
Y = 001 |
delayed descriptor replication factor occupying 8 bits in Section 4 (Table B, Class 31 definition) |
3 03 014 |
F = 3 |
Table D descriptor |
|
X = 03 |
Category 03 - meteorological sequences common to vertical sounding data |
|
Y = 014 |
entry 14 of Category 03 |
The Table D descriptor 3 03 014 expands into seven descriptors. The Section 4 data width for the expansion of 3 03 014 is 83 bits.
SECTION 4 WIDTH IN BITS 0 54 192------------------------------------ LOCAL DESCRIPTOR ---------- 3 + 0 01 001 --- WMO BLOCK NO. ------------- 7 +3 01 001 --- 0 01 002 --- WMO STATION NO. ----------- 10 ¦ ¦0 02 001 ---------------- TYPE OF STATION ----------- 2 ¦ +3 01 032-¦ + 0 04 001 --- YEAR ---------------------- 12 ¦ ¦3 01 011 --¦ 0 04 002 --- MONTH --------------------- 4 ¦ ¦ + 0 04 003 --- DAY ----------------------- 6 ¦ ¦ ¦ ¦ + 0 04 004 --- HOUR ---------------------- 5 ¦ ¦3 01 012 --- 0 04 005 --- MINUTE -------------------- 6 ¦ ¦ ¦ ¦ + 0 05 002 --- LATITUDE (COARSE ACCURACY) 15 ¦ +3 01 024 --¦ 0 06 002 --- LONGITUDE(COARSE ACCURACY) 16 ¦ + 0 07 001 --- HEIGHT OF STATION --------- 15 ¦ ¦ + 0 10 004 --- PRESSURE ------------------ 14 3 07 002¦ +3 02 001 --¦ 0 10 051 --- PRESSURE REDUCED TO MSL --- 14 ¦ ¦ ¦ 0 10 061 --- 3 HR PRESSURE CHANGE ------ 10 ¦ ¦ + 0 10 063 --- CHARACTERISTIC OF PRESSURE 4 ¦ ¦ + 0 11 011 --- WIND DIRECTION ------------ 9 ¦ ¦ ¦ 0 11 012 --- WIND SPEED AT 10m --------- 12 ¦ ¦ ¦ 0 12 004 --- DRY BULB TEMP AT 2m ------- 12 ¦ ¦ ¦ 0 12 006 --- DEW POINT TEMP AT 2m ------ 12 ¦ ¦3 02 003 --¦ 0 13 003 --- RELATIVE HUMIDITY --------- 7 ¦ ¦ ¦ 0 20 001 --- HORIZONTAL VISIBILITY ----- 13 ¦ ¦ ¦ 0 20 003 --- PRESENT WEATHER ----------- 8 ¦ ¦ ¦ 0 20 004 --- PAST WEATHER (1) ---------- 4 ¦ ¦ + 0 20 005 --- PAST WEATHER (2) ---------- 4 ¦ ¦ +3 02 011-¦ + 0 20 010 --- CLOUD COVER (TOTAL) ------- 7 ¦ ¦ 0 08 002 --- VERTICAL SIGNIFICANCE ¦ ¦ SURFACE OBS --------------- 6 ¦ ¦ 0 20 011 --- CLOUD AMOUNT -------------- 4 +3 02 004 --¦ 0 20 013 --- HEIGHT OF BASE OF CLOUD --- 11 ¦ 0 20 012 --- CLOUD TYPE Cl ------------- 6 ¦ 0 20 012 --- CLOUD TYPE Cm ------------- 6 + 0 20 012 --- CLOUD TYPE Ch ------------- 6 --- TOTAL BITS 270
For each observation encoded into Section 4 the 8 bits preceding the pressure data indicates how many times the following 7 elements are replicated.
Figure 3-1 is an example of TEMP observations sequence using a single Table D descriptor which expands to include delayed replication. In this example, the replication factor indicates how many levels are contained within the observation. The bit count of 245 bits is for 1 level, each additional level would require 83 bits.
SECTION 4 WIDTH IN BITS + 0 01 001 --- WMO BLOCK NO. ------------- 7 +3 01 001 --+ 0 01 002 --- WMO STATION NO. ----------- 10 ¦ ¦0 02 011----------------- RADIOSONDE TYPE ----------- 8 ¦0 02 012----------------- RADIOSONDE COMP METHOD ---- 4 ¦ +3 01 038-¦ + 0 04 001 --- YEAR ---------------------- 12 ¦ ¦3 01 011---¦ 0 04 002 --- MONTH --------------------- 4 ¦ ¦ + 0 04 003 --- DAY ----------------------- 6 ¦ ¦ ¦ ¦ + 0 04 004 --- HOUR ---------------------- 5 ¦ ¦3 01 012---+ 0 04 005 --- MINUTE -------------------- 6 ¦ ¦ ¦ ¦ + 0 05 002 --- LATITUDE (COARSE ACCURACY) 15 ¦ +3 01 024---¦ 0 06 002 --- LONGITUDE(COARSE ACCURACY) 16 ¦ + 0 07 001 --- HEIGHT OF STATION --------- 15 ¦ ¦ +0 20 010----------------- CLOUD COVER (TOTAL) ------- 7 3 09008¦ ¦0 08 002----------------- VERTICAL SIGNIFICANCE ----- 6 ¦ ¦0 20 011----------------- CLOUD AMOUNT -------------- 4 ¦3 02 004-¦0 20 013----------------- HEIGHT OF BASE OF CLOUD --- 11 ¦ ¦0 20 012----------------- CLOUD TYPE Cl ------------- 6 ¦ ¦0 20 012----------------- CLOUD TYPE Cm ------------- 6 ¦ +0 20 012----------------- CLOUD TYPE Ch ------------- 6 ¦ ¦1 01 000 -------------------------- DELAYED REP. 1 DESCRIPTOR - 0 ¦0 31 001 -------------------------- REPLICATION COUNT --------- 8 ¦ ¦ +0 07 004----------------- PRESSURE ------------------ 14 ¦ ¦0 08 001----------------- VERTICAL SOUNDING SIG ----- 7 ¦ ¦0 10 003----------------- GEOPOTENTIAL -------------- 17 +3 03 014-¦0 12 001----------------- TEMPERATURE --------------- 12 ¦0 12 003----------------- DEW POINT ----------------- 12 ¦0 11 001----------------- WIND DIRECTION ------------ 9 +0 11 002----------------- WIND SPEED ---------------- 12 --- TOTAL BITS 245
Figure 3-1. Example of TEMP observations sequence using delayed replication