-
Notifications
You must be signed in to change notification settings - Fork 8
Configuration
The ARIUS device is configured with JSON files. There are two types of JSON files:
- TX/RX scheme definition
- Transducer definitions/list
An exemplary top-level structure of the JSON TX/RX scheme definition (not all sections are properly filled!):
{
"hal": {
"transducer": "AL2442",
"speedOfSound": 1540.0,
"samplingFrequency": 50000000.0,
"coupling": "AC",
"transmitWaveform": [
...
],
"TGCWaveform": [
...
],
"frame": [
...
]
}
}
As one can notice, there are many properties that must be set in order to configure the USG hardware for action. To begin with, there is a connector property where the User has to specify the name of the transducer used by the USG hardware. This name will be used by the software in order to gather the USG head parameters, which are held in separate JSON Transducer definition/file (transducers.json). The last two fields speedOfSound and samplingFrequency represent the signal properties and are used in all of the acquisitions programmed in the frame section.
JSON TX/RX scheme definition file defines a complete set of parameters required for transmission and acquisition process in a single experiment (signal acquisition).
The User can set the transmit voltage level to operate with. The range 0.0 to 1.0, where max level 1.0 corresponds to the TX voltage Vpp=180V.
"transmitPower":
{
"HV0": 1.0
}
The transmitWaveform section holds the array of definitions of the possible waveforms of transmission:
"transmitWaveform":
[
{
"type": "parametric",
"parameters": {
"A": 15,
"B": 1,
"C": 15,
"D": 2,
}
"clock": 125000000
}
]
IMPORTANT: Currently, only a single transmit waveform can be defined!
Time-Gain Compensation (TGC) function is implemented in the analog front-end circuitry. The user can define many waveforms of the TGC function. They are all stored in the array of the TGCWaveform property in the JSON configuration file.
An example TGC waveform definition by discrete points:
"TGCWaveform":
[
{
"type": "points",
"points": [
{
"x": 1,
"y": 0
},
{
"x": 55,
"y": 0.5
},
{
"x": 55,
"y": 0.5
},
]
}
]
An example TGC waveform definition by a linear function:
"TGCWaveform":
[
{
"type": "linear",
"startSample": 0
"endSample": 200
"startValue": 0.0
"increment": 0.004
}
]
The TGC waveforms can be modeled in one of two ways using the type property:
- points - as a piecewise linear function that values are interpolated from the points given in the array in the points property. Each point has its position
x
, represented as index of the sample (0-), and valuey
(0.0-1.0). - linear - as a monotonic linear function that starts from the
startSample
(initialized with thestartValue
) and ends in theendSample
. The TGC values are incremented with each sample by theincrement
value.
IMPORTANT: Only the fields associated with the chosen type of the TGC waveform are necessary for proper configuration. Fields from other types will be ignored!
IMPORTANT: Currently, only one TGC waveform can be defined!
The data, that is returned to the user in the callback function, is described by the frame property of the JSON configuration file. This property is an array of frames definitions:
"frame":
[
{
"id": 0,
"startSample": 0,
"endSample": 4096,
"transmit": {
...
},
"timeToNextEvent": 0.002,
"softTrigger": 0,
"event":
[
...
]
}
]
Each frame is distinguished by its Id field, which is an index that starts with 0. Moreover, this field also defines the order of the transmissions.
The User can define the range (in samples) of the received RF signals - i.e. only the samples between the startSample
and the endSample
of the acquired signal will be transferred to memory.
The parameter timeToNextEvent
specifies a delay (in seconds) between subsequent events defined in this Frame.
Finally, the softTrigger
property is used in order to start TX/RX process on demand (when set to 1) or in continuous mode (default value 0).
IMPORTANT: The following properties: transmit
, receive
, timeToNextEvent
can be overwritten in the descriptions of the individual events associated with that frame!
IMPORTANT: For the sake of acquisition performance it is recommended to use at least two frames (even with the same configuration). With two frames the hardware can simultaneously collect the data of one frame and deliver to the User the data from the other ones (so-called ping-pong buffering)!
The transmit property describes the TX parameters for the individual events. There are two coordinate modes available:
- Polar coordinates (e.g. for Phased-Array):
"transmit":
{
"aperture": 192,
"origin": 0,
"type": "polar",
"focus": {
"r": 1000.0,
"theta": 0.0,
},
"center": {
"r": 0.0,
"theta": 0.0,
}
}
- Cartesian coordinates (e.g. for Linear-Array):
"transmit":
{
"aperture": 192,
"origin": 0,
"type": "cartesian",
"focus": {
"x": 0.0,
"y": 0.0,
},
"center": {
"x": 0.0,
"y": 0.0,
}
}
The user can define the size of the active TX aperture (aperture
) used in the transmission (can be smaller than the actual physical number of the probe elements). Moreover, the defined active (virtual) TX aperture can be positioned in the actual physical aperture by defining its beginning represented by the offset from the physical first element of the probe (origin
). Furthermore, the User can steer and focus the transmitted wave by setting the focus
and center
properties. The center
defines the origin of the wave and the focus
its destination. Both of these parameters are relative to the center of the defined virtual aperture. They can be represented in one of two available coordinate systems:
- polar - where:
r
property defines the distance (in meters) and thetheta
property is the deviation angle (in degrees); - cartesian - where:
x
andy
properties are point coordinates (in meters).
The event
property is the array of transmissions that are collected in a single frame. Each event inherits frame properties: transmit
, timeToNextEvent
and softTrigger
. The inherited properties can be overwritten for individuals events, such as in the listing below:
"event":
[
{
"transmit":
{
"focus":
{
"theta": -1
}
}
},
{
"transmit":
{
"focus":
{
"theta": 0
}
}
},
{
"transmit":
{
"focus":
{
"theta": 0
}
"timeToNextEvent": 0.002,
"softTrigger": 1
}
}
]
Moreover, there is an option that can be used in order to create multiple events within one definition. The listing below presents all the possible variants:
"event":
[
{
"transmit":
{
"originRange": "0:1:192",
"focus / center":
{
"thetaRange / xRange": "-10.0:1.0:10.0",
"rRange / yRange": "-10.0:1.0:10.0"
}
}
}
]
The presented notation can be identified as a 'for loop', where: the first value is a starting value, the middle one is an incrementation, and the last one is an end of the loop value. A combination of constant values and ranges in single event definition are allowed. What is more, there can be more than one range specified. However, the loops must have the same size. Finally, individual events can be intertwined with sets of events.
A separate JSON system file transducers.json
lists all the available ultrasound probes with their names and geometry parameters.
The file is accessible to the User and must be augmented with the definition of any new/custom probes that are going to be used with the Platform.
An exemplary structure of the JSON Transducer definition/list:
"transducers": [
{
"name": "AL2442",
"numElements": 192,
"pitch": 0.00021
},
{
"name": "AL2442_128ch",
"numElements": 128,
"pitch": 0.00021
},