This is the simplest circuit I can come up with. Harmonics are more than 80dB down in simulation. FFT the last 30 seconds. There is only one harmonic stopping me claiming 90dB but the exact FFT result can depend on exactly how much output is selected for the FFT. You may see different results.
If a prototype is ever built, attention to the type and quality of the capacitors used will be needed. Electrolytics are not intended. Put C1 and C2 near U1 supply pins. Also pay attention to the stability of +/- 6V. It would be nice to have a single 12V rail version but so far I can't get it to work.
R1 and R2 and probably R7 should be easily changeable. R3 should be 220 ohm ten turn. R9 should be 1M ohm ten turn in series with 470k.
I don't fully understand why the DC stabilization circuit through U2B achieves what it does and this makes me concerned about whether a real circuit would have the same behaviour. It was added when I noticed that the diodes D1 and D2 weren't contributing equally so I decided to try to derive a DC correction signal. This was originally connected to the FET source and then to R13. Since this is a DC correction signal I decided to try out the effect of connecting it to U1 Vocm and was amazed that this works as well as it does. If you disconnect R5, harmonics will not be more than 50dB down because D1 and D2 are no longer providing stable and equal contributions to the level control feedback.
If you need even better performance then the circuit referenced by Bill Sloman can be used.
Other references
Version 4 SHEET 1 2196 932 WIRE -64 -672 -96 -672 WIRE 48 -672 0 -672 WIRE -96 -576 -96 -672 WIRE -64 -576 -96 -576 WIRE 48 -576 48 -672 WIRE 48 -576 16 -576 WIRE -32 -464 -32 -480 WIRE 48 -448 48 -576 WIRE 48 -448 0 -448 WIRE -96 -432 -96 -576 WIRE -64 -432 -96 -432 WIRE 160 -416 0 -416 WIRE 208 -416 160 -416 WIRE 336 -416 288 -416 WIRE 400 -416 336 -416 WIRE 512 -416 400 -416 WIRE 624 -416 512 -416 WIRE -96 -384 -96 -432 WIRE -32 -384 -32 -400 WIRE 48 -368 48 -448 WIRE 336 -368 336 -416 WIRE 160 -352 160 -416 WIRE 400 -352 400 -416 WIRE 512 -288 512 -416 WIRE 624 -288 624 -416 WIRE -96 -272 -96 -304 WIRE -96 -272 -192 -272 WIRE -96 -240 -96 -272 WIRE 48 -240 48 -288 WIRE 160 -240 160 -288 WIRE 336 -240 336 -288 WIRE 400 -240 400 -288 WIRE -192 -176 -192 -272 WIRE -224 -128 -256 -128 WIRE -96 -128 -96 -160 WIRE -96 -128 -128 -128 WIRE -80 -128 -96 -128 WIRE 144 -128 -80 -128 WIRE 288 -128 224 -128 WIRE 352 -128 288 -128 WIRE 512 -128 512 -224 WIRE 512 -128 432 -128 WIRE -256 -48 -256 -128 WIRE -208 -48 -256 -48 WIRE -80 -48 -80 -128 WIRE -80 -48 -128 -48 WIRE 288 -16 288 -128 WIRE 288 -16 64 -16 WIRE 352 -16 288 -16 WIRE 512 -16 512 -128 WIRE 512 -16 432 -16 WIRE -256 0 -256 -48 WIRE 144 48 144 32 WIRE -240 96 -320 96 WIRE -176 96 -240 96 WIRE 64 96 64 -16 WIRE 112 96 64 96 WIRE 512 96 512 -16 WIRE 512 96 272 96 WIRE 16 128 -48 128 WIRE 112 128 16 128 WIRE -320 144 -320 96 WIRE 624 144 624 -224 WIRE 656 144 624 144 WIRE 768 144 720 144 WIRE 848 144 768 144 WIRE -176 160 -176 96 WIRE 16 160 16 128 WIRE 112 160 64 160 WIRE 624 160 624 144 WIRE 624 160 272 160 WIRE 144 224 144 208 WIRE 848 240 848 144 WIRE 16 256 16 224 WIRE 64 272 64 160 WIRE 160 272 64 272 WIRE 288 272 160 272 WIRE 400 272 352 272 WIRE 512 272 512 96 WIRE 512 272 480 272 WIRE 64 288 64 272 WIRE 160 288 160 272 WIRE -320 320 -320 224 WIRE -320 320 -400 320 WIRE -400 336 -400 320 WIRE -320 336 -320 320 WIRE -176 336 -176 224 WIRE -176 336 -320 336 WIRE -48 336 -48 128 WIRE 64 384 64 368 WIRE 160 384 160 352 WIRE 160 384 64 384 WIRE -320 416 -320 336 WIRE 64 416 64 384 WIRE 848 416 848 320 WIRE -176 432 -176 336 WIRE 192 480 144 480 WIRE 304 480 272 480 WIRE 384 480 368 480 WIRE 512 480 512 272 WIRE 624 480 624 160 WIRE 288 576 288 560 WIRE -320 592 -320 496 WIRE -240 592 -320 592 WIRE -176 592 -176 496 WIRE -176 592 -240 592 WIRE 384 592 384 480 WIRE 384 592 320 592 WIRE 624 592 624 544 WIRE 624 592 384 592 WIRE -48 608 -48 416 WIRE 0 608 -48 608 WIRE 32 608 0 608 WIRE 144 608 144 480 WIRE 144 608 112 608 WIRE 208 608 144 608 WIRE 256 608 208 608 WIRE 432 624 320 624 WIRE 512 624 512 544 WIRE 512 624 432 624 WIRE 624 624 624 592 WIRE 704 624 624 624 WIRE -48 656 -48 608 WIRE 0 656 0 608 WIRE 288 656 288 640 WIRE 512 656 512 624 WIRE 704 656 704 624 WIRE 432 672 432 624 WIRE 624 672 624 624 WIRE -48 768 -48 720 WIRE 0 768 0 720 WIRE 0 768 -48 768 WIRE 432 768 432 736 WIRE 512 768 512 736 WIRE 512 768 432 768 WIRE 624 768 624 736 WIRE 624 768 512 768 WIRE 704 768 704 736 WIRE 704 768 624 768 WIRE -48 800 -48 768 WIRE 432 800 432 768 FLAG -400 336 0 FLAG 288 560 V+ FLAG 144 224 V- FLAG -240 96 V+ FLAG -240 592 V- FLAG 768 144 output FLAG 144 32 V+ FLAG 288 656 V- FLAG 432 800 0 FLAG 16 256 0 FLAG -32 -480 V+ FLAG -32 -384 V- FLAG -256 0 0 FLAG 400 -240 0 FLAG 160 -240 0 FLAG 848 416 0 FLAG 64 416 0 FLAG 48 -240 0 FLAG 336 -240 0 FLAG -48 800 0 FLAG 208 608 dc-trim SYMBOL voltage -320 128 R0 WINDOW 123 0 0 Left 0 WINDOW 39 10 135 Left 2 WINDOW 0 12 7 Left 2 WINDOW 3 15 104 Left 2 SYMATTR SpiceLine Rser=0.01 SYMATTR InstName V1 SYMATTR Value 6 SYMBOL res 496 256 R90 WINDOW 0 1 52 VBottom 2 WINDOW 3 33 45 VTop 2 SYMATTR InstName R11 SYMATTR Value 10.5k SYMBOL cap 352 256 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 35 30 VTop 2 SYMATTR InstName C8 SYMATTR Value 0.015µ SYMATTR SpiceLine V=16 Irms=271m Rser=0.594318 Lser=0 mfg="KEMET" pn="C0603C153K4RAC" type="X7R" SYMBOL res 240 -144 R90 WINDOW 0 -1 46 VBottom 2 WINDOW 3 35 56 VTop 2 SYMATTR InstName R7 SYMATTR Value 6.34k SYMBOL res 448 -144 R90 WINDOW 0 -4 61 VBottom 2 WINDOW 3 39 55 VTop 2 SYMATTR InstName R8 SYMATTR Value 13k SYMBOL njf -128 -176 R90 WINDOW 0 -37 23 VRight 2 WINDOW 3 -9 -3 VRight 2 SYMATTR InstName J1 SYMATTR Value J112 SYMBOL voltage -320 400 R0 WINDOW 123 0 0 Left 0 WINDOW 39 10 135 Left 2 WINDOW 0 10 0 Left 2 WINDOW 3 15 104 Left 2 SYMATTR SpiceLine Rser=0.01 SYMATTR InstName V2 SYMATTR Value 6 SYMBOL res 48 272 R0 WINDOW 3 36 65 Left 2 SYMATTR Value 10.5k SYMATTR InstName R10 SYMBOL schottky 496 -288 R0 WINDOW 3 -17 -26 VRight 2 SYMATTR Value BAS40HY SYMATTR InstName D1 SYMATTR Description Diode SYMATTR Type diode SYMBOL schottky 608 -288 R0 WINDOW 3 -15 -25 VRight 2 SYMATTR Value BAS40HY SYMATTR InstName D2 SYMATTR Description Diode SYMATTR Type diode SYMBOL res -112 -64 R90 WINDOW 0 0 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName R3 SYMATTR Value 82 SYMBOL OpAmps\\LT1994 176 128 R0 WINDOW 3 10 -65 Left 2 WINDOW 0 11 -95 Left 2 SYMATTR InstName U1 SYMBOL OpAmps\\LT1057 288 544 M0 WINDOW 0 19 104 Left 2 WINDOW 3 18 130 Left 2 SYMATTR InstName U2B SYMBOL schottky 528 480 M0 WINDOW 3 52 -26 VRight 2 WINDOW 0 -18 3 Left 2 SYMATTR Value BAS40HY SYMATTR InstName D3 SYMATTR Description Diode SYMATTR Type diode SYMBOL schottky 640 480 M0 WINDOW 3 49 -26 VRight 2 WINDOW 0 -21 4 Left 2 SYMATTR Value BAS40HY SYMATTR InstName D4 SYMATTR Description Diode SYMATTR Type diode SYMBOL res 528 640 M0 WINDOW 3 25 87 Left 2 SYMATTR Value 220k SYMATTR InstName R16 SYMBOL res 720 640 M0 WINDOW 3 27 87 Left 2 SYMATTR Value 220k SYMATTR InstName R17 SYMBOL res -112 -256 R0 WINDOW 0 38 42 Left 2 WINDOW 3 36 66 Left 2 SYMATTR InstName R2 SYMATTR Value 1k SYMBOL res 320 -384 R0 WINDOW 0 -55 41 Left 2 WINDOW 3 -64 83 Left 2 SYMATTR InstName R13 SYMATTR Value 220k SYMBOL res 448 -32 R90 WINDOW 0 -4 61 VBottom 2 WINDOW 3 39 55 VTop 2 SYMATTR InstName R9 SYMATTR Value 1.0469Meg SYMBOL res -80 -288 R180 WINDOW 0 40 70 Left 2 WINDOW 3 45 42 Left 2 SYMATTR InstName R1 SYMATTR Value 1k SYMBOL res -32 432 R180 WINDOW 0 36 76 Left 2 WINDOW 3 36 40 Left 2 SYMATTR InstName R5 SYMATTR Value 33k SYMBOL res 176 464 M90 WINDOW 0 0 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName R15 SYMATTR Value 220 SYMBOL res 16 592 M90 WINDOW 0 0 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName R14 SYMATTR Value 10k SYMBOL cap 176 352 R180 WINDOW 0 -37 41 Left 2 WINDOW 3 -88 16 Left 2 SYMATTR InstName C7 SYMATTR Value 0.015µ SYMATTR SpiceLine V=16 Irms=271m Rser=0.594318 Lser=0 mfg="KEMET" pn="C0603C153K4RAC" type="X7R" SYMBOL OpAmps\\LT1057 -32 -496 M0 WINDOW 0 -63 128 Left 2 WINDOW 3 -54 156 Left 2 SYMATTR InstName U2A SYMBOL cap 720 128 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C13 SYMATTR Value 1µ SYMATTR SpiceLine V=10 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM153R61A105ME95" type="X5R" SYMBOL res 832 224 R0 SYMATTR InstName R18 SYMATTR Value 100k SYMBOL res 32 -384 R0 SYMATTR InstName R6 SYMATTR Value 22k SYMBOL res 192 -400 R270 WINDOW 0 35 55 VTop 2 WINDOW 3 -6 55 VBottom 2 SYMATTR InstName R12 SYMATTR Value 220k SYMBOL res -80 -560 R270 WINDOW 0 31 55 VTop 2 WINDOW 3 -3 56 VBottom 2 SYMATTR InstName R4 SYMATTR Value 47k SYMBOL cap 176 -352 M0 WINDOW 0 -22 9 Left 2 WINDOW 3 -31 54 Left 2 SYMATTR InstName C6 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap 416 -352 M0 WINDOW 0 -36 9 Left 2 WINDOW 3 -31 54 Left 2 SYMATTR InstName C10 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap 368 496 M270 WINDOW 0 32 32 VTop 2 WINDOW 3 0 32 VBottom 2 SYMATTR InstName C9 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap 416 672 R0 WINDOW 0 -37 6 Left 2 WINDOW 3 -31 54 Left 2 SYMATTR InstName C11 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap 608 672 R0 WINDOW 0 -33 9 Left 2 WINDOW 3 -31 54 Left 2 SYMATTR InstName C12 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap -192 160 R0 WINDOW 0 -22 9 Left 2 WINDOW 3 -31 54 Left 2 SYMATTR InstName C1 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap -192 432 R0 WINDOW 0 -22 9 Left 2 WINDOW 3 -31 54 Left 2 SYMATTR InstName C2 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap 32 224 R180 WINDOW 0 24 56 Left 2 WINDOW 3 24 8 Left 2 SYMATTR InstName C4 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL diode -32 720 R180 WINDOW 0 24 64 Left 2 WINDOW 3 24 0 Left 2 SYMATTR InstName D5 SYMATTR Value 1N4148 SYMBOL cap 0 -688 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C3 SYMATTR Value 10µ SYMATTR SpiceLine V=6.3 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM155R60J106ME15" type="X5R" SYMBOL cap -16 720 M180 WINDOW 0 24 56 Left 2 WINDOW 3 24 8 Left 2 SYMATTR InstName C5 SYMATTR Value 1µ SYMATTR SpiceLine V=10 Irms=0 Rser=0 Lser=0 mfg="Murata" pn="GRM153R61A105ME95" type="X5R" TEXT -624 272 Left 2 !.tran 0 300s 0s startup TEXT -1568 -728 Left 2 ;Edward Rawde's high purity 1kHz sinewave oscillator. 8 Nov 2024\n \nHarmonics are more than 80dB down in simulation.\nFFT the last 30 seconds.\nThere is only one harmonic stopping me claiming 90dB but the exact FFT result can depend\non exactly how much output is selected for the FFT. You may see different results.\n \nIf a prototype is ever built, pay attention to the type and quality of the capacitors used.\nElectrolytics are not intended. Put C1 and C2 near U1 supply pins.\nAlso pay attention to the stability of +/- 6V.\nIt would be nice to have a single 12V rail version but so far I can't get it to work.\n \nR1 and R2 and probably R7 should be easily changeable.\nR3 should be 220 ohm ten turn. R9 should be 1M ohm ten turn in series with 470k.\n \nI don't fully understand why the DC stabilization circuit through U2B achieves what it does\nand this makes me concerned about whether a real circuit would have the same behaviour.\nIt was added when I noticed that the diodes D1 and D2 weren't contributing equally so I \ndecided to try to derive a DC correction signal. This was originally connected to the FET source\nand then to R13. Since this is a DC correction signal I decided to try out the effect of\nconnecting it to U1 Vocm and was amazed that this works as well as it does. \nIf you disconnect R5, harmonics will not be more than 50dB down because D1 and D2 are no\nlonger providing stable and equal contributions to the level control feedback.\n \nIf you need even better performance then the circuit referenced by Bill Sloman can be used.\n