WaveWarp 2.0 Component
      

Spectral Transformers:
Controllable Spectral Shift 1
|
Functional Description
Linear spectral shifting
based on direct manipulation of FFT spectra.
The audio output is derived from a transformed
version of the input audio spectrum.
The transformation involves shifting all FFT values by
an amount which is dynamically adjusted by the control signal input.
The characteristics of the
spectral
transformation are adjustable via the Parameter Window, as summarised in the
following table.
| Parameter | Purpose |
| "Buffer length" slider |
Adjusts the length of the input data buffer,
which also defines the "Latency" (overall delay) of the
process.
The FFT buffer size is computed from the "Buffer length"
rounded up to the nearest power of 2
(for efficient FFT computation). If "double zero-padding" is selected, the FFT buffer size is
doubled (after the rounding) to improve the smoothness of the spectrum between successive
FFT bins (but without increasing the underlying frequency resolution).
The 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). Successive input data buffers 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.
|
| "Output gain" slider |
Adjusts the overall gain of the output signal, after the spectral manipulations have been applied.
|
| "Window type" selection |
Selects the profile of the windowing function applied to the input data.
|
Algorithm
Each successive input buffer is transformed
to the frequency domain using the windowed-FFT with double overlapping.
The frequency shift is implemented by moving all FFT values
by the (same) number of bins, determined dynamically by the input control signal.
Specifically, the (instantaneous) number of shift bins is given by the
value of the control signal input multiplied by 10% of the
"Buffer length".
The modified spectrum is then
re-converted to the time domain (using the inverse FFT), and
the overlapped output buffers are summed to yield the output signal.
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 mono-mono | Single input |
Spectral shift applied to mono input, sent to mono output.
The shift (expressed as number of FFT bins) is given by the instantantaneous
value of the control input, multiplied by 10% of the "Buffer length". |
| Single input single output mono-stereo | Double input |
Spectral shift applied to mono input with separate settings for left and right stereo output channels.
The left and right channel shifts (expressed as numbers of FFT bins) are given by the instantantaneous
values of the first and second control inputs, respectively, multiplied by 10% of the "Buffer length".
|
| Single input single output stereo-mono | Double input |
Spectral shift applied with separate settings to left and right stereo input channels, then averaged and sent to mono output.
The left and right channel shifts (expressed as numbers of FFT bins) are given by the instantantaneous
values of the first and second control inputs, respectively, multiplied by 10% of the "Buffer length". |
| Single input single output stereo-stereo | Double input |
Spectral shift applied with separate settings to left and right stereo input channels for left and right stereo output channels, respectively.
The left and right channel shifts (expressed as numbers of FFT bins) are given by the instantantaneous
values of the first and second control inputs, respectively, multiplied by 10% of the "Buffer length". |
Related components:
Example DrawingBoards illustrating usage:

      
|