Ham Cockpit   

    Show / Hide Table of Contents

    DSP Pipeline

    In Ham Cockpit, the plugins that process I/Q and audio data in real time are organized in a DSP Pipeline. This article describes the architecture of DSP Pipeline and is intended for the plugin developers. Please see the article in User's Guide that explains DSP Pipeline from the user's perspective.

    Data Flow

    DSP Pipeline consists of a data input plugin, several data processing plugins, and a data output plugin. Operation of the pipeline is based on the data-pull model. The output plugin, typically Audio Output to Soundcard, calls the Read(Single[], Int32, Int32) method of the last processing plugin when it needs more data, e.g, when the soundcard requests another block of samples for playback. All processing plugins, connected in a chain, call the Read method of the preceding plugin, process received data, and return it to the caller. The data input plugin, when its Read method is called, returns the data received from the radio.

    Data Format

    The data are passed between the plugins as an array of float values, but the actual data format, described by the Format property, varies from plugin to plugin. The signal processing plugins receive and return I/Q data, while audio processing plugins have real-valued audio data at input and output. The demodulator plugins receive I/Q data and return the audio.

    IDspPipeline Interface

    The data processed in the DSP Pipeline are available outside of the pipeline via the IDspPipeline interface exposed by the plugin host object. The S-Meter plugin, published with source code, is one of the plugins that make use of these data.

    The IDspPipeline interface exposes the properties InputSignal, ProcessedSignal, DemodulatedAudio and ProcessedAudio of type ISampleStreamTap that allow the client plugins to tap the pipeline at different points. The data are delivered via the data-push model: to receive the data, the plugins subscribe to the SamplesAvailable event exposed by the pipeline taps.

    In addition to the data taps, the DspPipeline exposes the ModeSwitch, Transmitter and Tuner properties that allow reading and changing the transmitter and receiver settings. See the Frequency Display plugin, also available with source code, for an example that reads and displays these settings.

    Back to top Generated by DocFX