9 releases
0.2.12-alpha.0 | Apr 7, 2023 |
---|---|
0.2.11-alpha.0 | Dec 19, 2022 |
0.2.5-alpha.0 | Jun 21, 2022 |
0.2.4-alpha.0 | Mar 14, 2022 |
0.1.42-alpha.0 | Oct 27, 2021 |
#5 in #distortion
44 downloads per month
Used in surge-synthesizer
240KB
3K
SLoC
AsymShaper
The AsymShaper
is a signal processing module
that provides asymmetric waveform shaping
functionality. It can be used to create a wide
range of distortion and saturation effects, from
subtle harmonic enhancement to aggressive clipping
and fuzz.
The AsymShaper
works by applying a transfer
function to the input signal, which modifies its
amplitude and/or frequency content. The shape of
the transfer function is controlled by the shape
parameter, which can be adjusted in real-time to
create a dynamic and expressive effect.
shape
The shape
parameter controls the shape of the
transfer function used by the AsymShaper
. It can
be thought of as a "distortion amount" control,
with low values producing subtle harmonic
enhancement and high values producing more
aggressive distortion and clipping.
The specific shape of the transfer function
depends on the implementation of the AsymShaper
,
but it is generally designed to introduce even or
odd harmonics to the input signal, depending on
the desired effect. The shape
parameter can be
adjusted in real-time to create a dynamic and
expressive effect.
Mathematical Analysis
The transfer function used by the AsymShaper
can
be expressed mathematically as a non-linear
function of the input signal, with the shape
parameter controlling the amount and type of
non-linearity introduced.
One common approach to creating transfer functions for distortion and saturation effects is to use a waveshaping function, such as the sigmoid or arctangent function. These functions introduce non-linear distortion by "flattening" the top and bottom of the input waveform, which introduces harmonics at integer multiples of the input frequency.
The specific transfer function used by the
AsymShaper
may be more complex than a simple
waveshaping function, depending on the desired
effect. However, the basic principle of
introducing non-linear distortion through
a non-linear transfer function remains the same.
Overall, the AsymShaper
is a powerful and
versatile tool for adding distortion and
saturation effects to a wide range of audio
signals, and can be used to create everything from
subtle harmonic enhancement to aggressive,
overdriven tones. By adjusting the shape
parameter in real-time, producers can create
dynamic and expressive distortion effects that are
sure to stand out in any mix.
47> could you show me a block diagram? how does the algorithm work?
Here's a block diagram for the AsymShaper
:
Input Signal
|
v
Gain
|
v
Clipper
|
v
Filter
|
v
Output Signal
The AsymShaper
works by applying a series of
signal processing stages to the input signal. The
first stage is a gain control, which allows the
user to adjust the level of the input signal
before it is processed by the rest of the
circuit. This can be useful for controlling the
amount of distortion introduced by the
AsymShaper
.
The second stage is a clipper, which introduces
non-linear distortion by limiting the amplitude of
the input signal. The shape of the clipper
transfer function is determined by the shape
parameter, which can be adjusted to create a wide
range of distortion and saturation effects.
The third stage is a filter, which can be used to shape the frequency content of the output signal. This can be useful for removing unwanted high-frequency artifacts or emphasizing certain harmonics in the distortion spectrum.
The output of the AsymShaper
is the processed
signal, which can be used as a distortion effect
or integrated into a larger signal processing
chain.
In terms of the algorithm, the AsymShaper
works
by applying a non-linear transfer function to the
input signal. This is accomplished by first
adjusting the gain of the input signal to an
appropriate level, then applying a clipper
function that limits the amplitude of the signal
according to the shape
parameter. The resulting
distorted signal is then filtered to shape the
frequency content of the output.
The exact transfer function used by the
AsymShaper
will depend on the implementation,
but it is generally designed to introduce even or
odd harmonics to the input signal, depending on
the desired effect. The shape
parameter can be
adjusted in real-time to create a dynamic and
expressive distortion effect.
48> could you write me some python code to visualize its behavior?
Sure, here's some Python code to visualize the
behavior of the AsymShaper
using the numpy
and
matplotlib
libraries:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# Define the transfer function for the clipper
def clipper(x, shape):
return np.clip(x, -shape, shape)
# Define the transfer function for the filter
def filter(x):
# Butterworth low-pass filter with cutoff frequency of 2 kHz
b, a = signal.butter(4, 2000, 'low', fs=44100)
return signal.filtfilt(b, a, x)
# Define the `AsymShaper` function
def asym_shaper(x, gain, shape):
x *= gain
x = clipper(x, shape)
x = filter(x)
return x
# Generate a test signal
t = np.linspace(0, 1, 44100)
freq = 440
input_signal = np.sin(2 * np.pi * freq * t)
# Apply the `AsymShaper` to the test signal
gain = 1.0
shape = 0.5
output_signal = asym_shaper(input_signal, gain, shape)
# Plot the input and output signals
fig, axs = plt.subplots(2, 1, figsize=(10, 6))
axs[0].plot(t, input_signal)
axs[0].set_title("Input Signal")
axs[1].plot(t, output_signal)
axs[1].set_title("Output Signal")
plt.show()
This code defines the AsymShaper
function as
a series of processing stages, including a gain
control, clipper, and filter. It then generates
a test signal, applies the AsymShaper
to the
test signal with a specific gain and shape
parameter, and plots the input and output signals
using matplotlib
.
Note that the specific transfer function used by
the clipper and filter stages may vary depending
on the implementation of the AsymShaper
, but the
basic principle of introducing non-linear
distortion through a non-linear transfer function
remains the same.
49> are there certain harmonics we want to target? how do we ensure the sound is pleasing?
The harmonics that are emphasized by the
AsymShaper
will depend on the specific transfer
function used by the clipper and filter stages. In
general, even harmonics are often associated with
a "warm" or "smooth" distortion sound, while odd
harmonics can produce a more aggressive or
"gritty" sound. However, the exact harmonic
content of the distortion will depend on the shape
parameter and other parameters of the transfer
function.
To ensure that the sound produced by the
AsymShaper
is pleasing, it can be useful to
experiment with different values of the shape
parameter and other parameters to find the desired
level of distortion and harmonic content. It can
also be helpful to listen to the output of the
AsymShaper
in the context of a mix or
arrangement to ensure that it fits well with the
other elements of the music.
Finally, it's worth noting that personal taste plays a significant role in determining what sounds "pleasing" or "good". What one person finds pleasing may not be the same as what another person finds pleasing, so it's important to experiment with different sounds and find what works best for your particular musical context and style.
52> what should we watch out for when implementing this dsp processor?
When implementing the asymmetrical shaper, there are a few things to watch out for:
-
Clipping: The
clipper
function in theAsymShaper
applies a hard clipping function to the input signal. This can introduce distortion and potentially lead to unpleasant or harsh sounding artifacts in the output. To mitigate this, you may want to experiment with different transfer functions that provide smoother clipping, such as a soft clipping function. -
Filter design: The low-pass filter used in the
AsymShaper
is designed using a Butterworth filter with a fixed cutoff frequency of 2 kHz. This filter design may not be appropriate for all applications, especially if you are working with signals that have higher frequency content that you want to preserve. Consider experimenting with different filter designs and cutoff frequencies to find a configuration that works best for your application. -
Gain control: The
AsymShaper
applies a gain control to the input signal before processing it. If the input signal is too loud, it may cause the signal to clip even more severely than intended. Conversely, if the input signal is too quiet, you may not achieve the desired shaping effect. To avoid these issues, it is important to carefully set the gain control to an appropriate level for the input signal. -
Latency: The low-pass filter used in the
AsymShaper
introduces some latency into the output signal. Depending on your application, this latency may be a problem. If you are using theAsymShaper
in real-time applications, you may need to compensate for this latency using techniques such as lookahead buffering. -
Implementation considerations: When implementing the
AsymShaper
on a digital signal processor or microcontroller, you need to consider issues such as fixed-point arithmetic, memory usage, and processing speed. Depending on the platform and application, you may need to optimize the code or use specialized hardware to achieve the desired performance.
53> how do we measure teh latency caused by this operation? how do we ensure the signal going into this processor has an optimal gain? what is the memory footprint of this operator?
To measure the latency caused by the AsymShaper
operation, you can use a test signal with a known
delay, such as a pulse or a sine wave, and measure
the time difference between the input and output
signals. This can be done using a software tool
such as Audacity or a hardware oscilloscope.
To ensure that the signal going into the
AsymShaper
has an optimal gain, you can monitor
the input signal using a level meter or waveform
display and adjust the gain control to achieve the
desired level. Alternatively, you can use an
automatic gain control (AGC) circuit to
dynamically adjust the gain based on the input
signal level.
The memory footprint of the AsymShaper
operator
will depend on the implementation details, such as
the number of filter coefficients used in the
low-pass filter and the size of any input or
output buffers. In general, the memory usage
should be kept as low as possible to minimize the
impact on system performance. This can be achieved
by optimizing the code, using efficient data
structures, and minimizing the size of any input
or output buffers.
54> how can this operator be improved?
There are several ways that the AsymShaper
operator could be improved:
-
Transfer function design: The hard clipping function used in the
clipper
function can lead to harsh-sounding distortion in some cases. One way to improve this would be to use a different transfer function that provides smoother clipping, such as a soft clipping function or a waveshaping function. -
Filter design: The low-pass filter used in the
AsymShaper
is a fixed design with a cutoff frequency of 2 kHz. Depending on the application, it may be beneficial to have a filter with a variable cutoff frequency or a different filter type altogether (e.g., a high-pass or band-pass filter). -
Multiband operation: The
AsymShaper
operates on the entire input signal as a single entity. It may be beneficial to implement a multiband version of the operator that processes different frequency bands independently, allowing for more targeted shaping of the signal. -
Advanced control: The
AsymShaper
currently has a single gain control parameter. Adding additional parameters, such as attack and release times for an AGC circuit or a dynamic transfer function, could provide more advanced control over the shaping process. -
Optimization: Depending on the implementation platform, there may be opportunities to optimize the code for better performance, such as by using SIMD instructions, reducing memory usage, or using specialized hardware accelerators.
55> which simd instructions are necessary to implement this operator?
The specific SIMD instructions required to
implement the AsymShaper
operator will depend on
the target platform and the implementation
details. In general, SIMD instructions can be used
to perform parallel operations on multiple data
elements at once, which can significantly improve
the performance of signal processing algorithms.
One common SIMD instruction set is Intel's Advanced Vector Extensions (AVX), which provides support for 256-bit vectors and a variety of arithmetic and logic operations. Other SIMD instruction sets include ARM NEON, IBM AltiVec, and the newer AVX-512.
To determine the specific SIMD instructions required for a particular implementation, it is best to consult the documentation for the target platform and any relevant libraries or tools being used. In addition, profiling and benchmarking tools can be used to identify performance bottlenecks and optimize the code accordingly.
56> what else should we know about this operator?
Here are a few additional points to keep in mind
regarding the AsymShaper
operator:
-
Harmonic distortion: The
AsymShaper
can introduce harmonic distortion to the input signal, which can result in new harmonic content being added to the output signal. This can be used creatively to add warmth, grit, or other tonal characteristics to a sound, but can also result in unwanted artifacts or loss of clarity. -
Gain control: The
AsymShaper
has a gain control parameter that allows the output level to be adjusted. However, care should be taken to avoid overdriving subsequent stages in the signal chain, which can result in additional distortion or clipping. -
CPU usage: The
AsymShaper
can be a computationally intensive operation, especially if it is being applied in real-time to a high-resolution audio stream. It is important to optimize the code and minimize the memory usage to avoid excessive CPU usage or other performance issues. -
Use in moderation: As with any audio effect, the
AsymShaper
should be used judiciously and in moderation. While it can add character and excitement to a sound, excessive use can result in a loss of clarity or intelligibility, or even cause listening fatigue. -
Signal level: The
AsymShaper
should be used with signals that are within the normal range for audio signals, typically between -1 and +1 (or -32767 and +32767 for 16-bit audio). Using signals that are too low or too high can result in poor performance or distortion.
57> what are the matehmatical properties of this processing stage?
The AsymShaper
is a non-linear processing stage
that can introduce distortion and non-linearities
into an audio signal. From a mathematical
perspective, the AsymShaper
can be viewed as
a non-linear function that maps an input signal to
an output signal. The function is asymmetric,
meaning that it responds differently to positive
and negative values of the input signal.
One common mathematical tool used to describe
non-linear systems like the AsymShaper
is
Fourier analysis, which decomposes a signal into
its constituent frequency components. When
a signal is processed by the AsymShaper
, it can
introduce harmonic distortion, which adds new
frequency components to the output signal. The
exact nature of the distortion depends on the
input signal, the gain and shape parameters, and
other factors.
Another mathematical tool used to describe
non-linear systems is dynamical systems theory,
which studies the behavior of systems that change
over time. The AsymShaper
can be viewed as
a dynamical system that responds to changes in the
input signal and the control parameters. The
behavior of the system can be analyzed using
techniques such as bifurcation analysis, which
studies how the system's behavior changes as the
control parameters are varied.
Overall, the AsymShaper
is a non-linear system
that can introduce new harmonic content and other
distortions into an audio signal. Its mathematical
properties can be described using tools such as
Fourier analysis and dynamical systems theory,
which allow us to understand and analyze its
behavior in different contexts.
Dependencies
~12–20MB
~303K SLoC