Open main menu
SUPPORT DOCUMENTATION

Configuring a Fortimus for low-latency SEEDlink

SEEDlinkSEEDlink is a seismic data transmission protocol developed by IRIS. For a full description and the formal specification, please see IRIS's SEEDlink page. is a packet-based protocol. Data are assembled into packets before transmission and this, inevitably, increases the data latencyLatency is a measure of the time delay between a seismic signal being digitised and the digitised value being delivered to a data consumer. It is a key parameter for Earthquake Early-Warning systems. . If, for example, a 100 sps data-stream is divided into packets, each contains one hundred samples, the oldest sample in the packet will be held for a whole second before the packet can be delivered.

For minimum latency, a streaming protocol such as GDI-linkGDI-link is an ultra-low-latency streaming protocol for seismic data. For more information, please see the GDI-link protocol definition. is always recommended. Many existing applications, however, only accept data over SEEDlink so this document describes how to configure a Fortimus (or Fortis/Minimus combination) for the lowest possible SEEDlink latency.

Channels configuration

Seismological digitisers normally perform an initial data sampling at a very high rate; typically well over one hundred thousand samples-per-second. These data are then repeatedly down-sampled in a process known as decimation. To avoid aliasingIn digital signal processing, aliasing is the creation of unwanted signals that occurs when a signal containing frequencies higher than half the sample rate is sampled. See Wikipedia's 'Aliasing' page for more information. , the sample data must be digitally filtered to remove high frequencies before each down-sampling stage. This is known as the decimation filter chain.

Digital filters can be divided into two types: causal and acausal. Causal filters consider the value of many preceding samples when calculating the output value at any moment. They can produce a near-instantaneous output. In contrast, acausal filters also consider future sample values when calculating an output value. This means waiting until all the required future sample values have arrived before the output value can be produced, causing an unavoidable time-delay between the input and the output of such a filter.

Seismologists normally prefer acausal filters because they provide a more accurate transcription of the data. Causal filters distort the phase of incoming signals, changing the shape of the wave-front. However: acausal filters can cause several seconds of additional latency, which can be of critical importance in EEW applications. The default filters on the Fortimus and Minimus are acausal. This section describes how to enable causal filtering for low-latency operation.

Causal filtering is the default for the channels described as "low-latency" in the web page and documentation. This section describes how to disable the normal channels (which use acausal filters) and enable the low-latency channels, which use causal filters. The terms "causal" and "low-latency" are used interchangeably in the discussion below.

Causal filtering can be enabled either using the web interface or by editing the configuration file. Both techniques are described here:

Configuring causal filtering using the web interface

For simplicity, all channels which are not relevant to this discussion will be disabled in the examples below. This is not strictly necessary but it may be useful if you are following the discussion with a real system. The other channels can always be re-enabled afterwards.

Right-click on the Fortimus in Discovery's main page and select View web page or View web page (in system browser) from the context menu:

choosing 'View Web Page' frrom the Disocvery context menu

When the web page appears, select the Data Stream tab:

The 'Data Stream' tab of the minimus' web page

Click the 'Disable all streams' button and then scroll down and tick the check-boxes for the three low-latency (causal) seismic channels, 0ACCZC, 0ACCNC and 0ACCEC. These are distinguished by channel codes ending in C. For good results, set the sample rate to 200 samples per second, unless you specifically need a different rate.

The default file-names for recorded causal and acausal data are the same. To prevent conflicts, we suggest that you modify the SEED channel location code for these three steams so that they will be recorded to files with distinctive names.

Next, select the Data Record tab of the web page:

The 'Data Record' tab of the minimus' web page

As before, click the 'Disable all streams' button and then scroll down and enable the three causal channels for recording, using the same sample rate that you specified in the Data Stream tab. Change the SEED channel location code for these three steams to match that used in the Data Stream tab. In addition, enable recording for the three acausal seismic channels, 0ACCZ0, 0ACCN0 and 0ACCE0. These have channel codes ending in 0.

Once you have made the required changes, click the 'Reboot' button to restart the digitiser with the new settings.

This completes the channel configuration. Jump to the next section to configure the SEEDlink server.

Configuring causal filtering by editing the configuration file

An alternative way to configure the channels for causal operation is to download the configuration file, edit it and then upload it again.

To download a configuration file, right-click on the system in Discovery's main window and select System configuration:

Choosing 'System Configuration' from Discovery's context menu

The System Configuration Import/Export Tool opens:

'System Configuration Import/Export Tool's main window

Check that the correct configuration source is selected and then click the 'Download configuration' button. This downloads a human-readable text-file which you can then edit with a text editor such as Notepad++Notepad++ is a free (both as in “free speech” and also as in “free beer”) and highly-recommended text-editor, source-code editor and Notepad replacement that supports several languages. It can be downloaded from The Notepad++ web site.

Do not use a word-processor (such as Microsoft Word) to edit this file. It can only be edited with a text editor.

A sample file is presented below. Irrelevant entries have been removed: this causes no problems when the file is uploaded because, while any entries found are used to update the configuration, missing entries cause no action to be taken, preserving the previous settings. All values are 16-bit hexadecimal constants except where indicated.

The sample below has been annotated with # comments to clarify the purpose of each line. The file format, however, does not support comments so these must be removed if this sample, or portions of it, are to be used.
Revision=1 # revision number 0ACCC0=0x0000 # calibration channel sampling rate: 0⇒disabled 0ACCZ0=0x0000 # seismic Z channel sampling rate: 0⇒disabled 0ACCN0=0x0000 # seismic N channel sampling rate: 0⇒disabled 0ACCE0=0x0000 # seismic E channel sampling rate: 0⇒disabled 0ACCZ2=0x0000 # seismic Z channel sampling rate: 0⇒disabled 0ACCN2=0x0000 # seismic N channel sampling rate: 0⇒disabled 0ACCE2=0x0000 # seismic E channel sampling rate: 0⇒disabled 0AXLZ0=0x0000 # MEMS accelerometer Z channel sampling rate: 0⇒disabled 0AXLN0=0x0000 # MEMS accelerometer N channel sampling rate: 0⇒disabled 0AXLE0=0x0000 # MEMS accelerometer E channel sampling rate: 0⇒disabled 0MAGZ0=0x0000 # Magnetometer Z channel sampling rate: 0⇒disabled 0MAGN0=0x0000 # Magnetometer N channel sampling rate: 0⇒disabled 0MAGE0=0x0000 # Magnetometer E channel sampling rate: 0⇒disabled 0ACCZC=0x0064 # low-latency seismic Z channel sampling rate: 64⇒100sps SeedName64=0x81092624 # 32-bit encoded SEED low-latency seismic Z location and channel name 0ACCNC=0x0064 # low-latency seismic N channel sampling rate: 64⇒100sps SeedName80=0x81092618 # 32-bit encoded SEED low-latency seismic N location and channel name 0ACCEC=0x0064 # low-latency seismic E channel sampling rate: 64⇒100sps SeedName96=0x8109260f # 32-bit encoded SEED low-latency seismic E location and channel name 0AXLZC=0x0000 # low-latency MEMS accelerometer Z channel sampling rate: 0⇒disabled 0AXLNC=0x0000 # low-latency MEMS accelerometer N channel sampling rate: 0⇒disabled 0AXLEC=0x0000 # low-latency MEMS accelerometer E channel sampling rate: 0⇒disabled 0TMPA0=0x0000 # temperature channel sampling rate: 0⇒disabled 0VINP0=0x0000 # input voltage channel sampling rate: 0⇒disabled 0HUMA0=0x0000 # humidity channel sampling rate: 0⇒disabled 0CGPSO=0x0000 # internal clock to GPS offset channel sampling rate: 0⇒disabled 0CGPSP=0x0000 # internal clock period difference to GPS channel sampling rate: 0⇒disabled 0CVDAC=0x0000 # internal clock DAC frequency pulling channel sampling rate: 0⇒disabled 0CTSTB=0x0000 # auxiliary clock test channel sampling rate: 0⇒disabled 0CPTPO=0x0000 # internal clock to PTP offset channel sampling rate: 0⇒disabled 0CPDMS=0x0000 # auxiliary clock test channel sampling rate: 0⇒disabled 0CPDSM=0x0000 # auxiliary clock test channel sampling rate: 0⇒disabled 0CPMPD=0x0000 # auxiliary clock test channel sampling rate: 0⇒disabled 0PRSR1=0x0000 # pressure channel sampling rate: 0⇒disabled 0PRSR0=0x0000 # pressure channel sampling rate: 0⇒disabled 0HUMB0=0x0000 # humidity channel sampling rate: 0⇒disabled 0PLLO0=0x0000 # auxiliary clock diagnostic channel sampling rate: 0⇒disabled 0PINP0=0x0000 # power input channel sampling rate: 0⇒disabled 0TMPD0=0x0000 # auxiliary temperature diagnostic channel sampling rate: 0⇒disabled S0CalibA=0x0000 # calibration channel sampling rate: 0⇒recording disabled S0SeisZA=0x00c8 # seismic Z channel sampling rate: c8⇒recording @ 200sps S0SeisNA=0x00c8 # seismic N channel sampling rate: c8⇒recording @ 200sps S0SeisEA=0x00c8 # seismic E channel sampling rate: c8⇒recording @ 200sps S0SeisZB=0x0000 # seismic Z channel sampling rate: 0⇒recording disabled S0SeisNB=0x0000 # seismic N channel sampling rate: 0⇒recording disabled S0SeisEB=0x0000 # seismic E channel sampling rate: 0⇒recording disabled S0AccZA=0x0000 # MEMS accelerometer Z channel sampling rate: 0⇒recording disabled S0AccNA=0x0000 # MEMS accelerometer N channel sampling rate: 0⇒recording disabled S0AccEA=0x0000 # MEMS accelerometer E channel sampling rate: 0⇒recording disabled S0AccZB=0x0000 # MEMS accelerometer Z channel sampling rate: 0⇒recording disabled S0AccNB=0x0000 # MEMS accelerometer N channel sampling rate: 0⇒recording disabled S0AccEB=0x0000 # MEMS accelerometer E channel sampling rate: 0⇒recording disabled S0MagZ=0x0000 # MEMS accelerometer Z channel sampling rate: 0⇒recording disabled S0MagN=0x0000 # MEMS accelerometer N channel sampling rate: 0⇒recording disabled S0MagE=0x0000 # MEMS accelerometer E channel sampling rate: 0⇒recording disabled S0SeisZLowLatA=0x0064 # low-latency seismic Z channel sampling rate: 64⇒recording @ 100sps SeedName66=0x81092624 # 32-bit encoded SEED low-latency seismic Z location and channel name S0SeisNLowLatA=0x0064 # low-latency seismic N channel sampling rate: 64⇒recording @ 100sps SeedName82=0x81092618 # 32-bit encoded SEED low-latency seismic N location and channel name S0SeisELowLatA=0x0064 # low-latency seismic E channel sampling rate: 64⇒recording @ 100sps SeedName98=0x8109260f # 32-bit encoded SEED low-latency seismic E location and channel name S0TemprA=0x0000 # temperature channel sampling rate: 0⇒recording disabled S0Voltage=0x0000 # input voltage channel sampling rate: 0⇒recording disabled S0HumidA=0x0000 # humidity channel sampling rate: 0⇒recording disabled ClkGpsOffset=0x0000 # internal clock to GPS offset channel sampling rate: 0⇒recording disabled ClkGpsPeriod=0x0000 # internal clock period difference to GPS channel sampling rate: 0⇒recording disabled ClkDacFreqPull=0x0000 # internal clock DAC frequency pulling channel sampling rate: 0⇒recording disabled ClkTestPpbS=0x0000 # auxiliary clock test channel sampling rate: 0⇒recording disabled ClkPtpOffset=0x0000 # internal clock to PTP offset channel sampling rate: 0⇒recording disabled ClkPtpDelayMS=0x0000 # auxiliary clock test channel sampling rate: 0⇒recording disabled ClkPtpDelaySM=0x0000 # auxiliary clock test channel sampling rate: 0⇒recording disabled ClkPtpMeanPathDelay=0x0000 # auxiliary clock test channel sampling rate: 0⇒recording disabled S0ExtPressure=0x0000 # pressure channel sampling rate: 0⇒recording disabled S0Pressure=0x0000 # pressure channel sampling rate: 0⇒recording disabled S0HumidB=0x0000 # humidity channel sampling rate: 0⇒recording disabled S0PLLOffset=0x0000 # auxiliary clock diagnostic channel sampling rate: 0⇒recording disabled S0Power=0x0000 # power input channel sampling rate: 0⇒recording disabled

Once the file has been edited, it can be uploaded again using the System Configuration Import/Export Tool. Open the tool as before, select the Use configuration from file: radio-button and then click the 'Browse' button to browse your file-system and locate the edited copy of the configuration file. Alternatively, type the full path to the file into the box.

the 'System Configuration Import/Export Tool's window

Select the system(s) that you wish to update using the check-boxes at the left of the display and then click the 'Upload' button. Once the upload is complete, click the 'Reboot Selected' button to restart the digitiser(s) so that the new configuration takes effect.

This completes the channel configuration. Continue to configure the SEEDlink server, as desribed in the following section.

SEEDlink server network latency configuration.

Only the system administrator can modify the SeedLink network latency configuration.

The SEEDlink configuration options are explained in section §7.11.3 of the Fortimus manual. The following options are relevant to this discussion:

Some experimentation might be required to find the best balance between these competing objectives.

The following information may be useful when choosing values:

Example

If the low-latency (causal) channels are set to 100 samples per second, the following settings would result in the most efficient packetisation:

If the lowest possible latency is paramount and we can ignore both network load and backfill capabilities, simply set Send SeedLink EEW Packet every… to 1 decisecond. With 100 samples per second data, each packet will contain 10 samples but most packets will be transmitted empty.

The SEEDlink server can be configured either using the web interface or by editing the configuration file. Both techniques are described here:

Configuring the SEEDlink server using the web interface

Before attempting to configure the SEEDlink server, select the Login link at the top of the web page

the 'Login' link at the top of the web page

and log in as an administrator.

The default administrative login is admin with password admin, although this may have been changed in your installation.

Once logged in, navigate to Network tab. The SEEDlink configuration parameters discussed above can be found at the bottom of the Network Config section:

low latency SEEDlink server parameters

Once you have made the required changes, click the 'Reboot' button to restart the digitiser with the new settings.

This completes the SEEDlink server configuration.

Configuring the SEEDlink server by editing the configuration file

An alternative way to configure the SEEDlink server is to download the configuration file, edit it and then upload it again. This process is described in detail in the instructions above. For low-latency SEEDlink server configuration, only two entries are relevant. Both are eight-bit values specified in hexadecimal. The Data Record Size parameter is encoded as follows:

The relevant entries are:

Send SeedLink EEW Packet Every=0x04 # Number of deciseconds for SeedLink EEW packets Data Record Size=0x02 # SeedLink data record size option
These settings only affect the causal (low-latency) channels. Modifying them has no effect on the packetisation of any other channels configured for streaming.
The # comments in the sample configuration file above are for documentation purposes only and must be deleted before the file is uploaded.

This completes the SEEDlink server configuration.