FY3B 2018 02 10 1311 rgb corrected

USA-Satcom xHRPT decoder setup

This blog post explains how to get the USA-Satcom xHRPT decoder up and running. The decoder runs on Windows and needs a reasonably modern CPU as some of the FEC routines are fairly CPU intensive. In this post, the Airspy R2 or Airspy mini SDR will be used; both of them perform about the same for HRPT reception. It is assumed that you have a tracking antenna already and the appropriate L-Band feed / low noise amplifier etc.

Airspy Setup

The xHRPT decoder streams I/Q data from spyserver, a small footprint program which acts as the interface between the Airspy hardware and a network socket. It is worth installing the Microsoft loopback adapter, pick a non routeable IP address for this such as

The "spyserver.config" should be edited and need only contain the following configuration options:

bind_host =
bind_port = 5555
maximum_clients = 1
allow_control = 1
device_type = AirspyOne
device_serial = 0x04A464CABCABCABC
initial_gain = 16

Note: The device_serial directive only needs applying if you have more than one Airspy SDR connected to your PC, it allows you to choose the correct device.

Once the configuration has been saved, spyserver.exe should be run, it will listen on port 5555.

xHRPT setup

After contacting USA-Satcom and obtaining a licensed version of the decoder, several setup steps are required before you are in a position to decode images.


In this setup it will be assumed you are running WXTrack. This needs to be configured in "Tracker Options" to always output DDE. xHRPT uses this data to select the next satellite which in turn configures the demodulator and correct downlink frequency.

It is important to set the correct "Remote IP" and "Port" details, in this example these should be set to and port 5555. The "Spyserver" checkbox should be selected. Set the gain between 12 and 16, not too high. If in any doubt, run the SDR# tool and look at an L-Band signal to set the gain correctly, sticking to lower gains if possible. If the gain is set too high, the xHRPT demodulator will not function correctly; a pass might start correctly but as the satellite goes overhead and is therefore closer the signal strength increases and can overload the demodulator. Ensure that "Spyserver" is selected.

Ensure that "IQ Disp Enable" is selected along with "FFT ON". This will display the incoming RF spectrum as well as the demodulator constellation. Under "Tracking Control", DDE should be selected and the "Connect" button pressed.

Next the demodulator needs to be connected to the Spyserver which only involves pressing the "Connect" button followed by the "Stream ON" button. Your display should look like that in the image below:


The top right hand side shows the constellation which in the case of QPSK signals from Metop-A/B and FY3x will show 4 phase states. For satellites like NOAA-x and Meteor MN2, they use BPSK downlinks and so only 2 phase states will be shown. The large FFT display at the bottom shows the incoming RF spectrum, it should be obvious what this is for. A NOAA-18 BPSK demodulation during a typical pass is shown below:


The section "AHRPT-CHRPT" shows the demodulator status data. Sample and Symbol rates are shown for each satellite whilst it is selected. Under the "FEC" section, bit error rates for 4 demodulator phases are shown, generally values under 700-800 will result in an excellent decode with bit-perfect images.

The "Thread and Buffer Status" section is important to monitor. If any of the green bar graphs decrease, this indicates that your CPU is not keeping up with the demodulation task. Also watch the "Loss of Lock" values, if this increments quickly, then your signal is too weak for the demodulator to remain locked to.

Assuming the xHRPT demodulator is functioning as expected, and you have tracked a pass of a supported satellite, you will end up with a selection of files, some of which require post-processing. NOAA-x digital output is saved as a RAW16 formatted file which can be read directly into HRPT Reader.

Files generated by passes of Metop-A/B, Meteor MN2 and FY3x need post processing with the MetFY3x tool. When processing Meteor-MN2 files it is essential that you remember to uncheck the "Manchester Encoding" option in the menu, failure to do this will result in a failed processing step. Ensure that "Reed-Solomon" is unchecked for all output files generated by xHRPT.

Metfy3x meteor

Metop-A/B requires that the correct APID is set for day or night passes. If you process a night pass in day mode, you will not get an image, you therefore need to set the correct one as shown below:


If you find that the decoder is doing something unexpected, the first step would be to clear its local configuration file by removing the file in \AppData\Local\xhrpt_decoder\ and restarting xHRPT.

Once appropriate processing of the xHRPT binary files has been undertaken, you will have a selection of file types which can be opened with HRPT Reader as mentioned above. It will take some time to become familiar with the various image processing settings and of course each user will have their favorite techniques to recover pleasing images.

A typical FY3C HRPT daytime pass might look like this:

And a Meteor MN2 HRPT pass might appear like this:

{{ message }}

{{ 'Comments are closed.' | trans }}