/WsjtxUtils.Compare

Compare the decoded messages from two WSJT-X clients operating FST4, FT4, FT8, MSK144, or Q65.

Primary LanguageC#MIT LicenseMIT

WsjtxUtils.Compare

Compare the decoded messages from two WSJT-X clients operating in a 77-bit mode (FST4, FT4, FT8, MSK144, Q65). This application will correlate decoded messages from both clients by DECall, DXCall, QSO State, and Decode time to create the data needed to compare and characterize receiver and decoder behavior.

Matched decodes are written to the CSV file correlated-decodes-ab.csv. Any decode that is not correlated between clients and has been in the buffer for longer than the configurable parameter AmountOfSecondsInBufferWithNoMatchIsUncorrelated is written to the file uncorrelated-decodes-a.csv or uncorrelated-decodes-b.csv based on its source.

Requirements

For pre-compiled releases:

To compile from source:

Quickstart

For pre-compiled releases:

  • Ensure that you have the .NET 7 runtime installed
  • Download the package for your OS
  • Extract the archive to your desired location
  • Run the executable file
    • Windows WjtxUtils.Compare.Console.exe
    • Linux & OSX WsjtxUtils.Compare.Console
  • CTRL-C in the console to exit
  • Edit the config.json file to customize available options

To compile from source:

  • Ensure that you have the .NET 7 SDK installed
  • Clone or download the source code
  • dotnet publish -c release src/WsjtxUtils.Compare.Console/WsjtxUtils.Compare.Console.csproj --output <OUTPUT_DIRECTORY>

Configuration

Options can be configured by editing the config.json file or by overriding specific parameters by command-line.

{
  "PeriodicTimerSeconds": 1,
  "AmountOfSecondsInBufferWithNoMatchIsUncorrelated": 30.0,
  "IsCorrelatedDecodeWiggleTimeInSeconds" : 12,
  "CorrelatedDecodesFile": "correlated-decodes-ab.csv",
  "UncorrelatedDecodesFileSourceA": "uncorrelated-decodes-a.csv",
  "UncorrelatedDecodesFileSourceB": "uncorrelated-decodes-b.csv",
  "Server": {
    "Address": "127.0.0.1",
    "Port": 2237
  },
  "Serilog": {
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {NewLine}{Exception}"
        }
      }
    ]
  }
}