DSPBOX is an attempt to code the Texas
Instruments DSK 'C50 in such a way
to make it behave like a commercial DSP noise reduction unit, like the
NIR-12, the TimeWave 599+ and others. Not only the noise reduction function
has been implemented, but automatic notch, AGC and Band Pass have as well.
You need of course the TI
DSK 'C50, and a PC running DOS (a measly '386
will suffice) with one serial port (COM1 or COM2). The program has not
been tested with a fast Pentium yet. There should be no problems, but I
cannot guarantee it. I developed it with a 50 MHz '486, as this is the
computer I use for my Ham station. I have also a 200 MHz Pentium, but
in another room. If need be, I can arrange to test DSPBOX with this PC.
The audio from the radio receiver is taken either from the headphone
on the front panel (preferred), or from the aux speaker connector on the
back. In this latter case, depending on the radio, there is the possibility
that the level is a bit too high. With some experiment it will be possible
to decide whether to insert an attenuator or not.
The DSK has only a line-level output, so a small power amp is
1 Watt will suffice.
Windows users, read here
DSPBOX runs OK in a DOS full screen session of Windows 3.1
Unfortunately the same cannot be said of Windows 95. As far as I know,
it *should* work, but it doesn't. The program hangs during the initial
DSP code loading. It has somehow to do with the virtualization that
Win95 does of the comm ports. If any W95 guru has suggestions, please
contact me at firstname.lastname@example.org
So, if you have Win95 on your PC, before launching DSPBOX please
reboot in DOS mode.
How to use it
Connect all the cables (serial and audio), power on the DSK and
and change directory to that where you decompressed the ZIP file.
Then issue the following command :
DSPBOX /Cx where x can be 1 or 2, meaning COM1 or COM2
The program defaults to COM2. DSPBOX initially sets the serial
57,600 bps and downloads the DSK code, contained in the file DSPBOX.CDF
Then it changes the serial speed to 3,200 bps, as this is the speed used
by the DSK code, which is synchronized with the sampling rate (9600 s/sec).
You should now see a panel with five green boxes, each one related
specific function and to an F-key of the PC.
Green means that the function is not active, red that it is.
F1 toggles AGC on/off
F2 toggles the denoiser function on/off
F3 toggles the automatic notch function on/off
F4 toggles the band pass function on/off
F5 toggles the active/bypass function, i.e. when green, the incoming audio
is simply rerouted to the output DAC, with no processing.
By using the cursor up, down, left and right keys, it is possible
select (up and down) and to adjust (left and right) various parameters.
You can select from :
- Low Cut (ranges from 200 Hz to 4000 Hz or the value of
High Cut minus
50 Hz, whichever is less.
- High Cut (ranges from 4000 Hz to 200 Hz or the value
of Low Cut plus
50 Hz, whichever is greater.
- Denoiser value (ranges from 2 to 40, 2 being least effective)
- Denoiser type (ranges from 1 to 4, 1 and 2 being most
voice signals, 3 and 4 for CW).
Of course the Low Cut and the High Cut limits are effective only
the band pass function (F4) is activated.
The AGC should be adjusted by receiving a medium signal, not too
nor too weak, and adjusting the audio level of the receiver so that there
is minimal difference between having AGC off or on. Then don't touch any
more the radio volume, but use instead the volume control of the external
power amplifier you inserted after the DSK unit. The effectiveness of the
LMS noise reducing filter is strongly affected by the audio level, so my
suggestion is to leave AGC always on, but of course you are free to
If you want to test the notch function, go into some broadcasting
tune an AM station in SSB mode. Then insert the notch. You will be amazed
by its sharpness and depth.
If you want to use the PC after having set the DSK as you want,
Just press ESC, the DSPBOX program will exit, but leaving the DSK fully
operational. Of course you cannot change anymore its state, until you
Some technical notes on the implementation
The DSP code is composed of a background and a foreground task.
The backround task has two purposes :
- To manage the serial communication with the PC, in synch with the
- To calculate in real time the new h(n) coefficients for the band pass
filter, according to the user input (more on this later).
The foreground tasks is driven by the ADC interrupt (one every
and does the following :
- Perform AGC function via a precomputed look-up table
- Perform LMS filtering with a 128-tap FIR filter, whose coefficients are
updated at every cycle according to the LMS algorithm. Stealing an idea
from W9GR, I decayed them with a decay factor optimized by trial and error.
- Perform notch filtering, again with another 128-tap FIR filter,
LMS-adjusted and decayed.
- Perform the band-pass filtering with a 255-tap FIR filter, whose
coefficients are computed in real time by the background task.
- Send the output sample to the DAC converter.
The 'C50 has enough power to compute all of the above simultaneously
9600 samples/second. A simulation of the band pass filter done with Matlab
shows a stop band rejection close to 80 db.
The h(n) coefficients of the band pass filter are computed using
of frequency sampling, where you draw in the frequency domain the desired
pass band, then do an IFFT to compute the h(n). Care has been exercized not
to have abrupt transitions from the pass and the stop bands, as this would
give unacceptable ripples in the stop band (the Gibbs phenomenon). By simu-
lation with Matlab I found that two transition values between 1 and 0 per edge
are an optimum compromise between ripple and steepness of the transition,
at least for the purposes of this program.
The time left from the foreground task at each cycle is enough for the
background task to compute those coefficients in a few milliseconds.