Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Self-oscillation #100

Open
dpwe opened this issue Feb 3, 2024 · 1 comment
Open

Self-oscillation #100

dpwe opened this issue Feb 3, 2024 · 1 comment

Comments

@dpwe
Copy link
Collaborator

dpwe commented Feb 3, 2024

I've seen it mentioned that the Juno VCF is capable of self-oscillation, which sounds very scary in DSP.

I wasn't sure how much it mattered, but going through all the Juno patches, I see B66 Toy Rhodes, which has all the oscillators turned off, but the filter resonance turned up to max. So I guess that's an example where the note actually comes from the filter alone.

Self-oscillation implies a filter that is not stable. There must be some amplitude-related nonlinearity in the actual Juno circuit that keeps it, in fact, stable once it starts oscillating. We might be able to implement that with some kind of nonlinear clipping on the filter state (as we have on the final output), but that seems expensive, since it's potentially one table lookup + interpolation per sample.

@dpwe
Copy link
Collaborator Author

dpwe commented Jun 22, 2024

This actually uncovers a major architectural difference between a real Juno and our implementation: for efficiency, we implement the amplitude envelope generator when calculating the initial waveform, then apply the filter to this envelope-shaped waveform. A real Juno has a fixed-amplitude oscillator, then the filter, then the ADSR envelope shaping. By the graces of linear system commutativity, this gives the same result.

But if the filter is being used as a sine wave oscillator, it will bypass the application of the amplitude envelope, and the results will no longer correspond to a real juno.

We could put in a special-case for patches like the toy Rhodes to rewrite the config with an explicit sine wave osc input (look for all oscs off and resonance > 50%) but that's a big fake.

I think even with a little actual oscillator input, the self-oscillation doesn't happen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant