Revision History of the Audio Spectrum Analyzer / Spectrum Lab
Original file location: ?\cbproj\SpecLab\html\revision.htm .
'Primary' web location: www.qsl.net/dl4yhf/speclab/revision.htm
V2.96, anno 2021:
- minor bugfix in the wave-file saving process (optional
inversion of the quadrature channel's sign)
- being sick of Windows 10, further development of this
Borland C++Builder-based project almost came to a halt.
V2.95, anno 2020:
- SL's integrated web server (HTTP server) can now act as an OpenWebRX-compatible server
V2.93 .. 2.94, anno 2018:
- Optional display of the broadband spectrum, which some Icom radios
can deliver via CAT control (CI-V) interface.
- Automatic redrawing of the waterfall after modifying parameter suppressable
- Calendar date emitted in the error history (besides the time of day)
- Interpreter commands stream.start_input / stop_input to control audio streams
V2.92, anno 2017:
- Minor bugfixes in the configuration window
- Tried to improve the Sample rate-
and frequency calibration (recognize and discard bad GPS sync pulses)
V2.91, October 2016:
- Non-differential encoding for experimental (B)PSK transmissions
- Modified Triggered Audio Recorder
- New sample formats received over the serial port (planned for a microcontroller based multi-channel ADC)
V2.90, October 2015:
- New method to connect external A/D converters via 'COM' port
- Modified the WAVE-input (default method for soundcards),
because some drivers insisted on using the WAVEFORMATEX
instead of the WAVEFORMATEXTENSIBLE (needed for 24 bit resolution).
- Fixed a few cosmetic bugs (truncated text depending on font scaling)
- Added a DTMF decoder / encoder in SL's digimode terminal.
First used to remotely control a VHF receiver, to switch between
four different 'bat monitoring' frequencies .
V2.82, May - July 2015:
- Modified triggered audio recorder
- Modified COM port enumeration because a stupid Bluetooth driver
blocked the application for many seconds
- Spectrum buffer can be retrieved as JSON object via web server
- Different buffer sizes for audio processing and soundcard I/O
- Modified Audio-I/O DLL interface
(bugfix in the configuration dialog)
- Support for RTL-SDR (via ExtIO-DLL)
- Improved speed, at the expense of compatibility with ancient 80486 processors
V2.81, January 2015:
- Output switches in the circuit window
- Modified command line interpreter (uses RPN to evaluate expressions)
- History of recently used configuration files (in the main menu under "File")
- Wave audio files with floating point samples (besides the normal integer formats)
V2.80, December 2014:
- Debugging tools for the 'Conditional Actions' (breakpoints, single-step,
inspection of variables via mouse pointer)
V2.79, June 2013 - May 2014:
- HTTP-based audio stream server integrated in Spectrum Lab
(can provide Ogg/Vorbis compressed streams for a limited number of clients)
- new flat-top FFT windows with exceptional dynamic range
- Modifed time domain scope (Start/Stop via hotkeys + menu, modified zoom, modified trigger)
- Spectrum buffer can be retrieved as JSON object via SL's web server.
- Different buffer sizes for audio processing and soundcard I/O.
- Modified Ogg/Vorbis stream reader to support the Alfred Wegener Institute's PALAOA audio stream
V2.78, April-May 2013:
- Speed improvements for 'very long FFTs' (still could be
faster, if the FFT was done in the GPU not the CPU..)
- The FFT-based audio filter can now be controlled via the
main frequency scale ("WebSDR-style").
- Modified the allocation of the Spectrum Buffer
(formerly, the buffer size was defined as the
'number of lines on the waterfall', now the buffer size
is measured in MByte, so the number of spectrogram lines
kept in memory for the waterfall display also depends
on the FFT size).
- Changed the frequency input fields to make them more
suitable for tuning software defined radios.
Because changing the frequency digits via cursor up/down,
or via mousewheel is inappropriate for other applications,
the 'behaviour' of the frequency input fields can be
changed as described here.
- Fought a battle with Windows 7. The font "Arial Narrow",
which was used in a lot of forms, doesn't seem to exist
in the standard installation, rendering some of SL's
dialog windows useless, or at least 'difficult to use'.
-> Removed "Arial Narrow" from all forms.
- The old "sndvol32.exe" also doesn't exist in Windows 7,
and was replaced by a lousy "sndvol.exe" which cannot be
controlled through command line arguments anymore.
-> Invoking the audio volume settings is impossible now.
Thank you, Microsoft.
- Added support for Winrad-compatible "ExtIO"-DLLs.
So far, only tested with SDR-IQ and PERSEUS .
- Modified GPS synchronisation, modified WM_COPYDATA-based
audio interface (now supports floating point samples),
and new internal scaling of samples (normalized to +/- 1) .
- Modified the parser for NMEA strings
(now supports GPZDA and a few others).
- Modified date-and-time / timezone handling.
By default, Spectrum Lab now asks the operating system
for a time in UTC, and for the offset between UTC and
the time displayed in the graphic user interface.
- Added support for the NDB frequency list by Sean, G4UCJ
(look for Eu_NDB_list.txt on Sean's site) .
- Added support for timestamped VLF streams based on Ogg/Vorbis,
compatible with Paul Nicholson's VLF RX tools.
V2.77, June-August 2011:
- Some minor improvements for 'very slow' spectrograms
(with a very large frequency resolutions, in the uHz range).
- Support for GPS receivers with sync pulse ("pps") output.
NMEA data from a GPS receiver now decoded via soundcard,
using the edge of the sync pulse as an optional reference
to measure the soundcard's momentary sampling rate.
V2.76, July-October 2010
- Modified some of the sampling-rate correction algorithms..
but some still consume too much CPU power to be useful
at higher sampling rates (for SDRs like Perseus).
- New 'ultra slow QRSS modes' with frequency resolutions
in the uHz range, used by radio amateurs below 9 kHz
(search the net for 'DK7FC VLF' for example).
These modes only work with stabilitzed oscillators.
Because a 'complete' FFT with 40 uHz bin width requires
about 7 hours (!) of data, the data for the FFT can be
padded with zeroes, to calculate spectra before the full
frequency resolution is reached.
- New installer with different paths to the 'executable'
(which doesn't have write permission under Vista & Co)
and to Spectrum Lab's 'data folders'
(which require write permission during runtime, and are
therefore placed in some 'Application Data' directory)
[ LATER DROPPED THE NSIS-BASED INSTALLER BECAUSE
IT DIDN'T WORK PROPERLY WITH SOME OTHER WINDOWS
- Added support for audio files with 24 bits per sample
- Added support for Ogg / Vorbis audio files
- Added a GPS (NMEA) decoder for logging the geographic
position (used for 'field tests' with Spectrum Lab)
- Planned: Audio streams with precise timestamps
- Added a few new interpreter commands and -functions .
V2.75, January-May 2010
- New file formats supported, for example SETI's raw
8-bit I/Q file with 8.7 MSamples/second .
- Optional file processing using multiple threads,
which may be faster on dual or quad core CPUs .
- Rearranged the main menu items to avoid scrolling
on small screens (better suited for netbooks) .
All 'test circuit components', which were in the
'View/Windows' menu, were moved into the Components menu.
- Modified the MSK demodulator/decoder
- Added a DDE server and client (Dynamic Data Exchange) .
- Increased the number of channels for the watch window/
curve plotter to 100, and added the plotter's split screen
option. First used to compare the GPS correction data
from two different DGPS beacons; details in dgps_dec.htm .
- Implemented a highly experimental, FFT-based chirp filter
(as part of any DSP blackbox, see circuits.htm#chirp_filter)
- Began to completely rewrite the time domain scope,
which may render some of the rarely used older functions
unusable .. but more flexible now (scolling, zooming) .
- Improved the sample rate detector (Goertzel filters,
and support for MSK - minimum shift keyed- references).
- Added the pam() function (phase- and amplitude monitors);
details in html/phase_amplitude_monitor.htm . Intention:
Together with the new sample rate detector, this function
can be used to observe diurnal phase variations on VLF
(ionospheric effects; ground- and skywave interference).
V2.74, June-October 2009
- Implemented a crude RTCM SC-104 decoder in the digimode
terminal to observe MW DGPS beacons (around 300 kHz).
- Implemented the reassigned spectrogram (experimental) .
- New "Radio Station Frequency List", see html/freqlist.htm.
- fixed a bug in the VCL (FORMS.PAS; SetWindowToMonitor)
- fixed a problem which caused a "handle leak"
- began to modify the WFM demodulator to support I/Q input
- Filter plugins (DLLs) can paint into the spectrum display now
V2.73, Spring 2009
- Various modifications during the Earth-Venus-Earth test
by AMSAT-DL in Bochum; see file earth_venus_earth.htm .
- New configuration "EMU0202_as_lf_radio.usr" which turns
a soundcard running at 192 kSamples/second into a longwave
receiver (tested with an EMU0202, thus the name).
Filter controlled through the markers on the frequency scale.
V2.72 b8, January 2009
- Added the experimental "correlogram",
which is an optional channel for the main spectrogram
(and runs side-by-side with the normal spectrogram).
V2.72 b6..b7, October / November 2008
- Thanks to the Winamp (2) plugin system, Spectrum Lab can
read (analyse) MP3 files now, and possibly a few others.
Details in the manual (html), file "waplugins.htm".
- Changed the internal thread priorities; the old ones were
ok for win XP & Linux/Wine, but not for Vista .
- Modified the digimode terminal to send text through an
interpreter command: digimode.tx() .
- First steps towards an improved Time Signal Decoder,
with a half-hearted attempt to support WWVB .
V2.72 b0, July / August 2008
- Lots of internal changes to eliminate the use of INI-files
for the configuration (one some machines, they were terribly
slow). Completely rewrote the structure of the "configuration
data" for this purpose, possibly introducing a couple of
new bugs. Threw out some FIR- and IIR filters from the
filter control panel, since the FFT-based filter is now
doing a better (and easier) job.
- SDR-IQ (and possibly SDR-14) can now be connected through
TCP/IP for remote operation, besides the local USB port.
- Added the "stereo spectrogram" option in the quick settings
menu, under "Natural Radio / Animal voices".."AWI PALAOA" .
One channel sets the red colour component for the spectrogram,
the other adds the cyan component; if both signals have the
same amplitude (or magnitude), the result is a shade of gray.
V2.71 b8..b9, March 2008
- Added support for PERSEUS (a direct sampling LF..HF receiver
by Nico Palermo (IV3NMV) / Microtelecom .
- Added the possibility to "play back" the contents of the
spectrogram buffer, using an inverse FFT to convert the
spectra back into audible signals .
- Added the 'hard limiter' in the signal processing blackboxes.
V2.71 b6..b7, January 2008
- Improved the integrated HTTP server (optional bandwidth limiter,
reduced CPU load due to less frequent update of the captured
V2.71 b2..b5, December 2007
- Individual parameters for the channels of the spectrum analyser:
* center frequency (for complex FFT with decimation),
* frequency offset (which is added to the displayed value),
* contrast and brightness value for the spectrogram .
- Some changes in the built-in HTTP server to conserve bandwidth
and reduce the CPU load. More robust when multiple clients
connect to it through the internet (though never planned as a
fully fledged web server.. see GM4ISM's 500 kHz display).
- Visual AGC for the spectrogram .
V2.71 b0..b1, Autumn 2007
- Re-introduced different columns in the sample rate calibration table,
after discovering that the sampling rates for in- and output
of the author's notebook were "slightly different" !
- Output resampling function supports *any* non-integer ratio
between input and output sampling rate for this reason.
(previously, the same resampling function was only used
if the input was *not* a soundcard).
- Completely modified the spectrum buffer structure, in order to
get the "Spectrum Replay" function working :
- Added the "Spectrum Replay" function, which uses an inverse FFT
to transform FFT's (from the spectrum buffer) back into the time-
domain to make them audible in the speaker. See html\SpReplay.htm .
V2.7 b16..b19, Spring..Summer 2007
- Triggered audio recorder (click at the circle in the main menu !)
- Long term average option (for Amsat DL's Earth-Venus-Earth experiment)
- Zoom into selection (in the spectrum graph)
- Improved support for Linux/WINE (see html\speclab_under_linux.htm)
- Added support for SDR-IQ / SDR-14 by RFSPACE
- Discarded the WISE installer in favour of the free INNO Setup Compiler
- some minor bugfixes
V2.7 b13..b15, 01/2007
- Support for ZL1BPU's "CASTLE" mode (Morse code in MFSK).
- Arbitrary waveform generator
V2.7 b11..b12, 11..12/2006
- Added a miniature HTTP server for remote control via web browser
- Added the 3D-spectrum display
V2.7 b9+b10, 10/2006
- Added the PTT "pilot tone" for RX/TX switching without a COM port.
Use an LM567 tone decoder to key the transmitter via soundcard.
- Multi-strip waterfall (for long-term display of narrow bands)
- Frequency scale now in two flavours: "classic" and "ruler" style
- Commands to access the serial port signals (ptt_port.x)
- Commands to change size+position of the main window (window.x)
- Application can be minimized into the SYSTEM TRAY instead of task bar
V2.7 b8, 09/2006
- Simplified colour palette selection (list with preview bitmaps)
- Enhanced "Conditional Actions", states now indicated in the table
- New preconfigured settings: "Bat Converter", "QRSS1" and some more
- Two instances of SL(!) running on one PC can now communicate
with each other, using the "send"-command.
- Fixed a bug in the interpreter (for automatic gain control)
- added the "sref" commands (for the spectrum reference) and some others
- FFT can now produce a COMPLEX output (besides the amplitude spectrum),
which can be logged into the spectrum logfile too ("spectrum export").
Intended to be used in a geophysic experiment to detect the orientation
of magnetic fields (influenced by underground structures).
- FFT-based filter supports I/Q-input and/or -output now, which can
be used as the core for a software-defined radio (RX and TX).
- Waterfall scroll interval can be automatically set for 50% FFT overlap.
- Transmitted text in the digimode terminal can now contain interpreter
commands (embedded in angle braces, as described in the manual).
- Added remote control functions ("rct") for some radios (CI-V),
see "ncdxf_4u1un_tracker.txt" (demo for remote control functions) .
- Simplified the adjustment of image-cancelling DC receivers
with I/Q input to the soundcard, see dc_rx_with_iq_processing.htm .
- Extended the functionality of the FFT-based filter, which can now
be used to shift frequencies up or down, and to "invert" sidebands
(for USB<->LSB conversion in any required frequency range).
The "SAQrcvr" profile (VLF receiver, targeted at SAQ) now uses this
method for frequency conversion, which seems to consume less CPU
power than the classic approach with mixing and filtering.
- Added some interpreter stubs to access the new functions.
- up to three nulling directions in RDF mode (improved "beam shaping")
- new command line options to play audio files etc (see "startins.htm").
- debug option (/debug on the commandline) writes debug_run_log.txt
- output plugin for Nullsoft Winamp to feed audio directly into SL
- Spectral limiter in the FFT filter control panel, ok for natural radio
- cosmetic surgery in the spectrum display (removed framed panel, etc)
- less system resources needed, some forms are now dynamically created
- New, flexible, programmable "conditional actions" for beacon logging
- Dual readout-cursor with optional "delta"-function
- Added Minimum Shift Keying (MSK) for experimental purposes
- Added "Chirp Hell" transmission, based on DF6NM's basic programs
- Added the combination for "Fast File Analysis with plotter enabled"
- Fixed problems with some window's background colour under WinXP
- Modified screens which didn't look good when using large fonts
- New units for spectrum displays: V, W, dBm, dBV
- Using "technical notation" if possible (12.3 uV instead of 1.23e-5)
- optional logarithmic frequency scale
- removed all fonts from the installation script
because they caused problems under certain WinXP versions
- New export function for the FFT results ("spectra")
- New noiseblanker and Automatic Gain Control (in the DSP blackboxes)
- triggered aquisition of FFT's for a very special application
- published the WM_COPYDATA-based protocol which allows
other programs to communicate with SL
- FFT-based filter, can be used as auto-notch etc.
- Played with modulators and demodulators
- Improved dual-channel processing (aim: I/Q processing)
- RDF module based on DF6NM's CAS (colour azimuth spectrogram)
V2.1, V2.0, 2003
- never officially released !
V1.9, Aug. 2002 - Sept. 2002:
- Played with frequency shifters using the WEAVER method,
info found at
- A new buffer routine for the waterfall optionally uses files,
which gives an enormous "scroll-back"-range but causes
problems on some machine (the memory-mapped file routines
behaved very strange on some old machines).
V1.7, March 2002 - April 2002:
- New calibration routine which can run permanently
to detect the soundcard's sample rate, using a narrow-
band phase detector which can lock the sample rate
to a precise reference signal like the 15625 Hz TV sync
etc. Nice in combination with the phase meter.
- Experiments with an audio chopper circuit to have
DC-capability for the analog input.
V1.67, October 2001 - January 2002:
- Implemented a simple "real-time plotter" so you can see
graphs of analyzed data without using a spreadsheet program.
- Some programs compiled with C++ Builder V4 which use Yariv
Kaplan's WinIO.DLL don't run properly under Win XP
(they seem to crash on EXIT). As I am not switching to Win
XP for several reasons, these problems will probably never
be fixed. WinIO has been removed in V1.67b4 for testing..
- Help system converted to HTML (to get rid of the lousy WinHelp
system, and the need for RTF files and the nasty help compiler)
- Started some experiments with "named pipes" to carry audio data
in real-time over local networks (discontinued)
- Added the option to select one of possibly many soundcards.
Never tested because only one "audio device" available here.
- Added the "blackbox" component in the test circuit,
can be used as delay line / echo effect / hum canceller.
- Minor bugfixes and improvements in the circuit window.
V1.66, August 2001:
- Someone asked to support 48 ksamples/second, hope it works
for you. Nice for the 'software VLF radio' if you want to
listen to a station at 23.x kHz.
- a bit of cleanup in the settings-dialog, now it's
a "multi-line" tab to avoid scrolling
- JPEG encoder implemented. Uses
PAINTLIB Copyright (c) 1996-1998, Ulrich von Zadow
IJG's JPEG library Copyright (C) 1994-1997, Thomas G. Lane
- an Image viewer with the option to look at all saved images
in a directory, just like a slideshow.
- a windows message interface which allows other applications
to use some of SpecLab's internal functions. Uses WM_COPYDATA.
(this was later thrown out again, using "named pipes" instead)
V1.65, April 2001 - June 2001:
- Improvements and bugfixes, tnx DF6NM and CT1DRP
- test signal generator supports versatile AM and FM now
- frequency converter improved, useful as "S/W VLF radio" now
- duplication of waterfall display lines now only 'optional'
- non-scrolling waterfall option
- 'full-window' waterfall OR spectrum graph option (and more..)
- now 8 instead of 6 FFT decimation stages (even more resolution)
- displayed ampitude range no longer fixed to 0...100dB
- FFT averaging improved (less smearing for SLOW waterfalls !)
- amplitudes of test generators can be attenuated down to -60db
- sample rate 5512 samp/sec (from SOUNDCARD) now possible
- experimental narrow-band multi-tone HELL transmission implemented
- separate columns in the sample rate calibration table
for ADC and DAC (example: 8002.87 for DAC and 7938.09 for ADC)
- removed the small "FFT control panel" because it's obsolete now
V1.64, March 2001:
- Fast Waterfall mode allows calculation of 200 spectra
per second (5ms scroll interval), good for analyzing
FSK modes (like RTTY etc). Use low FFT resolution like
- Complex FFT calculation with adjustable center frequency
and decimation ratio up to 700 allows resolution in the
'sub-millihertz' range. Use slow scrolling speed !
V1.61 - V1.63, Dec.2000 - Jan.2001
- PSK modulator and detector implemented,
basic routines taken from WinPSK31,
but symbol rate now adjustable (down to 1 symbol/second).
- WAVE-file-logging can now be 'tapped' to
the sound INPUT or the sound OUTPUT.
- Audio chunk size increased to 2048 samples/chunk,
reducing "dropouts" in the TX signal for the
expense of a longer delay between filter input
- Did some experiments with "constant amplitude PSK"
with slowly moving phase, but sidebands too broad
so doesn't seem to be worth all the effort yet :-(
- Some experiments with Minimum Shift Keying (MSK)
planned, but a good(!) decoder is complicated.
- Some new filter designers (for FIR filters),
for example the Remez Exchange (Parks/McClellan)
algorithm (included since SpecLab V1.63).
- Filter algorithm for the sample rate decimation
is now under user control: use integrate-and-dump
filter for very slow PCs (like the one at DF0WD)
or proper FIR filtering if the PC is fast enough.
- proper filtering also possible when logging samples
into a wave file (formerly only integrate-and-dump,
which may cause aliasing problems).
To keep the program running on slow PCs, this
new feature can also be turned off from the config
V1.5r2, December 2000:
- Implemented a "time signal decoder" for some
time signal transmitters on longwave (MSF on 60kHz,
HBG on 75kHz, DCF on 77.5kHz).
Allows you to adjust your PCs clock very accurately.
The intention for this decoder was to have a
"precision timebase" for some "very special"
modes (like coherent CW etc).
V1.5r1, October 11th, 2000:
- FFT resolution increased by "downsampling" the audio samples
taken from the soundcard before feeding them into the FFT.
The effect is a lower "internal" sample rate (adjustable)
which allows a resolution of about 20mHz (m=milli!) for the
expense of a maximum detectable frequency of about 900Hz,
using an FFT size of 64k.
V1.4, September 10th, 2000:
- IIR-Filter designers modified. Chained 2nd-order IIR-filters
of any type can be generated and combined.
The filter design (not only the coefficients) can be
saved as file.
- Programmable periodic screen capture of the waterfall
implemented. Allows automatic saving of a sequence of
bitmaps for "long-term" or "late-night" recordings.
Thanks to Petr, OK1FIG for the idea (from his EasyGram).
- A time-domain signal multiplier ("mixer") has been
implemented to transform the frequency of input signals
to a comfortable 600-Hz (or so..) audio.
Based on an idea from Christer, SM6PXJ.
V1.3, September 2nd, 2000:
- Analysis of audio WAVE file now possible
- "File logging" of audio samples into a WAVE file included
- Some control windows simplified ("Apply"-buttons removed)
- Minimum interval for waterfall scroll reduced from 200ms
to 100ms, but slower PCs will not be able and scroll slower
- a simple but still "experimental" audio filter with
programmable coefficients has been implemented
- a small Online-Help-System with context sensitive help
is now included (and replaces the old "manual")
- Renamed the project from "Spectrum" to "SpecLab"
which will also be the name of the executable files.
V1.2 beta, August 21st, 2000:
- Waterfall scroll speed is now independent of the FFT size
(tnx DF8ZR and G3XDV), may now be reduced to 200ms per
scroll even when using 32768 samples per FFT.
The trick is to use "old" samples that have been analyzed
before and NOT to wait until there are enough samples
for a completely new FFT analysis.
- Intended to add a "WAV file analyzer"-mode, but the WAV
file format is more complicated than expected :-( ,
so V1.2 is an "intermediate" version again !
V1.1 beta, August 19th, 2000:
- minor bugs fixed: program crashed if window was minimized
and size of the waterfall window became "negative".
- default settings (if SETTINGS.INI not found) optimized.
- possibility to save the waterfall image as a bitmap now
V1.0 beta, July 2000:
- Conversion from DOS to WIN95 using Borland C++Builder.
The old integer FFT algorithm was later replaced by a
floating point FFT algorithm because the floating point
algorithm proved to be **FASTER** than the integer FFT,
because CPU and FPU operate "parallel" in a Pentium.
Wolfgang "Wolf" Buescher, DL4YHF.