v0.0¶
v0.0.24¶
Released September 5, 2024
Changes¶
Added support for NumPy 2.1.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.23¶
Released July 28, 2024
Changes¶
Added calculation of filter noise bandwidth in
sdr.FIR.noise_bandwidth()
andsdr.IIR.noise_bandwidth()
.Added calculation of threshold level above the noise power in
sdr.threshold_factor()
.Added numerical calculation of the PDF of the sum and product of random variables in
sdr.sum_distribution()
,sdr.sum_distributions()
, andsdr.multiply_distributions()
.Renamed
sdr.design_frac_delay_fir()
tosdr.fractional_delay_fir()
.Renamed
sdr.design_lowpass_fir()
tosdr.lowpass_fir()
.Renamed
sdr.design_highpass_fir()
tosdr.highpass_fir()
.Renamed
sdr.design_bandpass_fir()
tosdr.bandpass_fir()
.Renamed
sdr.design_bandstop_fir()
tosdr.bandstop_fir()
.Renamed
sdr.design_multirate_fir()
tosdr.multirate_fir()
.Allowed use of SciPy window definition using
scipy.signal.windows.get_window()
for all filter design and plotting functions.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.22¶
Released July 13, 2024
Changes¶
Added support for NumPy v2.
Increased required
galois
version tov0.4.1
.Added calculation of instantaneous power in
sdr.power()
.Refactored
sdr.binary_code()
andsdr.gray_code()
to acceptlength
, notdegree
.Reworked argument verification of entire public API.
Improved nuisance warning suppression.
Improved documentation.
Fixed minor bugs.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.21¶
Released June 15, 2024
Changes¶
Added Gold codes in
sdr.gold_code()
.Added calculation of primitive polynomials that generate preferred pair \(m\)-sequences in
sdr.preferred_pairs()
.Added check if two primitive polynomials form a preferred pair in
sdr.is_preferred_pair()
.Added plot of the discrete Fourier transform (DFT) in
sdr.plot.dft()
.Added plot of the discrete-time Fourier transform (DTFT) in
sdr.plot.dtft()
.Added plot of periodic and non-periodic auto- and cross-correlations (PACF, ACF, PCCF, and CCF) in
sdr.plot.correlation()
.Added general-purpose stem plot, styled like MATLAB, in
sdr.plot.stem()
.Added plot of Shannon’s limit on \(E_b/N_0\) in
sdr.plot.shannon_limit_ebn0()
.Added support for
python -OO
optimization.Increased required
galois
version tov0.3.9
.
Contributors¶
Justin Charlong (@jcharlong)
Matt Hostetter (@mhostetter)
v0.0.20¶
Released June 9, 2024
Changes¶
Removed
sdr.percent()
,sdr.ppm()
, andsdr.ppb()
.Added Shnidman’s minimum required SNR approximation in
sdr.shnidman()
.Added Shannon’s limit on \(E_b/N_0\) over the AWGN channel in
sdr.shannon_limit_ebn0()
.Added Shannon’s limit on \(S/N\) over the AWGN channel in
sdr.shannon_limit_snr()
.Added axis keyword argument
ax
to eachsdr.plot
function.Modified
sdr.sample_rate_offset()
andsdr.frequency_offset()
APIs to use offset and not ppm.Renamed
sdr.fspl()
tosdr.free_space_path_loss()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.19¶
Released May 27, 2024
Changes¶
Added calculation of Cramér-Rao lower bounds (CRLBs) for TOA, TDOA, FOA, and FDOA in
sdr.toa_crlb()
,sdr.tdoa_crlb()
,sdr.foa_crlb()
, andsdr.fdoa_crlb()
.Added calculation of the effective SNR of the product of two signals in
sdr.composite_snr()
.Added calculation of RMS integration time in
sdr.rms_integration_time()
.Added calculation of RMS bandwidth in
sdr.rms_bandwidth()
.Added calculation of Shannon’s capacity for the binary-input additive white Gaussian noise (BI-AWGN) channel in
sdr.biawgn_capacity()
.Renamed
sdr.to_real_pb()
tosdr.to_real_passband()
.Renamed
sdr.to_complex_bb()
tosdr.to_complex_baseband()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.18¶
Released May 12, 2024
Changes¶
Added support for coherent integration
n_c
and non-coherent integrationn_nc
to detection functionssdr.h0()
,sdr.h1()
,sdr.p_d()
,sdr.p_fa()
, andsdr.threshold()
.Added support for real/complex signals and linear/square-law detectors to
sdr.non_coherent_gain()
.Added calculation of minimum required SNR to achieve specified detection performance in
sdr.min_snr()
.Added Peebles’s approximation of non-coherent gain using a square-law detector in
sdr.peebles()
.Renamed
sdr.h0_theory()
tosdr.h0()
.Renamed
sdr.h1_theory()
tosdr.h1()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.17¶
Released March 10, 2024
Changes¶
Added theoretical detection threshold calculation in
sdr.threshold()
.Added theoretical probability of detection calculation in
sdr.p_d()
.Added theoretical probability of false alarm calculation in
sdr.p_fa()
.Added test statistic distributions in
sdr.h0_theory()
andsdr.h1_theory()
.Added support for coherent, linear, and square-law detectors.
Added support for detection of real and complex signals.
Added plot helper for detection distributions in
sdr.plot.detection_pdfs()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.16¶
Released March 3, 2024
Changes¶
Removed Python 3.7 support.
Added Kasami codes in
sdr.kasami_code()
.Added coherent integration gain in
sdr.coherent_gain()
.Added coherent gain loss in
sdr.coherent_gain_loss()
.Added maximum integration time for coherent integration in
sdr.max_integration_time()
.Added maximum frequency offset for coherent integration in
sdr.max_frequency_offset()
.Added non-coherent integration gain in
sdr.non_coherent_gain()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.15¶
Released February 4, 2024
Changes¶
Fixed bug in support for Python 3.12.
Made characteristic polynomial the default input for LFSRs, additive scramblers, and m-sequences.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.14¶
Released February 2, 2024
Changes¶
Added support for Python 3.12.
Added support for NumPy 1.26.
Pinned
galois
to v0.3.8.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.13¶
Released January 28, 2024
Changes¶
Added Fibonacci LFSRs in
sdr.FLFSR
.Added Galois LFSRs in
sdr.GLFSR
.Added maximum-length sequences in
sdr.m_sequence()
.Added additive scrambling in
sdr.AdditiveScrambler
.Added interleavers in
sdr.Interleaver
andsdr.BlockInterleaver
.Added generic continuous-phase modulation in
sdr.CPM
.Added channel models
sdr.BinarySymmetricChannel
,sdr.BinaryErasureChannel
, andsdr.DiscreteMemorylessChannel
.Added the Berlekamp-Massey LFSR synthesis algorithm in
sdr.berlekamp_massey()
.Added persistence plots in
sdr.plot.raster()
,sdr.plot.eye()
, andsdr.plot.constellation()
.Added
galois
dependency.Renamed
sdr.barker()
tosdr.barker_code()
.Renamed
sdr.hadamard()
tosdr.hadamard_code()
.Renamed
sdr.walsh()
tosdr.walsh_code()
.Renamed
sdr.zadoff_chu()
tosdr.zadoff_chu_sequence()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.12¶
Released January 7, 2024
Changes¶
Added automatic gain control in
sdr.AGC
.Added fractional delay FIR filters in
sdr.FractionalDelay
.Added generic polyphase FIR filters in
sdr.PolyphaseFIR
.Added polyphase FIR channelizers in
sdr.Channelizer
.Added linear, quadratic, and quartic polynomials to
sdr.FarrowResampler
.Added
FarrowResampler.flush()
method.Added
offset
keyword argumentsdr.plot.impulse_response()
.Added Numba dependency with minimum version 0.55.
Modified
design_multirate_taps()
andpolyphase_decompose()
APIs.Enabled Kaiser-method prototype filter design using
polyphase_order
andatten
keyword arguments to polyphase FIR classes.Standardized
interpolation
,decimation
,rate
, anddelay
properties of polyphase FIR classes.Supported span of 1 for all pulse shape functions.
Fixed bug in phase of first NCO output sample.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.11¶
Released December 14, 2023
Changes¶
Added heuristic phase error detector in
sdr.PED
.Added maximum-likelihood PED in
sdr.MLPED
.Added Hadamard codes in
sdr.hadamard()
.Added Walsh codes in
sdr.walsh()
.Added moving average FIR filter in
sdr.MovingAverager
.Added leaky integrating IIR filter in
sdr.LeakyIntegrator
.Added
FIR.group_delay()
method.Added
FIR.phase_delay()
method.Reworked
{FIR|IIR}.frequency_response()
and removed{FIR|IIR}.frequency_response_log()
.Added support for explicit time axes in
sdr.plot.time_domain(t, x)
.Added
y_axis
option to frequency-domain plots.Added
x_axis="auto"
option to frequency-domain filter plots.Added NCO output formats of sine, cosine, complex exponential, or accumulated phase.
Improved bandwidth of discrete-time differentiator in
sdr.Differentiator
.Added backward, trapezoidal, and forward discrete-time integration methods in
sdr.Integrator
.Updated Jupyter notebook examples.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.10¶
Released November 19, 2023
Changes¶
Added window-based FIR filter design in
sdr.design_lowpass_fir()
,sdr.design_highpass_fir()
,sdr.design_bandpass_fir()
, andsdr.design_bandstop_fir()
.Added fractional delay FIR filter design in
sdr.design_frac_delay_fir()
.Added ability to measure Euclidean distance in
sdr.euclidean()
.Added ability to measure Hamming distance in
sdr.hamming()
.Renamed
sdr.multirate_taps()
tosdr.design_multirate_fir()
.Renamed
sdr.polyphase_matrix()
tosdr.polyphase_decompose()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.9¶
Released November 12, 2023
Changes¶
Added polyphase rational resampling in
sdr.Resampler
.Added discrete-time FIR differentiating filters in
sdr.Differentiator
.Added discrete-time IIR integrating filters in
sdr.Integrator
.Added
sdr.percent()
,sdr.ppm()
, andsdr.ppb()
.Moved
sdr.DDS
functionality intosdr.NCO
. Removedsdr.DDS
.Added ability to seed the channel models.
Added option to compute measurements along a specified axis.
Added option to return measurements in decibels.
Replaced
pylint
withruff
.Replaced
black
withruff
.Improved type annotations.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.8¶
Released September 4, 2023
Changes¶
Added minimum-shift keying (MSK) in
sdr.MSK
.Added pulse shape customization to linear modulations.
Added theoretic detection performance of a matched filter in
sdr.ReplicaCorrelator
and an energy detector insdr.EnergyDetector
.Added Albersheim’s minimum required SNR approximation in
sdr.albersheim()
.Added plotting of receiver operating characteristic (ROC) curves in
sdr.plot.roc()
.Added plotting of probability of detection curves in
sdr.plot.p_d()
.Added plotting of phase trees of continuous-phase modulation (CPM) in
sdr.plot.phase_tree()
.Added sensible time and frequency units to plots.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.7¶
Released August 27, 2023
Changes¶
Added generic linear modulation schemes in
sdr.LinearModulation
.Added \(\pi/M\) PSK modulation in
sdr.PiMPSK
.Added offset QPSK modulation in
sdr.OQPSK
.Added rectangular pulse shapes in
sdr.rectangular()
.Added half-sine pulse shapes in
sdr.half_sine()
.Added pulse shaping in linear modulations. Now
map_symbols()
anddecide_symbols()
operate on 1 sample per symbol andmodulate()
anddemodulate()
operate on multiple samples per symbol.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.6¶
Released August 20, 2023
Changes¶
Added raster plots in
sdr.plot.raster()
.Added eye diagrams in
sdr.plot.eye()
.Added upsampling (without anti-aliasing filtering) in
sdr.upsample()
.Added downsampling (without anti-aliasing filtering) in
sdr.downsample()
.Added wavelength calculation in
sdr.wavelength()
.Supported real sinusoid mixing.
Supported returning measurements in dB.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.5¶
Released August 13, 2023
Changes¶
Added polyphase FIR decimator in
sdr.Decimator()
.Added multirate FIR filter design in
sdr.multirate_taps()
.Added polyphase decomposition in
sdr.polyphase_matrix()
.Added linear to decibel conversion in
sdr.db()
.Added decibel to linear conversion in
sdr.linear()
.Added linear and zero-order hold polyphase FIR interpolators.
Added a
state
property to FIR filters.Added a
flush()
method to FIR filters.Added support for passing filter objects into filter plotting functions.
Added ability to center or offset a time-domain plot.
Improved the string representation of classes.
Renamed
sdr.plot.frequency_response()
tosdr.plot.magnitude_response()
.Removed superfluous methods like
FIR.filter()
and replaced withFIR.__call__()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.4¶
Released August 6, 2023
Changes¶
Added error vector magnitude measurement in
sdr.evm()
.Added complex mixing (frequency translation) in
sdr.mix()
.Added real passband to complex baseband conversion in
sdr.to_complex_bb()
.Added complex baseband to real passband conversion in
sdr.to_real_pb()
.Added binary and bipolar Barker sequences in
sdr.barker()
.Added complex-valued Zadoff-Chu sequences in
sdr.zadoff_chu()
.Added theoretical BER/SER for DE-PSK.
Fixed theoretical BER/SER for PSK.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.3¶
Released July 30, 2023
Changes¶
Added PSK modulation in
sdr.PSK
.Added symbol mapping:
sdr.binary_code()
,sdr.gray_code()
.Added differential codes:
sdr.diff_encode()
,sdr.diff_decode()
.Added a FIR interpolating filter in
sdr.FIRInterpolator
.Added error rate measurement in
sdr.ErrorRate
.Added signal measurement functions:
sdr.energy()
,sdr.peak_power()
,sdr.average_power()
,sdr.papr()
,sdr.peak_voltage()
,sdr.rms_voltage()
,sdr.crest_factor()
.Added channel models:
sdr.bec()
,sdr.bsc()
,sdr.dmc()
.Added signal impairments:
sdr.awgn()
,sdr.frequency_offset()
,sdr.sample_rate_offset()
,sdr.iq_imbalance()
.Added probability functions:
sdr.Q()
,sdr.Qinv()
.Added link budget functions:
sdr.fpsl()
,sdr.parabolic_antenna()
.Added channel capacity functions:
sdr.awgn_capacity()
,sdr.bec_capacity()
,sdr.bsc_capacity()
.Added SNR conversion functions:
sdr.ebn0_to_esn0()
,sdr.ebn0_to_snr()
,sdr.esn0_to_ebn0()
,sdr.esn0_to_snr()
,sdr.snr_to_ebn0()
,sdr.snr_to_esn0()
.Added plotting functions for modulation:
sdr.plot.ber()
,sdr.plot.ser()
,sdr.plot.constellation()
,sdr.plot.symbol_map()
.Added more filter plotting functions:
sdr.plot.phase_response()
,sdr.plot.phase_delay()
.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.2¶
Released July 16, 2023
Changes¶
Added finite impulse response (FIR) filters in
sdr.FIR
.Added pulse shapes:
sdr.raised_cosine()
,sdr.root_raised_cosine()
,sdr.gaussian()
.Added plotting helper functions in
sdr.plot
:sdr.plot.time_domain()
sdr.plot.periodogram()
,sdr.plot.spectrogram()
sdr.plot.filter()
,sdr.plot.frequency_response
,sdr.plot.group_delay()
,sdr.plot.impulse_response()
,sdr.plot.step_response()
,sdr.plot.zeros_poles()
Added measurement functions:
sdr.papr()
,sdr.crest_factor()
.Added bit packing and unpacking functions:
sdr.pack()
,sdr.unpack()
.Added hexdump helper function in
sdr.hexdump()
.Improved type annotations.
Contributors¶
Matt Hostetter (@mhostetter)
v0.0.1¶
Released July 9, 2023
Changes¶
Added Farrow arbitrary resampling in
sdr.FarrowResampler
. (#1)Added infinite impulse response (IIR) filters in
sdr.IIR
. (#3)Added numerically controlled oscillators (NCO) in
sdr.NCO
. (#4)Added direct digital synthesizers (DDS) in
sdr.DDS
. (#4)Added 2nd order, proportional-plus-integrator loop filters in
sdr.LoopFilter
. (#4)Added closed-loop PLL analysis in
sdr.ClosedLoopPLL
. (#5)
Contributors¶
Matt Hostetter (@mhostetter)