Supported file formats

cicwave dispatches on file extension. Any extension not listed below falls through to the ngspice raw reader, so non-standard suffixes (e.g. .raw0, .bin) on ngspice output usually still work.

Simulation / measurement formats

Format Extension Description
ngspice raw .raw (and unknown extensions) Binary simulation results, parsed by ngraw.py
Xyce print .prn Sandia Xyce print/probe waveform output
Whitespace text .dat, .spe, .cou, .chi Eldo .cou/.chi, ngspice .dat, generic space/tab columns; # comments stripped by default
VCD .vcd Value Change Dump — digital simulation waveforms
LitePoint IQ .iqvsa LitePoint IQxstream / IQfact IQ capture data
SigMF .sigmf-meta, .sigmf-data, .sigmf-data.zip, .sigmf SigMF recordings (open either half of the pair, or a .sigmf archive). A zipped dataset (<name>.sigmf-data.zip) is read in place without unpacking. litepoint:scale converts counts to analyser units; litepoint:channel_offset_hz / litepoint:spectrum_inverted put a low-IF capture’s FFT on the RF axis. Each recording also gets magnitude views: mag (|iq|) and power_dBm (dBm for LitePoint analyser captures, matching their burst annotations), power_dBFS (ADC counts with a stated full scale) or power_dB. All core:datatypes (cf32_le, ci16_le, cu8, rf64_be, …), multi-channel and per-capture header bytes. Gives a complex iq column plus I/Q, a time axis from core:sample_rate, and the FFT is centred on the first capture’s core:frequency
STDF .stdf, .stdf.gz Semiconductor ATE test results (SEMI E10/V4) — parametric (PTR) results per part/site, gzip auto-detected
Raw counter .u32 Bare little-endian uint32 counter records with a .meta.json sidecar giving the tick length and periods per sample; converted to Hz or ns on load, with the dead time between capture chunks preserved
Audio .wav, .flac, .ogg, .opus, .aif/.aiff, .mp3, … Audio recordings. .wav is read natively (PCM 8/16/24/32-bit, 32/64-bit float, WAVE_FORMAT_EXTENSIBLE, RF64); the other formats need pip install cicwave[audio] (soundfile/libsndfile). Samples are in full scale (±1) with a time axis in seconds, one column per channel: audio (mono), left/right (stereo) or ch0, ch1, … The sample rate prefills the FFT and analysis dialogs

Audio

Open an audio file like any other waveform: cicwave recording.wav. WAV needs nothing extra; for the other formats install the optional dependency:

pip install "cicwave[audio]"   # soundfile / libsndfile
Encoding WAV (built in) Through soundfile
PCM 8/16/24/32-bit, float 32/64 ✓ ✓
WAVE_FORMAT_EXTENSIBLE, RIFX (big-endian), RF64 (> 4 GB) ✓  
ADPCM, A-law, µ-law WAV   ✓
FLAC, Ogg Vorbis/Opus, AIFF/AIFC, MP3, AU, CAF, W64   ✓

The file loads as a time column in seconds plus one column per channel: audio for mono, left/right for stereo, ch0, ch1, … beyond that. Integer samples are scaled to full scale (±1), so a sine at 0 dBFS peaks at 1.0. The sample rate is passed on to the FFT, SNR/ENOB and constellation dialogs, and the format details (encoding, bits, channels) are kept in df.attrs['cicwave_audio'].

Tabular text formats

Format Extension Description
CSV .csv Delimiter auto-detected from , ; \t \| (override with --csv-sep; pyarrow when available)
TSV .tsv, .txt Tab separated values
Fixed-width .fwf Fixed-width columnar text (pandas.read_fwf)
HTML .html First <table> in the document
XML .xml pandas.read_xml
JSON .json pandas.read_json records

Spreadsheet formats

Format Extension Description
Excel .xlsx, .xls Microsoft Excel workbooks (sheet selectable with --sheet)
OpenDocument .ods LibreOffice / OpenOffice spreadsheets (requires odfpy)

Big-data / binary formats

Format Extension Description
Parquet .parquet Columnar storage (requires pip install pyarrow)
Feather .feather Arrow IPC file format (requires pip install pyarrow)
HDF5 .h5, .hdf5 Hierarchical data (requires pip install tables)
Pickle .pkl, .pickle Serialized pandas DataFrame

Statistical packages

Format Extension Description
Stata .dta, .stata Stata data files (pandas.read_stata)
SAS .sas7bdat SAS transport/data files (pandas.read_sas)
SPSS .sav SPSS data files (requires pyreadstat)

Automatic unit detection

When a column name carries a unit suffix, cicwave picks it up so axis labels and engineering-notation tick formatting work without any manual configuration. Recognised separators are _, ` , /, [], (), or {}`:

Column name Detected unit Data scaling Axis label
Frequency_MHz Hz × 1e6 “Frequency”
Amplitude [dBm] dBm × 1.0 “Amplitude”
delay_ps s × 1e-12 “delay”
I_uA A × 1e-6 “I”
phase / deg deg × 1.0 “phase”

SI-prefixed base units (Hz, V, A, s, W, F, H, Ω/ohm) with prefixes y/z/a/f/p/n/u/µ/m/k/K/M/G/T/P/E are rescaled to the base unit so ticks display nice prefixes (e.g. “5.726 GHz”) regardless of the unit the data was stored in. Log-domain units (dB, dBm, dBV, dBuV, dBc, dBFS, dBi, dBA) are kept as the literal string and never rescaled. SPICE-style names like v(out) and i(M1.d) are left untouched.

String-based columns are supported as categorical axes (labels rotated 90 degrees).