I just realized that I can delete filters and create a second integrator to shape the triangle into a sine wave. What do you think about that vs. the filters?
The first integrator from square to clamped triangle, buys you a lot as it acts as both a LPF
and a shaper, which makes the filters job easier.
Another integrator is a bit wasted as you are better to use that opamp as a peaked filter (as below)
Some spice runs found ( as expected) that
there is an ideal clamping width for the triangle to then give best sine from a filter. About 16.29% each flat / period.
330k, 4n7 => -69.555dB
355k.4n7 => -79.074dB (flat = 1.655ms)
357.5k,4n7 => -79.233dB (flat = 1.629ms)360k, 4n7 => -77.045dB
365k,4n7 => -74.616dB (flat = 1.566ms)
390K,4n7 => -66.557dB (flat = 1.325ms)
410k,4.7n => -63.445dB (flat = 1.145ms)
Because you want a single frequency, you can also make the LPF a little bit peaky, the circuit below has a gain of 22x peaked at 100Hz
See circuit and clipped triangle and the sine resulting. -79dB is close to 0.01%
Caps are all chosen to be the same value, and should be low loss, precision, high stability. 1%, NPO, 30ppm for example.
A crusty LM324 will not clip symmetrically, so you may need a better rail-rail output opamp.
The clipping rails should be clean, as they become part of the signal.