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.
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.