WaveWarp 2.0 Component
      

Noise Reduction:
Functional Description
Broad-band noise removal based on non-linear spectral subtraction
of the measured noise spectrum (derived from
a reference noise input via a separate channel).
See also the
Broadband De-Noiser 3 component
for a different spectral subtraction algorithm.
For the single
stereo input implementation, the
left channel must contain the (noisy) signal, and the
right, the reference noise measurement. For the double
input implementation, the first channel must contain
the (noisy) signal, and the
second channel, the reference noise measurement.
(See the "Signal Implementations"
table below for a detailed summary of all implementations for this component).
Algorithm
This component is an implementation of the technique described in detail in
[Va] chapter 9
(the
Broadband De-Noiser 3 component
implements another variation on the theme).
It works as follows:
a sequence of input samples of the noisy signal is
converted to the frequency domain (using the FFT).
The resulting mixed spectrum consists of the clean signal spectrum plus the noise spectrum
(assuming additive noise). The key step is to subtract
the noise spectrum from the mixed spectrum (point-by-point in the
frequency domain), thereby yielding
the noise-free spectrum which can be
converted back to the time domain
(via the inverse FFT), and sent out as the "cleaned" signal. The process is then repeated
for the next
sequence of input samples.
For the method to be successful, it is essential to use an accurate estimate of the
noise spectrum when performing the spectral subtraction.
The ideal situation would be to have an independent measurement of the noise
(if this were a perfect measurement, it could be subtracted sample-by-sample
from the
noisy signal in the time-domain, thereby eliminating the noise without
any further processing!). However,
this is rarely available in practical situations. Instead, the noise
spectrum has to be estimated from, for example, quiet sections of the
audio material containing mostly noise and no signal (e.g. the gaps between successive
tracks in a recording). In many audio applications,
the noise characteristics do not vary significantly over the duration of the material
(since the noise typically originates from the same source throughout a recording
or a live setting). Under such circumstances, the noise spectrum can be
accurately estimated by averaging across successive spectral snapshots.
This noise spectrum averaging is an essential part of the algorithm implemented in
this component.
Furthermore, in many practical situations, the noise spectrum
is similar for a range of different audio material
(e.g. if it originates from "tape hiss" etc.) The spectrum
can then be estimated once, saved off-line (in a "template" file), and used "as is" in
a variety
of other de-noising applications, without
having to perform further estimation. This component includes a file I/O
interface for precisely this purpose. See also the
Broadband De-Noiser 2 which performs
the de-noising based only on an imported noise spectrum.
The simplest form of spectral subtraction is to, literally, subtract the
averaged noise spectrum from the noisy signal spectrum, on a point-by-point basis
in the frequency domain. However, the performance can be improved by applying a non-linear
weighting to the noise spectrum (on a point-by-point basis
in the frequency domain) to account for
frequency-dependent
variations in the signal-to-noise-ratio. This non-linear spectral subtraction
technique has been
implemented in this component.
A further improvement can often be realised by performing some averaging of the
noisy signal spectrum before carrying out the subtraction (in order to reduce the
distortion due to variations in the noisy contribution to the mixed
spectrum that are absent from the averaged noise spectrum and therefore are not
removed by the subtraction). This signal averaging feature is also implemented
in this component.
The performance of the de-noiser depends on a variety of
parameters which are adjustable via the Parameter Window, as summarised in the
following table.
| Parameter | Purpose |
| "Window length" slider |
Adjusts the length of the input data buffers (for both the noisy signal input and the
reference noise input), which also defines the "Latency" (overall delay) of the
process.
The FFT buffer size is computed from the window length rounded up to the nearest power of 2
(for efficient FFT computation). Each input data buffer
is windowed (using a selected profile), then
extended to the length of the FFT buffer by
padding with zeros (on either side). The input data streams are overlapped by a factor
of 2, and the ouputs of the overlapped
inverse transformed buffers are summed, in order
to avoid discontinuities at the window boundaries.
(Note: this slider is disabled when "Load noise spectrum from file" is selected. The
window length and FFT
length are then automatically adjusted according to the length of the
imported spectrum).
|
| "Windowing method" selection buttons |
Selects the profile of the windowing function applied to the input data.
Separate selections are provided for the noisy signal and the reference noise
channels. (Note: windowing for the noise channel
is disabled when "Load noise spectrum from file" is selected).
|
| "Noise spectrum estimation controls: Averaging" slider |
Sets the averaging time for the noise spectrum estimation process. The averaging is
implemented point-by-point in the frequency domain using a first-order low-pass filter.
The plot window displays the averaged spectrum estimate, but is only refreshed
whenever the "stop" button is pressed, in order not to consume CPU resources during the
real-time processing. (Note:
when "Load noise spectrum from file" is selected,
the plot displays the imported noise spectrum.)
|
| "Noise spectrum estimation controls: Gain" slider |
Adjusts the overall magnitude of the noise spectrum estimate, before performing
the spectral subtraction.
|
| "Noise attenuation controls: Cut" slider |
Adjusts the "aggressiveness" of the noise attenuation. Higher slider values
implies more severe suppression
(implemented by scaling the noise spectrum by the slider value before performing
the spectral subtraction
This slider corresponds to the "alpha" variable as used in
[Va] eq. 9.5 p. 244).
|
| "Noise attenuation controls: Threshold" slider |
Adjusts the threshold at which the spectral subtraction is
supressed in
order to avoid negative magnitudes as a result of the
subtraction. If the resultant spectral magnitude (at a given frequency) is below
the value of this slider multiplied by the
noisy signal spectrum magnitude (the threshold magnitude), then the
spectral subtraction is replaced by
the threshold magnitude at this frequency.
(This slider corresponds to the "beta" variable as used in
[Va] eq. 9.10 p. 246).
|
| "Signal averaging" slider |
Sets the averaging time for the noisy signal spectrum estimation process. The averaging is
implemented point-by-point in the frequency domain using a first-order low-pass filter.
As discussed in
[Va] section 9.2.2,
averaging the noisy signal can lead to reduction of the distortion
resulting from spectral subtraction (due to variations of the noise spectrum).
|
| "SNR" slider |
Adjusts the weighting
of the frequency-dependent signal-to-noise ratio in the non-linear spectral
subtraction process. As the slider value is increased,
the extent of the spectral subtraction is suppressed for high signal-to-noise ratios
(corresponds to the "gamma" variable as used in
[Va] eq. 9.3 p. 254).
|
| "Output gain" slider |
Adjusts the overall gain of the output signal, after the de-noising has been applied.
|
| "Load noise spectrum from file" dialog |
Activated when
"Load from file" is selected. The average noise spectrum is imported from
an ASCII file.
The ASCII file format is
described in the
WaveWarp Users' Guide.
This simple file structure
enables
files to be written by hand (e.g. via a text editor).
For
MATLAB®
users, the process of creating noise "template" spectra
is particularly straightforward.
The "wwmatlab" sub-directory of the WaveWarp root directory contains
the necessary function m-files (plus example scripts) for exporting
spectra from MATLAB, thereby providing ready access to
MATLAB's powerful mathematical tools for creating
customised spectra.
(Refer to the
WaveWarp Users' Guide
for
a summary of all bundled m-files for working with MATLAB
in a variety of areas in addition to noise spectrum design).
|
| "Save noise spectrum to file" dialog |
Exports the current averaged noise spectrum to an ASCII file
for use as a "template" for future de-noising applications (or for off-line analysis of the noise spectrum).
|
For an introduction to the Discrete Fourier Transform and the FFT,
see, for example,
[St] sections 4.1 and 4.2.
For further introductory information (with emphasis on audio applications), and
for discussions on spectral measurements, zero-padding,
windowing, the overlap-add re-synthesis method,
and the Short Time Fourier Transform (STFT) for audio applications,
see
[Roa] p. 1084-1112
and
[Moore] p. 61-111.
Signal Implementations
| Audio signals | Control signals | Description |
| Single input single output stereo-mono | n/a | De-noising of the left input channel assuming the right input channel contains a reference noise signal. |
| Single input single output stereo-stereo | n/a | De-noising of the left input channel assuming the right input channel contains a reference noise signal. The de-noised signal is sent (in duplicate) to both stereo output channels. |
| Double input single output mono-mono | n/a | De-noising of the first input assuming the second input contains a reference noise signal. |
| Double input single output mono-stereo | n/a | De-noising of the first input assuming the second input contains a reference noise signal. The de-noised signal is sent (in duplicate) to both stereo output channels. |
| Double input single output stereo-mono | n/a | De-noising of each channel of the first stereo input assuming the second input contains a reference stereo noise signal. The noise spectrum is estimated from the average of the left and right channels of the second input. The de-noised stereo signal is averaged across the channels and sent to the mono output. |
| Double input single output stereo-stereo | n/a | De-noising of each channel of the first stereo input assuming the second input contains a reference stereo noise signal. The noise spectrum is estimated from the average of the left and right channels of the second input. The de-noised stereo signal is sent to the respective stereo output channels. |
Related components:
Example DrawingBoards illustrating usage:

      
|