<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Sense Pedals</title>
<link>https://sensepedals.ch/</link>
<atom:link href="https://sensepedals.ch/index.xml" rel="self" type="application/rss+xml"/>
<description>Guitar Pedals: Circuits, builds and tone.</description>
<generator>quarto-1.9.37</generator>
<lastBuildDate>Tue, 28 Jul 2026 22:00:00 GMT</lastBuildDate>
<item>
  <title>What is a gain stage?</title>
  <link>https://sensepedals.ch/posts/what-is-a-gain-stage/</link>
  <description><![CDATA[ 




<p>Every pedal on your board is built from gain stages. A Big Muff chains four of them. A Tube Screamer folds one around an op-amp. Whatever gets dissected on this site later will decompose into this one building block, so the first article is about the atom.</p>
<p>The specimen: the Electro-Harmonix LPB-1 Linear Power Booster, EHX’s first product, sold by mail order from 1968 <span class="citation" data-cites="ehx-flashback musicradar-matthews">[1], [2]</span>. It is a single gain stage and nothing else — one transistor, four resistors, two capacitors. By the end of this article you will know what each part is for, and you will have watched the stage do the two things every gain stage does: amplify, and clip.</p>
<section id="gain" class="level2">
<h2 class="anchored" data-anchor-id="gain">Gain</h2>
<p>A gain stage takes a voltage signal and outputs a larger copy. A guitar pickup delivers somewhere between 50 and 200 mV. For the circuit below, the size of the copy is set — to a first approximation — by two resistors:</p>
<p><img src="https://latex.codecogs.com/png.latex?%0AA_v%20%5C;%5Capprox%5C;%20-%5C,%5Cfrac%7BR_C%7D%7BR_E%7D%0A"></p>
<p>Two things to notice. The formula does not contain the transistor: the gain is set by parts costing a rappen each. That is <em>almost</em> true, and the error will be visible in the simulation below. Second, the minus sign — the output is inverted. For a single stage this is inaudible; the ear does not register absolute polarity. It starts to matter when stages are chained, which is a later article.</p>
<p>Decibels, since they come up constantly here: <img src="https://latex.codecogs.com/png.latex?A_%7BdB%7D%20=%2020%5Clog_%7B10%7D%7CA_v%7C">. A gain of 25 is about 28 dB.</p>
</section>
<section id="the-circuit" class="level2">
<h2 class="anchored" data-anchor-id="the-circuit">The circuit</h2>
<p>Component values are from traced vintage units <span class="citation" data-cites="beavis-lpb1 tgmusic-lpb1">[3], [4]</span>; the current reissue matches <span class="citation" data-cites="coda-lpb1">[5]</span>.</p>
<div id="cell-fig-schematic" class="cell" data-execution_count="1">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> schemdraw</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> schemdraw.elements <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> elm</span>
<span id="cb1-3"></span>
<span id="cb1-4"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> schemdraw.Drawing() <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> d:</span>
<span id="cb1-5">    d.config(unit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>, fontsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">11</span>)</span>
<span id="cb1-6">    Q <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> elm.BjtNpn(circle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).anchor(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'base'</span>).label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Q1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'right'</span>, ofst<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.8</span>)</span>
<span id="cb1-7"></span>
<span id="cb1-8">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># input side: a short lead first, so the divider tap sits</span></span>
<span id="cb1-9">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># clearly left of the transistor</span></span>
<span id="cb1-10">    elm.Line().at(Q.base).left(d.unit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb1-11">    tap <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> d.here</span>
<span id="cb1-12">    elm.Capacitor().left().label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'C1</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">100n'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'top'</span>).reverse()</span>
<span id="cb1-13">    elm.Dot(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">open</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'in'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'left'</span>)</span>
<span id="cb1-14"></span>
<span id="cb1-15">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># bias divider, now on its own vertical line</span></span>
<span id="cb1-16">    elm.Line().at(tap).up(d.unit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb1-17">    elm.Resistor().up().label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'R1</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">430k'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bottom'</span>)</span>
<span id="cb1-18">    elm.Vdd().label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'+9 V'</span>)</span>
<span id="cb1-19">    elm.Resistor().at(tap).down(d.unit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>).label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'R2</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">43k'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bottom'</span>)</span>
<span id="cb1-20">    elm.Ground()</span>
<span id="cb1-21"></span>
<span id="cb1-22">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># collector side: rise first, then branch — R3 continues up,</span></span>
<span id="cb1-23">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># C2 taps the junction and exits right, clear of the transistor</span></span>
<span id="cb1-24">    elm.Line().at(Q.collector).up(d.unit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb1-25">    junc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> d.here</span>
<span id="cb1-26">    elm.Resistor().up().label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'R3</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">10k'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bottom'</span>)</span>
<span id="cb1-27">    elm.Vdd().label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'+9 V'</span>)</span>
<span id="cb1-28">    elm.Line().at(junc).right(d.unit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>)</span>
<span id="cb1-29">    elm.Capacitor().right().label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'C2</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">100n'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'top'</span>)</span>
<span id="cb1-30">    elm.Dot(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">open</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'out'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'right'</span>)</span>
<span id="cb1-31"></span>
<span id="cb1-32">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># emitter side unchanged</span></span>
<span id="cb1-33">    elm.Resistor().at(Q.emitter).down().label(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'R4</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">390'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bottom'</span>)</span>
<span id="cb1-34">    elm.Ground()</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-display">
<div id="fig-schematic" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-schematic-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://sensepedals.ch/posts/what-is-a-gain-stage/index_files/figure-html/fig-schematic-output-1.svg" class="img-fluid figure-img">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-schematic-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;1: The LPB-1 gain stage. One NPN transistor in common-emitter configuration; component values from the 1968 original.
</figcaption>
</figure>
</div>
</div>
</div>
<p>Signal path, left to right. <strong>C1</strong> passes the signal and blocks DC — the base must sit at a fixed resting voltage, and the guitar is not invited to disturb it. <strong>R1</strong> and <strong>R2</strong> divide the 9 V supply down to about 0.82 V at the base, which sets roughly 0.5 mA of collector current, which drops the collector to about 4.1 V — near half the supply, leaving close to maximum room to swing in both directions. Wiggle the base and the collector current follows; <strong>R3</strong> converts that current wiggle back into a voltage, larger than the input by the resistor ratio:</p>
<p><img src="https://latex.codecogs.com/png.latex?%0AA_v%20%5Capprox%20-%5Cfrac%7BR_3%7D%7BR_4%7D%20=%20-%5Cfrac%7B10%5C,%5Ctext%7Bk%7D%5COmega%7D%7B390%5C,%5COmega%7D%0A%5Capprox%20-26%0A"></p>
<p><strong>C2</strong> passes the amplified signal out and keeps the 4.1 V to itself.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Where it came from
</div>
</div>
<div class="callout-body-container callout-body">
<p>Mike Matthews founded EHX in 1968 with $1,000; the LPB-1 came out of prototype work with Bob Myer, an engineer at Bell Labs <span class="citation" data-cites="ehx-story musicradar-matthews">[2], [6]</span>. The original transistor was a 2N5133; the simulation below uses the better-documented 2N5088 — the same substitution EHX themselves made later <span class="citation" data-cites="coda-lpb1">[5]</span>. Whether that substitution is audible is a question for its own article.</p>
</div>
</div>
</section>
<section id="simulation" class="level2">
<h2 class="anchored" data-anchor-id="simulation">Simulation</h2>
<p>Claims require receipts. The netlist sits next to this article as <a href="spice/lpb1.cir"><code>spice/lpb1.cir</code></a>; run it yourself with <code>ngspice -b</code>. Input: a 100 mV, 1 kHz sine — guitar-scale.</p>
<div id="run-helper" class="cell" data-execution_count="2">
<details class="code-fold">
<summary>The five lines that run ngspice and read its answer</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> subprocess, tempfile, pathlib</span>
<span id="cb2-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb2-3"></span>
<span id="cb2-4">NETLIST <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pathlib.Path(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"spice/lpb1.cir"</span>).read_text()</span>
<span id="cb2-5"></span>
<span id="cb2-6"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> run_stage(amplitude_v<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>):</span>
<span id="cb2-7">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Run the LPB-1 deck with a given input amplitude; return a DataFrame."""</span></span>
<span id="cb2-8">    deck <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> NETLIST.replace(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"SIN(0 0.1 1k)"</span>, <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"SIN(0 </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>amplitude_v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;"> 1k)"</span>)</span>
<span id="cb2-9">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> tempfile.TemporaryDirectory() <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> tmp:</span>
<span id="cb2-10">        deckfile <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pathlib.Path(tmp) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"deck.cir"</span></span>
<span id="cb2-11">        deckfile.write_text(deck)</span>
<span id="cb2-12">        subprocess.run([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ngspice"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-b"</span>, deckfile.name], cwd<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>tmp,</span>
<span id="cb2-13">                       check<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, capture_output<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb2-14">        df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(pathlib.Path(tmp) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"waves.dat"</span>,</span>
<span id="cb2-15">                         sep<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="vs" style="color: #20794D;
background-color: null;
font-style: inherit;">r"</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">\s</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="vs" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>, names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"t"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vin"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"t2"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vout"</span>])</span>
<span id="cb2-16">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> df[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"t"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vin"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vout"</span>]]</span></code></pre></div></div>
</details>
</div>
<div id="cell-fig-clean" class="cell" data-execution_count="3">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb3-2"></span>
<span id="cb3-3">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> run_stage(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb3-4">fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.5</span>))</span>
<span id="cb3-5">ax.plot(df.t <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e3</span>, df.vin, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey"</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"input"</span>)</span>
<span id="cb3-6">ax.plot(df.t <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e3</span>, df.vout, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"black"</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.2</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"output"</span>)</span>
<span id="cb3-7">ax.set_xlabel(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"time (ms)"</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> ax.set_ylabel(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"volts"</span>)</span>
<span id="cb3-8">ax.legend(frameon<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> ax.grid(alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.3</span>)</span>
<span id="cb3-9">plt.tight_layout()</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-display">
<div id="fig-clean" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-clean-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://sensepedals.ch/posts/what-is-a-gain-stage/index_files/figure-html/fig-clean-output-1.png" width="760" height="326" class="figure-img">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-clean-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;2: 100 mV in (grey), roughly 2.2 V out (black). The stage delivers a gain of about 22 — and note the output is upside down, exactly as the minus sign promised.
</figcaption>
</figure>
</div>
</div>
</div>
<p>In: 100 mV. Out: 2.2 V, upside down. Gain of 22.</p>
<p>The formula said 26. The missing part is the transistor’s internal emitter resistance — about 50 Ω at this operating point — which adds to R4. SPICE includes it; the napkin does not <span class="citation" data-cites="horowitz-hill">[7, Ch. 2]</span>. That term, and why it makes gain drift with bias and temperature, is a future article.</p>
</section>
<section id="clipping" class="level2">
<h2 class="anchored" data-anchor-id="clipping">Clipping</h2>
<p>The collector can swing between the supply rail and slightly above ground: about 8.5 V of room. Feed the stage 1 V and it would need 22 V of output. It does this instead:</p>
<div id="cell-fig-clipped" class="cell" data-execution_count="4">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> run_stage(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span>)</span>
<span id="cb4-2">fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.5</span>))</span>
<span id="cb4-3">ax.plot(df.t <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e3</span>, df.vin, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey"</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"input"</span>)</span>
<span id="cb4-4">ax.plot(df.t <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e3</span>, df.vout, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"black"</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.2</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"output"</span>)</span>
<span id="cb4-5">ax.set_xlabel(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"time (ms)"</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> ax.set_ylabel(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"volts"</span>)</span>
<span id="cb4-6">ax.legend(frameon<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> ax.grid(alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.3</span>)</span>
<span id="cb4-7">plt.tight_layout()</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-display">
<div id="fig-clipped" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-clipped-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://sensepedals.ch/posts/what-is-a-gain-stage/index_files/figure-html/fig-clipped-output-1.png" width="759" height="326" class="figure-img">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-clipped-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;3: The same stage fed 1 V. The output flattens against both rails — asymmetrically, note the tops differ from the bottoms. This waveform is the founding document of the fuzz industry.
</figcaption>
</figure>
</div>
</div>
</div>
<p>The tops and bottoms are cut off, and unevenly — the stage runs out of room downward before upward. A flattened waveform contains harmonics that were not in the string’s motion; that is what “breakup” is. The asymmetry decides which harmonics, and a good share of pedal design consists of shaping exactly that.</p>
<p>Distortion is a gain stage pushed past politeness. Most circuits this site will ever analyze are variations on the two plots above: where the ceiling sits, how hard the signal hits it, and what shape the clipping takes.</p>
</section>
<section id="skipped-deliberately" class="level2">
<h2 class="anchored" data-anchor-id="skipped-deliberately">Skipped, deliberately</h2>
<p>Bias stability. What C1 and C2 do to the low end. Input and output impedance, and why the pickup cares about them. The internal resistance behind the 22-versus-26 gap. Each gets its own article; this one only needed the atom.</p>
<p><em>Netlist, schematic code, and page source are in the site repository. Run the deck, bend the values, argue with the results.</em></p>


<!-- -->


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">References</h2><div id="refs" class="references csl-bib-body" data-entry-spacing="0">
<div id="ref-ehx-flashback" class="csl-entry">
<div class="csl-left-margin">[1] </div><div class="csl-right-inline"><span>“<span>EHX</span> flashback: 1968 <span>LPB-1</span>.”</span> Accessed: Jul. 29, 2026. [Online]. Available: <a href="https://www.ehx.com/blog/ehx-flashback-1968-lpb1/">https://www.ehx.com/blog/ehx-flashback-1968-lpb1/</a></div>
</div>
<div id="ref-musicradar-matthews" class="csl-entry">
<div class="csl-left-margin">[2] </div><div class="csl-right-inline"><span>“Interview: Mike matthews (<span>Electro-Harmonix</span> founder).”</span> Accessed: Jul. 29, 2026. [Online]. Available: <a href="https://www.musicradar.com/news/guitars/interview-mike-matthews-electro-harmonix-founder-546155">https://www.musicradar.com/news/guitars/interview-mike-matthews-electro-harmonix-founder-546155</a></div>
</div>
<div id="ref-beavis-lpb1" class="csl-entry">
<div class="csl-left-margin">[3] </div><div class="csl-right-inline"><span>“<span>Electro-Harmonix</span> <span>LPB-1</span> booster schematic.”</span> Accessed: Jul. 29, 2026. [Online]. Available: <a href="https://beavisaudio.com/schematics/Electro-Harmonix-LPB-1-Schematic.htm">https://beavisaudio.com/schematics/Electro-Harmonix-LPB-1-Schematic.htm</a></div>
</div>
<div id="ref-tgmusic-lpb1" class="csl-entry">
<div class="csl-left-margin">[4] </div><div class="csl-right-inline">TG Music, <span>“Vintage <span>EHX</span> <span>LPB-1</span> rebuild.”</span> Accessed: Jul. 29, 2026. [Online]. Available: <a href="https://tg-music.neocities.org/src/content/lpb1">https://tg-music.neocities.org/src/content/lpb1</a></div>
</div>
<div id="ref-coda-lpb1" class="csl-entry">
<div class="csl-left-margin">[5] </div><div class="csl-right-inline"><span>“<span>LPB-1</span> circuit analysis.”</span> Accessed: Jul. 29, 2026. [Online]. Available: <a href="https://www.coda-effects.com/p/lpb1-circuit-analysis.html">https://www.coda-effects.com/p/lpb1-circuit-analysis.html</a></div>
</div>
<div id="ref-ehx-story" class="csl-entry">
<div class="csl-left-margin">[6] </div><div class="csl-right-inline"><span>“The <span>Electro-Harmonix</span> story.”</span> Accessed: Jul. 29, 2026. [Online]. Available: <a href="https://www.ehx.com/the-ehx-story/">https://www.ehx.com/the-ehx-story/</a></div>
</div>
<div id="ref-horowitz-hill" class="csl-entry">
<div class="csl-left-margin">[7] </div><div class="csl-right-inline">P. Horowitz and W. Hill, <em>The art of electronics</em>, 3rd ed. Cambridge University Press, 2015.</div>
</div>
</div></section></div> ]]></description>
  <category>circuit-analysis</category>
  <category>history</category>
  <guid>https://sensepedals.ch/posts/what-is-a-gain-stage/</guid>
  <pubDate>Tue, 28 Jul 2026 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Seven years is too long</title>
  <link>https://sensepedals.ch/posts/seven-years-is-too-long/</link>
  <description><![CDATA[ 




<p>The King of Tone is a dual overdrive, built by hand at Analog Man in Connecticut. Among transparent overdrives it is the reference — the pedal other pedals get described with. I wanted one. So do enough other people that the waiting list has its own tracking site <span class="citation" data-cites="kottracker">[1]</span>; when I checked, the realistic estimate stood north of seven years.</p>
<p>Seven years is a long time to want a pedal.</p>
<section id="the-realization" class="level2">
<h2 class="anchored" data-anchor-id="the-realization">The realization</h2>
<p>A pedal is not a secret. It is a circuit in a folded steel box, and circuits can be read. The King of Tone in particular has been traced, discussed, and documented by the DIY community for years. The parts cost very little. What stood between wanting one and having one was not seven years — it was a soldering iron and the willingness to be wrong a few times.</p>
<p>So I built one.</p>
</section>
<section id="the-king-gets-a-king" class="level2">
<h2 class="anchored" data-anchor-id="the-king-gets-a-king">The king gets a king</h2>
<p>A circuit with this reputation deserved better than a bare enclosure. My build got artwork: a crowned king, silver-bearded, the crown grown through with coral branches and jewels in violet, turquoise and amber. Designing that image took longer than populating the board, and it was worth it — it set the rule every pedal from this bench still follows: if the circuit is iconic, the box has to be too.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://sensepedals.ch/posts/seven-years-is-too-long/king-of-tone.png" class="img-fluid figure-img" style="width:60.0%"></p>
<figcaption>The first one. King of Tone circuit, own artwork, own board.</figcaption>
</figure>
</div>
</section>
<section id="the-first-batch" class="level2">
<h2 class="anchored" data-anchor-id="the-first-batch">The first batch</h2>
<p>The King of Tone build did not stay alone. Next to it came a Kingtone Duelist — the other transparent dual overdrive with a serious reputation — with its own artwork in the same spirit. Two circuits, two painted boxes, into the hands of musicians around here.</p>
<p>What came back was not applause. It was conversation: which channel, which clipping mode, which order in the chain, what to change. That conversation has not stopped since, and it is the actual product of that first batch — the workshop exists because of it, and this site documents what it keeps producing.</p>
</section>
<section id="for-the-record" class="level2">
<h2 class="anchored" data-anchor-id="for-the-record">For the record</h2>
<p>The King of Tone is Analog Man’s design and trademark; the Duelist belongs to King Tone. Those first builds were exactly that — builds, for my own board and for learning. What is sold from this bench under the Sense Pedals name are its own designs. But the debt is real, and this post is the receipt.</p>


<!-- -->


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">References</h2><div id="refs" class="references csl-bib-body" data-entry-spacing="0">
<div id="ref-kottracker" class="csl-entry">
<div class="csl-left-margin">[1] </div><div class="csl-right-inline"><span>“King of tone tracker.”</span> Accessed: Jul. 29, 2026. [Online]. Available: <a href="https://kottracker.com/">https://kottracker.com/</a></div>
</div>
</div></section></div> ]]></description>
  <category>workshop</category>
  <guid>https://sensepedals.ch/posts/seven-years-is-too-long/</guid>
  <pubDate>Mon, 27 Jul 2026 22:00:00 GMT</pubDate>
  <media:content url="https://sensepedals.ch/posts/seven-years-is-too-long/king-of-tone.png" medium="image" type="image/png" height="144" width="144"/>
</item>
</channel>
</rss>
