Summary of important user-visible changes for octave-rf:

## Version 0.1.1 (2026-07-26)

### Bug fixes

- `cascadesparams`, `deembedsparams`, `embedsparams`: struct returns now
  carry the complete sparameters object surface (`Parameters`,
  `Frequencies`, `Impedance`, `NumPorts`).  Previously only the first two
  fields were set, which broke MATLAB-written code reading `.NumPorts`
  on a cascade result (e.g. IEEE P370 `IEEEP370Zc2xThru.m`).
  Fixes GitHub issue #2.
- `cascadesparams`, `deembedsparams`: the reference impedance of struct
  inputs is now validated and propagated.  Inputs referenced to
  different impedances raise an error instead of silently producing a
  result mislabeled as 50 ohm (MATLAB parity; the T-matrix cascade is
  only valid at one common reference).  Raw arrays are assumed 50 ohm
  per the package convention.
- `sparameters` Form `sparameters(s_obj, z0_new)`: renormalization now
  starts from the input's stored `.Impedance` instead of a hardcoded
  50 ohm.  Previously, renormalizing a non-50-referenced struct (e.g.
  75 -> 50) was a silent no-op that returned mislabeled parameters.
  Chained renormalizations (50 -> 75 -> 60) now equal the direct path
  to machine precision.
- Seven new regression tests guard these paths (BIST 107 -> 114).

### New functions

- `ifft` — shim accepting MATLAB's `ifft(x, 'symmetric')` flag.

## Version 0.1.0 (2026-04-17)

Initial release.

### Functions (26 total)

**S-parameter objects:**
- `sparameters` — S-parameter struct constructor; supports `sparameters(filename)`
  for Touchstone file reading (MATLAB-compatible), `sparameters(P, f)`,
  `sparameters(P, f, z0)`, and `sparameters(obj, z0_new)` for renormalization.
  Struct includes `.Parameters`, `.Frequencies`, `.Impedance`, `.NumPorts`.
- `rfparam` — extract single S-parameter element by port indices

**Chain scattering (T) parameters:**
- `s2t` — S to T-parameters (MATLAB-compatible element ordering)
- `t2s` — T to S-parameters

**Network operations:**
- `cascadesparams` — cascade two or more 2-port networks via T-matrix multiplication
- `deembedsparams` — de-embed fixture S-parameters from a measured network
- `embedsparams` — embed a DUT inside fixture S-parameters

**Parameter conversions (2-port and N-port):**
- `s2z` / `z2s` — S <-> impedance (Z) parameters
- `s2y` / `y2s` — S <-> admittance (Y) parameters
- `s2abcd` / `abcd2s` — S <-> ABCD (chain/transmission) parameters
- `s2h` / `h2s` — S <-> hybrid (H) parameters
- `s2g` / `g2s` — S <-> inverse hybrid (G) parameters

**Mixed-mode (differential pairs):**
- `s2sdd` — single-ended to differential-mode S-parameters
- `s2scc` — single-ended to common-mode S-parameters
- `s2smm` — single-ended to full mixed-mode matrix; supports MATLAB's
  `[Sdd,Sdc,Scd,Scc] = s2smm(S)` 4-output form
- `smm2s` — mixed-mode to single-ended S-parameters

**Port operations:**
- `snp2smp` — reorder ports; accepts both `snp2smp(S, order)` and
  MATLAB's `snp2smp(S, z0, order, z0_term)` 4-argument form
- `renormsparams` — renormalize S-parameters to a different reference impedance

**I/O:**
- `fromtouchn` — Touchstone file reader (S1P through S99P, Touchstone 1.0)

**MATLAB compatibility shims:**
- `ifft_symmetric` — equivalent of MATLAB's `ifft(x, 'symmetric')`
- `round` — extends Octave's built-in `round` with MATLAB's `round(x, n)` syntax

### Validation

- 100 built-in self-tests (BIST), 0 failures
- Cross-validated against MATLAB R2025b RF Toolbox and scikit-rf 1.11.0
  to floating-point precision (108/108 pair-wise tests pass)
- Backwards-compatibility cross-validated against MATLAB R2020b
  (9.9.0.2037887, RF Toolbox) — 36/36 pair-wise tests pass
  (144/144 total across all comparison pairs; see
  doc/VALIDATION_REPORT_MATLAB_R2020b.md)
- All textbook references verified against physical books (Pozar,
  Pupalaikis, Hall & Heck)
