Field Guide · term

Also known as: WAV IQ, RIFF IQ recording, stereo IQ WAV

A WAV IQ recording stores baseband IQ data inside an ordinary RIFF/WAVE audio container by treating the two quadrature channels as a stereo pair — I in the left channel, Q in the right.1 It is the recording format of SDR# (SDRSharp), SDR++, SDRangel and similar desktop receivers, and its one real advantage over a bare IQ file is that the WAV header carries the sample rate, so the file is partly self-describing.

RIFF/WAVErate, bits auxicentre freq L=I₀ R=Q₀ L=I₁ R=Q₁ · · · stereo PCM frames = interleaved IQ
A WAV IQ file wraps interleaved left-I / right-Q PCM samples in a RIFF header that carries the sample rate, with centre frequency in an optional auxi chunk.

How it works

A WAVE file is a sequence of chunks. The fmt chunk declares the number of channels, the sample rate, and the bit depth; the data chunk holds the PCM frames. For an IQ recording the receiver writes two channels — a WAV “frame” is therefore one I value followed by one Q value — so at the byte level the payload is identical to an interleaved stereo recording. The bit depth is usually 16-bit signed PCM, giving values in ±32768 that DSP divides by 32768 to normalise to ±1.0, though 8-bit and 32-bit-float WAVs also occur.

Because plain WAVE has no field for RF centre frequency, SDR# introduced an auxi chunk that records the tuned frequency and a timestamp. Programs that understand auxi can restore the absolute frequency scale on playback; programs that do not simply skip the unknown chunk and still read the audio, which is the beauty of the chunked container. A practical limitation inherited from the WAVE format is the 32-bit size field: a classic RIFF file tops out near 4 GB, which at multi-MS/s IQ rates is only minutes of recording, so long captures use bare IQ files or extended-WAV variants instead.

Relevance to SDR

WAV IQ is the format a newcomer meets first, because the mainstream Windows receivers record it by default and it opens in an audio editor for a quick look. Its self-describing sample rate makes it friendlier than a raw sample-format-ambiguous blob, and the auxi centre-frequency convention means a shared recording can be retuned correctly by the next person. The trade-offs are the size ceiling and that not every tool honours auxi.

GopherTrunk reads WAV IQ recordings through its offline engine’s -format wav decoder (also accepted as sw16/s16). It parses the RIFF/WAVE header, takes the sample rate from the header — overriding any -sample-rate flag — strips the 44-byte header, and decodes the two-channel 16-bit PCM as I-then-Q normalised by 32768. This is the same layout GopherTrunk’s own IQ writer emits and that SDRtrunk and SDR++ produce, so a WAV captured in one of those tools replays through GopherTrunk’s production receiver pipeline unchanged. Because a baseband WAV is already channelised to one signal, GopherTrunk treats it as pre-tuned: auto-tune is rejected for WAV input and a residual offset is corrected with -tune-hz instead.

In practice

The gotchas are practical ones. First, confirm the bit depth: most SDR software writes 16-bit signed PCM, but some emits 8-bit or 32-bit float, and a decoder that assumes the wrong width reads garbage. Second, mind the size ceiling — a wideband recording hits the classic 4 GB RIFF limit in minutes, so WAV suits narrowband, already-channelised captures far better than raw wideband dumps, for which a bare IQ file is the right container. Third, remember that the absolute frequency scale only survives if both the recorder and the reader honour the auxi chunk; without it the file still decodes, but at an unknown centre, so the tuned frequency is worth noting in the filename as a belt-and-braces habit alongside the header’s sample rate.

Sources

  1. WAV — Wikipedia, on the RIFF/WAVE chunked container, its fmt/data chunks, PCM channel interleaving, and the ~4 GB size limit that constrains long IQ captures. 

See also