hysteresis
NODEMagnetic saturation with memory: the output depends on where the signal has been, not only where it is.
Parameters
{
"drive_db": 12,
"type": "hysteresis",
"width": 0.5
}How it is computed
He = H + α·M effective field
Man = Ms · L(He / a) anhysteretic magnetisation (Langevin)
dMirr/dH = (Man - M) / (δ·k - α·(Man - M)) δ = sign(dH)
dM/dH = [(1-c)·dMirr/dH + c·dMan/dHe]
/ [1 - α·c·dMan/dHe - α·(1-c)·dMirr/dH]- width opens and closes the loop: near zero it is almost linear, at the maximum it is the widest.
- Drive is compensated exactly as it is on the waveshaper, so loudness does not move with it. Here the compensation cannot be integrated in closed form, so it is measured by running a reference sine through the model itself, never through your music.
- The model is quasi-static: it is written in dM/dH rather than dM/dt, so it does not need to be re-derived per sample rate.
Using it
It needs no DC blocker.
With symmetric excitation the loop is symmetric about the origin, so no DC is produced. That is fixed by a test rather than assumed, which is the difference from the asymmetric waveshaper.
It is the most expensive node.
It is sequential, it branches, and it uses transcendental functions, so it cannot be vectorised. If you are running a long convolution as well, watch the CPU figure before adding several of these.
It is nonlinear, so the chain gains a limiter.
Simulation before it can be heard, the output limiter armed for the session, and a soft start.