this repo has no description
1<!doctype html>
2<html lang="en">
3<head>
4 <meta charset="utf-8" />
5 <meta name="viewport" content="width=device-width,initial-scale=1" />
6 <title>Transmission line visualizer</title>
7 <link rel="stylesheet" type="text/css" href="style.css" />
8</head>
9<body>
10 <div class="wrap">
11 <h1>Transmission line visualizer</h1>
12
13 <div class="row">
14 <div class="panel">
15 <div class="controls">
16 <div class="readouts">
17 <div class="pill"><span>t / τ<sub>d</sub>:</span> <b class="mono" id="tRead">0.000</b></div>
18 <div class="pill"><span>Γ<sub>L</sub>:</span> <b class="mono" id="gLRead">0.000</b></div>
19 <div class="pill"><span>V<sub>S</sub>:</span> <b class="mono" id="vsRead">0.000 V</b></div>
20 <div class="pill"><span>V<sub>L</sub>:</span> <b class="mono" id="vlRead">0.000 V</b></div>
21 </div>
22 </div>
23
24 <div class="cfg-vert">
25 <div class="cfg-inputs-row">
26 <div class="cfg-row"><span>V<sub>g</sub> =</span><input id="Vg" type="number" step="0.1" value="5.0" /><span>V</span></div>
27 <div class="cfg-row"><span>R<sub>g</sub> =</span><input id="Rg" type="number" step="0.1" value="20.0" /><span>(Ω)</span></div>
28 <div class="cfg-row load-row">
29 <span>Load</span>
30 <select id="loadType">
31 <option value="open">Open (∞)</option>
32 <option value="R" selected>R (Ω)</option>
33 <option value="short">Short (0)</option>
34 <option value="C">C (pF)</option>
35 <option value="L">L (nH)</option>
36 </select>
37 <input id="loadValue" type="number" step="0.1" value="30.0" />
38 <span id="loadUnit">Ω</span>
39 </div>
40 </div>
41 <div class="cfg-panels-row">
42 <div class="cfg-extra">
43 <label><span class="lbl">Time scale — <span id="secPerTauRead" class="mono">2.5</span> s per τ<sub>d</sub></span>
44 <input id="secPerTau" type="range" min="0.5" max="6" step="0.1" value="2.5" />
45 </label>
46 <label><span class="lbl">Segments (N)</span>
47 <input id="segCount" type="number" min="1" max="10" step="1" value="1" />
48 </label>
49 <label><span class="lbl">Z<sub>0</sub> per segment (Ω)</span>
50 <div id="segZ0List" class="seg-z0-list"></div>
51 </label>
52 <div id="junctionList" class="junction-list"></div>
53 </div>
54 <div class="cfg-extra">
55 <label><span class="lbl">τ<sub>d</sub> (real-time delay for C/L values)</span>
56 <div class="tau-d-row">
57 <input id="tauD" type="number" min="0.001" step="0.1" value="1" />
58 <span class="unit-lbl">ns</span>
59 </div>
60 </label>
61 <label><span class="lbl">Reflection termination tolerance (% of |V<sub>1</sub>|)</span>
62 <input id="reflectTol" type="number" min="0" step="0.1" value="1" />
63 </label>
64 <label><span class="lbl">Signal shape</span>
65 <select id="riseMode">
66 <option value="step">Step (instantaneous)</option>
67 <option value="linear">Linear ramp (trapezoidal)</option>
68 <option value="exp">Smooth S-curve (erf)</option>
69 </select>
70 </label>
71 <label><span class="lbl">Rise time constant τ<sub>r</sub> / τ<sub>d</sub></span>
72 <input id="riseTau" type="number" min="0.01" max="5" step="0.01" value="0.1" disabled />
73 </label>
74 </div>
75 </div>
76 </div>
77
78 <div class="divider"></div>
79
80 <div class="transport">
81 <button id="startBtn">Start</button>
82 <button id="pauseBtn">Pause</button>
83 <button id="resetBtn">Reset</button>
84 </div>
85
86 <!-- Probe canvas: voltage at source node vs time -->
87 <canvas id="probe" width="600" height="300" style="width:600px;margin:0 auto;" aria-label="Probe — voltage at source node vs time"></canvas>
88
89 <div class="divider"></div>
90
91 <!-- Circuit canvas -->
92 <canvas id="circuit" width="1100" height="260" aria-label="Circuit with wavefront highlight"></canvas>
93
94 <div class="divider"></div>
95
96 <!-- Plot canvas (bottom) -->
97 <canvas id="plot" width="1100" height="360" aria-label="Voltage vs z plot with incident and reflected waves"></canvas>
98
99 <div class="legend">
100 <div class="key"><span class="swatch"></span> incident</div>
101 <div class="key"><span class="swatch ref"></span> reflected</div>
102 <div class="key"><span class="swatch sum"></span> total (incident + reflected)</div>
103 <div class="small">Axes: horizontal is position <span class="mono">z</span> (0 → ℓ). Vertical is voltage.</div>
104 </div>
105
106 <div class="eq-panel">
107 <div class="eq-lines">
108 <div>\[\Gamma_L = \dfrac{R_L - Z_0}{R_L + Z_0}, \quad \Gamma_S = \dfrac{R_g - Z_0}{R_g + Z_0}\]</div>
109 <div>\[V_1 = V_g \dfrac{Z_0}{R_g + Z_0}\]</div>
110 <div>\[V_{2k} = \Gamma_L V_{2k-1},\quad k \ge 1\]</div>
111 <div>\[V_{2k+1} = \Gamma_S V_{2k},\quad k \ge 1\]</div>
112 </div>
113 <div class="eq-title">Computed Values</div>
114 <div id="derivedValues" class="calc-values mono"></div>
115 <div id="waveValues" class="wave-values mono"></div>
116 </div>
117 </div>
118 </div>
119 </div>
120
121<script>
122 window.MathJax = {
123 tex: { inlineMath: [['\\(', '\\)'], ['$', '$']] },
124 svg: { fontCache: 'global' }
125 };
126</script>
127<script defer src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
128<script src="utils.js"></script>
129<script src="physics.js"></script>
130<script src="render.js"></script>
131<script src="app.js"></script>
132</body>
133</html>