Resolves an issue with the previous implementation where the tuner
editor was being refreshed repeatedly to update the lock state for the
tuner, rendering the editor almost completely unusable.
Now updates only the frequency control and the sample rate control to
reflect the tuner's lock state.
Adds capability to disable spectral display.
Adds right-click context
menu items to disable display and/or reenable display by selecting
another tuner.
Adds view menu items to disable spectral display or show a tuner.
Persists spectral display enabled state across application run sessions.
The C4FM and LSM decoders were issuing a PLL reset with each new
channel that was allocated, causing any existing decoding channels to
be disrupted. Decoding re-sync delays or inability to recapture the
signal for decoding would likely result as the tuner's overall PPM
caused misadjustment in the channel.
Resolved a NPE that was occurring in the FrequencyController for
sample rate changes.
sample rates.
Resolves issue in PolyphaseChannelManager responding to sample rate
changes in the tuner. The manager now recreates the channelizer when
needed if the tuner's sample rate has changed since the last time the
channelizer was used.
Updates the Tuner selection view to reflect tuner lock state. Updates
the tuner editors to enable/disable frequency controller and sample
rate controls according to the tuner's lock state.
Refactors a MixerReader instance from the RealMixerSource so that it
can be reused for both real and complex data outputs.
Updates RealMixerSource to use refactored MixerReader and use a default
sample rate of 8 kHz.
Updates the ComplexMixer to use the refactored MixerReader.
Updates the FCD 1/2 tuners for compatibility with the new ComplexMixer.
Removes several unused classes.
channelizer sub-system is functionally complete.
Updated the channelizer and synthesizer filter design methods to use a
Kaiser windowed Nyquist filter. Updated the synthesizer filter design
to use a new cutoff frequency of 105% of the channel bandwidth to
resolve a slight dip in the synthesized channel gain at the channel
union region.
Updated the 2 channel output processor to use a low-pass filter that
is designed for the runtime channel sample rate versus hard-coded 12.5
khz.
Testing and redesign continues ...
that is currently up/down converting the signal of interest, but the
synthesizer is not correctly combining the original two channels.
Some experimentation with the tap count for the channelizer indicates
that we can cut the tap count in half and still have decent decoding
on the P25 decoder when paired to an aligned channelized output. The
2-channel synthesized output decodes partially, but needs more work.
Resolved issue with channel gain in the channelizer that was making the
sample values so small that they were registering as zero when converted
from float to 16-bit int value in the complex wave recorder.
updates the LSM decoder to follow the same design pattern. Adds LSM
decoder support to the demodulator viewer application. The current
symbol timing gain for LSM is set too high -- is using the C4FM gain
and causes too much fluctuation in the timing error.
so that on startup, the application attempts to source the channel from
the preferred tuner.
If the tuner is currently not available, or if the tuner cannot source
the channel, then the next available tuner is selected.
when the tuner controller indicates that there is a center DC spike
blocked region or when the tuner has clipped outer spectral regions
resulting in less than 100% usable bandwidth.
produces a significant reduction in memory usage, especially for tuners
like the airspy and hackrf that produce 10/20 MSPS sample rates. This
is observed to be around 66% reduction in peak memory usage and provides
a more stable memory utilization across time reducing stress on the
garbage collector.
Use of these reusable memory buffers will be pushed further down into
the processing chain modules to ensure we keep new object creation
to the lowest levels possible.
TestTuner and TestTunerController implementations. This implementation
only has support for channels that are completely centered within a
channelizer output. Two output slice stitching to form a composite
channel will be implemented next.
Initial profiling indicates that the FFT function within the polyphase
channelizer is now the dominant processing workload - 28% cpu loading
when channelizing a 10 MHz sample rate input into 800 channels running
at 25.0 kHz each. This is ideal for offloading to an OpenCL kernel and
running on a GPU.
complex buffer listeners. Removes complex buffer broadcast support from
the source manager and renames it to channel source manager to convey
that it's only responsible for providing channels from the tuner.
calculator must be updated immediately any time the tuner's center
frequency changes so that a channel can be allocated immediately. So,
I changed source event handling to two parts where the channel calculator
is immediately updated and the channelizer configuration is deferred so
that it can happen on the buffer processor execution thread and we can
avoid any sync() locking on the channelizer or polyphase channel
sources.
messages and events can be accurately timestamped, and more importantly,
allocated traffic channels can request to be pre-loaded with buffered
samples to ensure that traffic channels don't miss any samples that
are currently missed due processing latency inherent in current buffer
sizing. This should reduce the clipping of starting messages or voice
on the traffic channels.
Restructures processing path for tuner frequency and sample rate change
events. The tuner now embeds these events in the sequence of buffers
that are generated immediately after the event occurs since those are
the buffers that will be impacted by the change. Previously, the change
event would be broadcast throughout the system and would impact any
buffered/cached buffers. This also reduces the number of source event
change listeners that have to be managed. Note: this change is not yet
implemented in all tuners ... only in the TestTuner implementation.
Updates the polyphase channelizer to now buffer channel results and then
dispatch the buffer to the channel output processors to improve efficiency
of using float arrays versus single value complex float processing.
center frequency each time we allocate a new DDC/channel. Adds
support for broadcasting channel count change source events so that the
tuner can accurately convey sourced channel counts via tuner events.
Completes changeover of polyphase channel manager to support arbitrary
bandwidth channels. The new approach provides greater compatibility
across any tuner sample rates. Likewise, all decoders will have to be
updated to adapt to any channel sample rate, although channel bandwidths
will be at least 12.5 kHz and likely no more than 25.0 kHz, with a 2x
oversampling that produces channel sample rates in range 25.0 - 50.0
kHz.