Skip to content

Releases: JuliaGNSS/SignalChannels.jl

v7.0.0

Choose a tag to compare

@zsoerenm zsoerenm released this 13 Jul 21:40

7.0.0 (2026-07-13)

  • feat!: default to Matrix buffers with optional backing array type (dfd1e97)

Bug Fixes

  • require PipeChannels 1.0.1 for the iterate/close race fix (a49755e)
  • store matching buffers by reference in put! (zero-copy) (502e88b)

BREAKING CHANGES

  • SignalChannel is now SignalChannel{T,N,M}; the default eltype
    is Matrix{T} instead of FixedSizeMatrixDefault{T}. Code relying on take!
    returning a FixedSizeMatrixDefault must construct channels with the explicit
    backing type SignalChannel{T,N,FixedSizeMatrixDefault{T}} or adapt to Matrix{T}.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

v6.2.2

Choose a tag to compare

@zsoerenm zsoerenm released this 17 Feb 08:55

6.2.2 (2026-02-17)

Bug Fixes

  • return input channel directly when rechunk size matches (89f2ba6)

v6.2.1

Choose a tag to compare

@zsoerenm zsoerenm released this 10 Feb 11:56

6.2.1 (2026-02-10)

Bug Fixes

  • use eager value reading in channel_combine tests (92dae31)

v6.2.0

Choose a tag to compare

@zsoerenm zsoerenm released this 10 Feb 10:54

6.2.0 (2026-02-10)

Features

  • add mux and add functions for combining SignalChannels (83a47fb)

v6.1.0

Choose a tag to compare

@zsoerenm zsoerenm released this 23 Jan 13:39

6.1.0 (2026-01-23)

Features

  • add Val{N} parameter to tee for N-way channel splitting (38a9f0a)

v6.0.0

Choose a tag to compare

@zsoerenm zsoerenm released this 08 Jan 15:36

6.0.0 (2026-01-08)

  • refactor!: make SignalChannel{T,N} with compile-time channel count (afdebd7)

Bug Fixes

  • update soapysdr_ext.jl test to use new SignalChannel{T,N} API (ebd2b52)

Features

  • integrate rechunk into stream_data for flexible chunk sizes (b385343)

BREAKING CHANGES

  • SignalChannel API changed from runtime to compile-time
    channel count parameter.

Before: SignalChannel{T}(num_samples, num_channels, buffer_size)
After: SignalChannel{T,N}(num_samples, buffer_size)

This enables:

  • Zero-allocation rechunking via compile-time loop unrolling
  • Full type specialization throughout the signal processing pipeline
  • ~2000 M samples/s throughput in benchmarks

Changes:

  • SignalChannel{T} now defaults to SignalChannel{T,1}
  • Added num_antenna_channels(chan) accessor function
  • Updated RechunkState to use SignalChannel{T,N} type parameter
  • Added compile-time API detection in benchmarks for backward compat
  • Updated all tests and extensions for new API

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 noreply@anthropic.com

v5.0.0

Choose a tag to compare

@zsoerenm zsoerenm released this 05 Jan 14:23

5.0.0 (2026-01-05)

  • refactor!: use PipeChannel instead of Channel for lock-free performance (a151677)

BREAKING CHANGES

  • SignalChannel now uses PipeChannel internally instead of
    Julia's built-in Channel. This provides zero-allocation performance in the
    hot path but requires exactly one producer and one consumer thread.

Changes:

  • SignalChannel now wraps PipeChannel instead of Channel
  • Default buffer size changed from 0 to 16 (PipeChannel requires positive capacity)
  • Removed rechunk_lockfree (now redundant since rechunk is lock-free)
  • Removed locking methods (lock, unlock, trylock) as PipeChannel is lock-free
  • Updated all tests and benchmarks to use PipeChannel for generic channel tests
  • Added PACKAGE_VERSION support in benchmarks for version-aware testing
  • PipeChannel now subtypes AbstractChannel{T} for compatibility

v4.0.1

Choose a tag to compare

@zsoerenm zsoerenm released this 05 Jan 10:30

4.0.1 (2026-01-05)

Bug Fixes

  • benchmark: use FixedSizeMatrixDefault to avoid put! conversion allocations (c002824)

v4.0.0

Choose a tag to compare

@zsoerenm zsoerenm released this 19 Dec 12:50

4.0.0 (2025-12-19)

  • refactor!: remove put_or_close! in favor of bind for error propagation (24c4f3f)

BREAKING CHANGES

  • put_or_close! is no longer exported. Use plain put!
    instead - bind() handles error propagation when downstream closes.

The put_or_close! function was redundant - bind(in, task) already
handles error propagation when a processing task fails due to a
closed downstream channel. Simplified tee, rechunk, and membuffer
to use plain put! calls.

Added test verifying that errors propagate upstream via bind when
a downstream channel is closed.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 noreply@anthropic.com

v3.0.9

Choose a tag to compare

@zsoerenm zsoerenm released this 15 Dec 11:51

3.0.9 (2025-12-15)

Bug Fixes

  • buffer pool aliasing bug in rechunk and stream_data (4ab734e)