<html aria-label="message body"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">Thanks to everyone on this thread. I am currently working on a MIDI to Hertz program for the Raspberry Pi (though I can probably move to an ESP32). Two last questions. Can anyone tell me which commercial synths were linear response? I know about the Moog Taurus / Behringer Toro.<div><br></div><div>Lastly, can anyone suggest a good design / schematic / kit for a linear VCO? </div><div><br></div><div>TIA<br id="lineBreakAtBeginningOfMessage"><div><br><blockquote type="cite"><div>On Mar 20, 2026, at 7:39 AM, Mike Bryant <mbryant@futurehorizons.com> wrote:</div><br class="Apple-interchange-newline"><div><meta charset="UTF-8"><div class="elementToProof" style="font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt;">Well yes I was actually doing frequencies like 1004Hz (a telecomms test freq) at 8MHz sampling, but as you say the secret with PDM is to stay well away from the peak positive and peak negative values. However a little bit of high frequency noise injection (from a look up table) added to the digital sinewave helped as this also gets filtered out.</div><div id="appendonsend" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid;"></div><hr tabindex="-1" style="font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; display: inline-block; width: 880.03125px;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;"></span><div id="divRplyFwdMsg" dir="ltr" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid;"><font face="Calibri, sans-serif" style="font-size: 11pt;"><b>From:</b><span class="Apple-converted-space"> </span>Tom Wiltshire <tom@electricdruid.net><br><b>Sent:</b><span class="Apple-converted-space"> </span>20 March 2026 10:37<br><b>To:</b><span class="Apple-converted-space"> </span>Mike Bryant <mbryant@futurehorizons.com><br><b>Cc:</b><span class="Apple-converted-space"> </span>brianw <brianw@audiobanshee.com>; synth-diy@synth-diy.org <synth-diy@synth-diy.org><br><b>Subject:</b><span class="Apple-converted-space"> </span>Re: [sdiy] Linear response VCOs?</font><div> </div></div><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; overflow-wrap: break-word; line-break: after-white-space;">There's also differences in *where* the errors are worst between PWM and PDM.<div><br></div><div>Generally, you worry most about the fundamental and lowest harmonics of the pulse output frequency, since they're the hardest to filter. For PWM, you get the worst fundamental and 3rd harmonic at the midpoint value, when the output is a 50/50 square wave. You get the worst 2nd harmonic at the 25% and 75% values, since that's where that harmonic peaks for pulse waves. This is all fairly "central" and very likely to be values you're using all the time. In short, if your PWM output is at 100KHz, then 100KHz is what you'll get, and your filtering had better be able to deal with that.</div><div><br></div><div>For PDM, the central values are the best-case, rather than the worst. With PDM, the worst-case comes as you get to extreme values, so <5% or >95%. This happens because there's so few pulses going out that the effective output rate drops. Imagine we're using a 2MHz PDM output to create a 10-bit DAC. If we output our midpoint value of 512, we get a lovely squarewave at 1MHz - one period on, one period off. If we output a value of 1, we get one period on followed by 1023 periods off - a very narrow pulse wave at 2MHz/1024= 1953Hz. That's terrible! Of course, as you approach these extremes, the amount of fundamental and lower harmonics in such a narrow pulse drops off markedly, but still - you probably weren't thinking of a 2KHz output when you designed your 2MHz PDM DAC.</div><div>My view is that the secret with PDM is to discard the extremes and use the good bit in the middle!</div><div><br></div><div>Tom</div><div><br><div><br><blockquote type="cite"><div>On 20 Mar 2026, at 09:30, Mike Bryant <<a href="mailto:mbryant@futurehorizons.com">mbryant@futurehorizons.com</a>> wrote:</div><br class="x_Apple-interchange-newline"><div><div class="x_elementToProof" style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt;">This is why you use PDM, not PWM. The pulses are at much higher frequency and easier to filter to the correct DC level with less noise.</div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt;"><br></div><hr style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; display: inline-block; width: 722.25px;"><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; float: none; display: inline !important;"></span><div id="x_divRplyFwdMsg" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none;"><div style="direction: ltr; font-family: Calibri, sans-serif; font-size: 11pt;"><b>From:</b> Synth-diy <<a href="mailto:synth-diy-bounces@synth-diy.org">synth-diy-bounces@synth-diy.org</a>> on behalf of brianw <<a href="mailto:brianw@audiobanshee.com">brianw@audiobanshee.com</a>><br><b>Sent:</b> 20 March 2026 08:22<br><b>To:</b> <a href="mailto:synth-diy@synth-diy.org">synth-diy@synth-diy.org</a><span class="x_Apple-converted-space"> </span><<a href="mailto:synth-diy@synth-diy.org">synth-diy@synth-diy.org</a>><br><b>Subject:</b> Re: [sdiy] Linear response VCOs?</div><div style="direction: ltr;"> </div></div><div style="font-family: Helvetica; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; font-size: 11pt;">The challenge with PWM is that changing a rail-to-rail square wave into a steady DC value requires a lot of filtering. That filter must remove the sharp rise and fall of the raw PWM output, and thus the DC output value cannot sharply rise or fall either. The problem gets worse if a single channel needs to feed multiple unrelated CV values through a mux+S&H. The slew rate is horrible.<br><br>Brian<br><br><br></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; float: none; display: inline !important;">________________________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none;"><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; float: none; display: inline !important;">This is the Synth-diy mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none;"><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; float: none; display: inline !important;">Submit email to:<span class="x_Apple-converted-space"> </span></span><a href="mailto:Synth-diy@synth-diy.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Synth-diy@synth-diy.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none;"><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; float: none; display: inline !important;">View archive at:<span class="x_Apple-converted-space"> </span></span><a href="https://synth-diy.org/pipermail/synth-diy/" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">https://synth-diy.org/pipermail/synth-diy/</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none;"><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; float: none; display: inline !important;">Check your settings at:<span class="x_Apple-converted-space"> </span></span><a href="https://synth-diy.org/mailman/listinfo/synth-diy" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">https://synth-diy.org/mailman/listinfo/synth-diy</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none;"><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; float: none; display: inline !important;">Selling or trading? Use<span class="x_Apple-converted-space"> </span></span><a href="mailto:marketplace@synth-diy.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">marketplace@synth-diy.org</a></div></blockquote></div><br></div></div><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">________________________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">This is the Synth-diy mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">Submit email to: Synth-diy@synth-diy.org</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">View archive at: https://synth-diy.org/pipermail/synth-diy/</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">Check your settings at: https://synth-diy.org/mailman/listinfo/synth-diy</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 17px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">Selling or trading? Use marketplace@synth-diy.org</span></div></blockquote></div><br></div></body></html>