A clipped sine is a sine that has been multiplied with a rectangle wave, with some constants added:
clip = 0.8
sine = np.sin(wt)
rectangle = sine < clip
clipped = (sine-clip)*rectangle + clip
Visualization:
Multiplication in the time domain corresponds to correlation in the frequency domain. So to get the clipped spectrum we take the correlation of :
- the rectangle wave spectrum
- and the spectrum of the sine + DC offset which contains only two peaks.
This means the final spectrum is the weighted sum of two instances of the spectrum of the rectangle wave, with one shifted in frequency.
If the rectangular wave is actually square, with a duty cycle of 50%, it will have smooth harmonic decay without humps. This is the case where the sine is clipped precisely in the center.
But if the rectangular wave is not square, its duty cycle is not 50% because the sine is clipped somewhere else, then its spectrum will have a series of humps, so the result has humps.
Now why does the spectrum of a rectangle wave have humps?
I'll spare the math, but basically a rectangle wave is the product of two square waves having signal values {0,1} with some phase shift applied on each:
If you multiply the top and middle squares you get the rectangle wave on the bottom... So in the spectrum domain it's the correlation of the spectra of these two square waves, which are identical except for phase shift. The phase shift means harmonics add constructively or destructively depending on the harmonic number, so you get a spectrum with humps that looks like an interference pattern.