The DSP Lens on Real-World Events, Part 3: Building an Honest Instrument

Introduction: Applying the Framework

In Part 1, we introduced the DSP lens and the problem of aliasing. In Part 2, we built a detailed theoretical framework, our “Rosetta Stone,” connecting the concepts of sample rates, filters, and critical frequencies.

Now, in this final part, we apply that framework to a real-world scenario. We will use the specific parameters of the Jittertrap tool to perform a rigorous quantitative analysis of the system’s imperfections. This will allow us to determine, with numerical confidence, exactly what we can and cannot trust from our measurements, and ultimately, how to build a more honest instrument.

Continue reading →

A fresh coat of paint for Jittertrap

My long-running project, Jittertrap, had been neglected for a long time… Mostly, because of a lack of interest. However, I recently had need for it at my day job, and I dusted it off, wrote down a list of things I need to fix for it to be useful to me in that one particular use case, and decided to …
Continue reading →

Rapido - rapidly creating test VMs for driver development

Thanks to rapido, it’s become much simpler to test Linux device drivers for real PCIe devices in VMs.

The advantages of this approach are:

  • the host is protected from memory corruption errors caused by buggy kernel drivers
  • the PCI peripheral can be physically installed in a multi-use machine, reducing hardware & lab requirements
  • debugging info is easily available
  • the development cycle is short and simple - rapid even :)
Continue reading →

PMTU weirdness

On a good day, my day job involves building networking tools in python. Too many python networking tools look like shell scripts, spawning subprocesses for basic tools like ‘ping’ or ‘ip’ - often resulting in a fragile mess due to poor, or inconsistent error handling.

I was quite excited to find icmplib. It provides a much simpler, less fragile way to do things like reachability tests, RTT measurements, path discovery and path MTU discovery in python code. Hopefully it finds its way into Fedora soon!

Armed with icmplib, I went on a journey of discovery to develop my understanding of Path MTU. I specifically wanted to understand the differences between IPv4 and IPv6, and the effect of VETH, VLAN and Bridge virtual devices.

Continue reading →

Status update

I’ll be speaking at linux.conf.au 2018 in Sydney. Jittertrap testing infrastructure is slowly improving. The idea is to include known test data so that the front-end rendering can be verified and refactored. I expect a sprint over the holidays and some new bugs for lca. :) Clean up of the tn40xx dri…
Continue reading →

Installing SciPy on Fedora 23

Fedora 23 (the current release at the time of writing) ships an outdated version of SciPy that doesn’t include the spectrogram function. Installing the latest Scipy was kind-of a pain, so I thought I’d record some instructions for future-me and share it with you. These instructions install dependenc…
Continue reading →

JitterTrap: Baby steps in DSP

This is the story of my first expensive lesson in Digital Signal Processing. It is about JitterTrap, the free software that powers BufferUpr.

The premise of BufferUpr is to combine commodity hardware with open source software to create a product that can measure data stream delays of 1-100 milliseconds. This is the range of delay that most multimedia developers and consumers are concerned with.

To measure the delay, we count the packets and bytes as they fly past and look for changes in throughput. My naive logic was that if we look at consecutive intervals of 1ms, we’ll be able to measure the throughput over that interval, plot it and show any variation in throughput.

This seemed like a very simple task, except that I had no previous experience in Digital Signal Processing and didn’t see why that would be relevant.

Continue reading →

Lightweight containers in Fedora using systemd

It was the year of 2015 and people were still developing new applications in PHP… but for those who could no longer accept the idea of installing a system-wide LAMP stack, there was a new-old fassionable thing: Containers! This is a quick howto for creating a throw-away container for messing around …
Continue reading →