Several Data format are used to store the acquired data.
Ionogram HDF File Format:
Hierarchical Data Format (HDF) is a set of file formats (HDF4, HDF5) designed to store and organize large amounts of data. Ionograms data are in HDF5 file format.
HDF5 files are structured like a file system or a folder hierarchy. They contain two primary types of objects:
Groups: Analogous to folders or directories, used to organize the file structure.
Datasets: The actual data arrays, which are similar to files.
In the figure below the groups of Dataset in the ionogram H5 data files:
binary data table are in the "I" dataset of 300 x 1000 points
I_fvec containt a list of 300 frequencies (from 1 MHz to 30.9 MHz at stemps of 0.1MHz) In the first column and type of code (prn) in the second column
I_rcvec contain a list of 1000 ranges (from 0 1'497,46 km at steps of 1,498 km )
in the follwing data other information are stored like version of the ionosgrams, position of the station noise_floor and Signal to Noise Ratio and timestamps of the acquisition time.

Usesul programs to open HDF5 file are: HDFView, Silk ... MATLAB has native functions to read and write HDF5 files.
In python the H5py library can be used and minimal Python code example is listed below:
# Basic Python code
import h5py
import numpy as n
...
#read file
try:
#openfile
with h5py.File(file_name, "r") as h1:
v1 = h1['ionogram_version'][()]
#test on ionogram version
if (v1 == 1) or (v1 == 2):
# file HD5 1000 byte da 0 1497.2 km 1.5 km/byte
#vector of frequncies
freq1 = n.copy(h1['I_fvec'])
#vector of ranges
rng1 = n.copy(h1['I_rvec'][()])
#ionogram data in the I array
I = n.copy(h1['I'][()])
...
Ionogram RDF File Format:
a) All ionogram files should be binary files and have extension .RDF.
b) The name of the ionogram file is yyggglmm.rdf, where yy are the last two digits of the year, ggg are the three digits for the calendar day, l is the letter that identifies the hour (see Table 1) and mm represents the minutes (ex. 09121b00.rdf where 09 are the last two digits of the year 2009, 121 is the calendar day, b corresponds to the hour 02 and 00 are the minutes).
c) Each file has a header of 197 bytes where the bytes between 1 and 6 represent the initial frequency of the sounding, the bytes between 8 and 13 represent the final frequency of the sounding, and the bytes between 15 and 19 represent the frequency step (whose size can be 0.050 or 0.100 MHz), while the remaining bytes are parameters concerning the receiver settings, the signal processing algorithm, and geophysical constants depending on the specific installation site (see Table 2; the mandatory parameters for our software are highlighted in blue. The other values can be left blank).
d) Next to the header these files are structured in a definite number (depending on the monitoring frequency band width) of records of 150 bytes (whose value stands for the received echo amplitude), each record representing the sounding in height in correspondence of a determined value of the frequency; the value of the first byte represents the energy reflected back towards the ground from a height of 90 km, the byte 150 represents the energy reflected back towards the ground from a height of 760.5 km, therefore the passage between two successive bytes of the record is equal to a movement in height of 4.5 km.
e) 1) In case of O/X information is available for each frequency there are two consecutive records of 150 bytes, one for the O mode and the other one for the X mode (in this case the field “polarization information” of the header, see Table 2, has to be filled with “OX”).2) In case of only the O mode information is available for each frequency only one record of 150 bytes is present (in this case the field “polarization information” of the header, see Table 2, has to be filled with “ O”).3) In case of only the X mode information is available for each frequency only one record of 150 bytes is present (in this case the field “polarization information” of the header, see Table 2, has to be filled with “ X”).4) In case of both traces are recorded but without information on polarization for each frequency only one record of 150 bytes is present (in this case the field “polarization information” of the header, see Table 2, has to be filled with “ ”).
Letter |
Hour |
A |
00 |
B |
01 |
C |
02 |
D |
03 |
E |
04 |
F |
05 |
G |
06 |
H |
07 |
I |
08 |
J |
09 |
K |
10 |
L |
11 |
M |
12 |
N |
13 |
O |
14 |
P |
15 |
Q |
16 |
R |
17 |
S |
18 |
T |
19 |
U |
20 |
V |
21 |
W |
22 |
X |
23 |
Table 1
|
From byte |
To byte |
total number of bytes |
meaning |
example |
|
1 |
6 |
6 |
initial frequency of the sounding |
01.500 |
|
7 |
7 |
1 |
blank |
|
|
8 |
13 |
6 |
final frequency of the sounding |
14.500 |
|
14 |
14 |
1 |
blank |
|
|
15 |
19 |
5 |
frequency step of the sounding |
0.050 |
|
20 |
20 |
1 |
blank |
|
|
21 |
25 |
5 |
initial height of the sounding |
090.0 |
|
26 |
26 |
1 |
blank |
|
|
27 |
31 |
5 |
final height of the sounding |
760.5 |
|
32 |
32 |
1 |
blank |
|
|
33 |
35 |
3 |
height step of the sounding |
4.5 |
|
36 |
36 |
1 |
blank |
|
|
37 |
38 |
2 |
internal attenuation |
18 |
|
39 |
39 |
1 |
blank |
|
|
40 |
41 |
2 |
external attenuation |
04 |
|
42 |
42 |
1 |
blank |
|
|
43 |
43 |
1 |
mathematical amplification |
1 |
|
44 |
44 |
1 |
blank |
|
|
45 |
48 |
4 |
filter HIGH |
0000 |
|
49 |
49 |
1 |
blank |
|
|
50 |
53 |
4 |
filter LOW |
5000 |
|
54 |
54 |
1 |
blank |
|
|
55 |
56 |
2 |
numbers of integrations |
20 |
|
57 |
57 |
1 |
blank |
|
|
58 |
58 |
1 |
software release DSP |
3 |
|
59 |
59 |
1 |
blank |
|
|
60 |
65 |
6 |
available |
xxxxxx |
|
66 |
66 |
1 |
blank |
|
|
67 |
118 |
52 |
eventual comment |
|
|
119 |
119 |
1 |
blank |
|
|
120 |
121 |
2 |
Polarization information |
“OX” or “ X” or “ O” or “ “ |
|
122 |
122 |
1 |
blank |
|
|
123 |
127 |
5 |
URSI code of the station |
RM041 |
|
128 |
128 |
1 |
blank |
|
|
129 |
132 |
4 |
year |
2003 |
|
133 |
133 |
1 |
blank |
|
|
134 |
135 |
2 |
month (01-12) |
04 |
|
136 |
136 |
1 |
blank |
|
|
137 |
138 |
2 |
day (01-31) |
07 |
|
139 |
139 |
1 |
blank |
|
|
140 |
142 |
3 |
Calendar day |
094 |
|
143 |
143 |
1 |
blank |
|
|
144 |
148 |
5 |
time (hh:mm) |
22:43 |
|
149 |
149 |
1 |
blank |
|
|
150 |
154 |
5 |
geographical latitude |
+41.8 |
|
155 |
155 |
1 |
blank |
|
|
156 |
160 |
5 |
geographical longitude |
012.5 |
|
161 |
161 |
1 |
blank |
|
|
162 |
166 |
5 |
magnetic latitude |
+42.0 |
|
167 |
167 |
1 |
blank |
|
|
168 |
172 |
5 |
magnetic longitude |
093.8 |
|
173 |
173 |
1 |
blank |
|
|
174 |
177 |
4 |
gyrofrequency |
1.20 |
|
178 |
178 |
1 |
blank |
|
|
179 |
183 |
5 |
magnetic inclination |
+60.0 |
|
184 |
184 |
1 |
blank |
|
|
185 |
196 |
12 |
name of the file |
03097N23.RDF |
|
197 |
197 |
1 |
CR |
0Ahex |
Table 2