Buuug!

I’ve found a bug in all versions of the firmware, which has been around for the past 11 months!

You might have noticed that the zpulse oscillator is wicked. It’s like having a tiny angry MS-10 in one oscillator. Well, the reason behind this aggressiveness is that there’s something totally silly in the code generated by gcc for the zpulse oscillator. gcc is not really to blame here, I made a mistake in the input register specifications for an inlined assembly function, which caused two registers being used for the same thing in the code output by gcc. Bad! In phase distortion terms, the bug caused the carrier sine to a/ get a DC offset, b/ be shifted by 180°, c/ get its frequency doubled. Because (x * x + ~x * ~x) >> 8 is just (x >> 1) + 128 - at a double frequency.

I fixed the bug and then zpulse lost all its mojo…

So I intentionally brought the bug back for zpulse and all is well again!

I was using this osc this morning. I think there is a preset that uses just zpulse on osc 1 with none on osc 2 (Might be the kick patch?). Turning on the second osc kinda dampened the first osc and took away most of the crispness. Modifiers and mix/sub osc helped a little but I ended up turning it off and sticking with just the zpulse. It looks like this is a strange case of “Thanks for not fixing what’s broken.”

Oh, so that’s why everything I use zpulse for looks like like this?

I started a post about it at KVR a while ago. Now when I have read the
replies and googled a bit more I don’t think it’s a DC offset anymore.
It’s more like it’s just assymetric

This is unrelated. The Shruthi-1 doesn’t have any DC offset because of the 4,7uF coupling caps in the audio chain.

On the waveform it looks like DC offset but it’s just the waveform being asymmetric (in statistical terms, the mean is 0 but the skewness is not null). Audio editors use the max and min of the waveforms over small windows to plot the waveform, and you can’t reliably infer the mean value of a distribution just from the max and min.

I love it: “It’s not a bug! It’s a feature