Welcome to the Digital Intermediate Frequency Interoperability (DIFI) Certification GitHub Repo! This repository is used by the DIFI Consortium Working Group to share resources and tooling with DIFI Consortium members and the user community to enable verification, validation and testing of DIFI streams and devices in accordance with the DIFI standards.
Note, you can install Ubuntu 24 on Windows using WSL, simply open the Microsoft Store and search for Ubuntu 24 and install it, then there should be a new app called Ubuntu 24 that will open a terminal, think of it like a VM without a graphical desktop.
sudo apt update
sudo apt install -y python3 python3-pip python3-venv python-is-python3
python -m venv difi-venv
. difi-venv/bin/activate
pip install -r requirements.txt
python certify_source.py --pcap DIFI_Validator/examples/Example1_1Msps_8bits.pcapngA PCAP or live UDP stream can be parsed with:
- PCAP:
python certify_source.py --pcap DIFI_Validator/examples/Example1_1Msps_8bits.pcapng - UDP:
python certify_source.py --udp-port 50003(e.g. usingpython certify_sink.py --port 50003to send it packets)
Use python certify_source.py --help to see all available arguments
You can supply arguments via command line, or as a yaml file, eg python certify_source.py --config certify_source_example_config.yml
The results are printed out to console, as well as saved to files certify_source_summary_.yaml and error_log.txt, which can be copy/pasted into a Word or PowerPoint.
An alternative option is to use the gr-difi example pn11_over_difi_tx.grc to test the UDP mode.
The following example generates a live UDP stream of DIFI, for 10 seconds, with 10 context packets per second, 2 version packets per second, and data packets corresponding to the requested sample rate and samples-per-packet. The samples sent are a QPSK signal with 4 samples-per-symbol and a rolloff of 0.35, with bits corresponding to the standard PN11 sequence cropped to 2046 due to QPSK being two bits per symbol, more details can be found here.
python certify_sink.py --duration 10 --port 50003 --sample-rate 100e3 --packet-size small --bit-depth 8
There is no command line option for capturing to a pcap because you can simply run tcpdump, e.g., sudo tcpdump -i lo udp port 50003 -w output.pcap, to create a pcap out of the UDP stream being generated live.
The Packet validator is a collection of Python scripts that generate Standard Context' packets, 'Version Context' packets and 'Data' packets (dcs.py, dvs.py & dds.py) for consumption by a DIFI packet receiver (drx.py). The collection of scripts were released as open source by Kratos Defense to the DIFI Consortium.
The GNU Radio out of tree blocks consist of a "Data" packet Source and Sink blocks and can be found in gr-difi. The collection of GNU Radio blocks were part of gr-azure and released as open source by Microsoft to the DIFI Consortium.
The DIFI Wireshark Dissector is a LUA plugin created for Wireshark that allows for packet inspection of DIFI Standard Context, Standard Data and Version Context packets. The plug-in was created by Johanna Rivera. The dissector supports DIFI 1.2 (2024).
DIFI Tutorial (DIFI 101)
The tutorial section is a collection of educational material that describe DIFI packets and include hands on examples to familiarize the reader with DIFI.
GitHub is a code hosting platform, great for version control and collaboration. It uses Git under the hood, but you don't have to be an expert in Git to make changes to a page.
From the browser, you can download the code by clicking the green Code button in the top right, and then clicking Download Zip, as shown below.
Those familiar with Git commands may choose to do the process with a git clone instead. For a tutorial on using Git and GitHub via the command line, including creating your own repo, refer to this series of tutorials.
To view code on a public GitHub repository (a.k.a. repo) like this one, you don't need a GitHub account. You will need a GitHub account to suggest edits to a page. For making documentation or other text changes, you can do everything from the browser.
In the portion of the page shown below, you can browse the files and directories/folders within this repo (you may see a slightly different set of files and folders). Note that the Readme you see when you go to the repo's main page, is the README.md file. Try browsing through some of the files and folders.
To edit a file, click it, then click the pencil icon circled below:
You will be brought to an in-browser text editor, where you can make your edit. Note the Preview tab at the top, to preview your changes.
When you're done making the edits, scroll to the bottom and under Propose Changes you need to fill out the first bar, with a summary of the change. You can leave the large box empty. Click Propose Changes.
Click the Create Pull Request button as shown below
This will bring you to the Open a Pull Request window, which might seem confusing, but all you have to do is click the green Create Pull Request button at the bottom.
At this point the maintainers of the code will likely receive an email that there is a new change request, known as a "pull request", and they will review it. You might receive emails related to the review process on the email you used to create your GitHub account.




