EmbeddedRelated.com

Ten Little Algorithms, Part 4: Topological Sort

Jason SachsJason Sachs July 5, 20151 comment

Jason Sachs detours from signal processing to make topological sort feel practical and even a little funny, using a Martian Stew recipe to illustrate dependencies and cycles. He walks through two canonical algorithms, Kahn’s method and the depth-first-search variant, compares adjacency-list and matrix graph representations, and provides complete Python implementations so you can run and inspect cycle detection and ordering yourself.


Oh Robot My Robot

Jason SachsJason Sachs June 26, 2015

Jason Sachs turns a familiar poem into a robot sendoff, and the result is equal parts funny and oddly technical. The piece riffs on broken hardware, vanishing memory, and a machine that has clearly seen better days, all while keeping the rhythm of a classic elegy. If you enjoy engineering humor with a literary twist, this is a quick, memorable read.


Important Programming Concepts (Even on Embedded Systems) Part VI : Abstraction

Jason SachsJason Sachs June 16, 20153 comments

Abstraction is essential, but it is not free. Jason Sachs walks through the many faces of abstraction—pattern recognition, generalization, simplification, and indirection—and shows how each helps and hurts real projects. Using examples from math, API design, UI toolkits, schematics, and embedded C, he gives practical context so firmware engineers can apply abstractions without causing maintenance or debugging headaches.


Ten Little Algorithms, Part 3: Welford's Method (and Friends)

Jason SachsJason Sachs May 10, 20156 comments

Jason Sachs takes a practical look at Welford's method, a numerically stable online algorithm for computing mean and sample variance without storing large batches. He demonstrates Python implementations, shows why the naive sum and sum-of-squares approach suffers catastrophic cancellation, and why Welford is a better fit for memory- and CPU-constrained embedded systems. Jason then turns Welford into simple filters for tracking time-varying noise and discusses heuristic fixes and tradeoffs.


Python Code from My Articles Now Online in IPython Notebooks

Jason SachsJason Sachs May 1, 20152 comments

Jason M. Sachs has published the Python code from his EmbeddedRelated articles as standalone IPython notebooks. He automated extraction of example code and pushed the notebooks to a public Bitbucket repository under the Apache license, and they are viewable via nbviewer. The post lists available notebooks and asks readers to link back to EmbeddedRelated and share feedback on how they used the code.


Ten Little Algorithms, Part 2: The Single-Pole Low-Pass Filter

Jason SachsJason Sachs April 27, 201517 comments

Jason Sachs shows how a single-pole IIR low-pass filter, implementable in one line y += alpha * (x - y), tames noise in embedded signals without floating point. The post explains how to compute alpha from tau and delta-t, practical tradeoffs like phase lag and oversampling, and fixed-point pitfalls including how many extra state bits you need to avoid quantization. Short, practical, and code-ready.


Ten Little Algorithms, Part 1: Russian Peasant Multiplication

Jason SachsJason Sachs March 21, 20156 comments

Jason Sachs revisits a centuries-old multiplication trick and shows why it still matters. He lays out Russian Peasant Multiplication with simple Python code, then reveals how the same shift-and-add pattern maps to GF(2) polynomial arithmetic and to exponentiation by squaring. The post mixes historical context with practical bitwise techniques that are useful for embedded and low-level math work.


Two Capacitors Are Better Than One

Jason SachsJason Sachs February 15, 20155 comments

Jason Sachs revisits a simple stacked RC trick that dramatically reduces DC error from capacitor insulation leakage in long time-constant filters. Splitting one RC into two stages forces most of the DC drop onto the lower capacitor, squaring the remaining error while changing the effective pole locations. The post walks through the math, practical component tradeoffs, and when to prefer a digital approach.


My Love-Hate Relationship with Stack Overflow: Arthur S., Arthur T., and the Soup Nazi

Jason SachsJason Sachs February 15, 201551 comments

Jason Sachs traces his decade-long relationship with Stack Overflow, celebrating its fast answers, polished UI, and massive searchable archive while calling out a growing culture of harsh moderation. He argues strict, quality-first closures and inflexible automation often alienate newcomers and block helpful short-term answers. The post urges kinder handling of gray-area questions and smarter automation to keep the site useful and welcoming.


Voltage Drops Are Falling on My Head: Operating Points, Linearization, Temperature Coefficients, and Thermal Runaway

Jason SachsJason Sachs January 19, 2015

A lot of the neat, tidy diode and transistor rules you learned in school are really just approximations. Jason Sachs shows how operating points, linearization, and temperature coefficients give you a better mental model for real circuits, then uses that framework to explain why thermal runaway happens. Along the way, he connects the theory to practical device behavior, op-amp output stages, and the design tricks that keep parts from letting out the magic smoke.


Linear Feedback Shift Registers for the Uninitiated, Part VIII: Matrix Methods and State Recovery

Jason SachsJason Sachs November 21, 20174 comments

Matrix methods for LFSRs look intimidating, but Jason Sachs walks through companion-matrix representations and shows why they matter for time shifts and state recovery. He derives lookahead masks from powers of the companion matrix, then translates those matrix insights into efficient bitwise and finite-field algorithms. The article includes two simple state-recovery methods and working Python/libgf2 examples you can run and adapt.


Linear Feedback Shift Registers for the Uninitiated, Part XVII: Reverse-Engineering the CRC

Jason SachsJason Sachs July 7, 20181 comment

Jason Sachs shows how to pry CRC parameters out of a black-box oracle and reimplement the checksum yourself. By canceling the affine offsets, probing single-bit basis messages, and treating per-bit outputs as LFSR sequences, you can recover the generator polynomial, bit and byte order, and init/final XOR values. The post includes working Python code, a 4-message shortcut, and real-world tests such as zlib CRC32.


Linear Feedback Shift Registers for the Uninitiated, Part V: Difficult Discrete Logarithms and Pollard's Kangaroo Method

Jason SachsJason Sachs October 1, 2017

Most discrete-log problems are hopeless by brute force, but clever algorithms cut that cost to feasible levels. This installment walks through baby-step giant-step, Pollard’s rho and kangaroo methods, and how Silver-Pohlig-Hellman and index calculus leverage group structure to speed attacks on GF(2^n) fields. Jason Sachs includes Python examples, heuristics, and complexity nuggets so you can see when each method is practical.


Oscilloscope review: Hameg HMO2024

Jason SachsJason Sachs March 28, 20133 comments

Jason Sachs tests the Hameg HMO2024, a 200MHz 4-channel mixed-signal oscilloscope that promises Agilent-like features at a lower price. He finds strong analog noise performance, useful hi-res and zoom modes, and inexpensive serial-decode options, but warns of clumsy digital-input handling, awkward data-transfer software, and missing per-channel thresholds and Ethernet waveform export. The review helps budget-conscious embedded engineers weigh the trade-offs.


Linear Feedback Shift Registers for the Uninitiated, Part XIV: Gold Codes

Jason SachsJason Sachs April 18, 2018

Gold codes solve a practical spread-spectrum problem, sharing one PRBS across many transmitters eventually runs into ugly synchronization and correlation issues. Jason Sachs walks through why shifted copies of a single LFSR sequence are not enough, then shows how preferred pairs of m-sequences create a family of Gold codes with bounded cross-correlation. The post wraps with Python experiments and a UART DSSS demo that decodes multiple overlapping messages cleanly.


Jaywalking Around the Compiler

Jason SachsJason Sachs December 9, 20193 comments

Messing with inline assembly can feel powerful until the compiler silently undoes you. Jason Sachs walks through a real bug on a Microchip dsPIC33E where pushing CORCON and writing a fixed value corrupts compiler-managed state and produces wrong results when the compiler reorders code. The post shows why the stack and certain registers are off-limits to raw inline asm, and gives practical, safe patterns to save and restore mode bits.


Linear Feedback Shift Registers for the Uninitiated, Part XV: Error Detection and Correction

Jason SachsJason Sachs June 12, 2018

CRCs and Hamming codes look a lot less magical when you view them as redundancy with a purpose. Jason Sachs walks from parity bits and checksums into finite-field polynomial arithmetic, then shows how CRCs map cleanly onto LFSRs and how Hamming codes use syndromes to locate single-bit errors. It is a practical tour of error detection and correction, with enough worked examples to make the theory feel usable.


Isolated Sigma-Delta Modulators, Rah Rah Rah!

Jason SachsJason Sachs April 25, 2013

Analog isolation can blow up DAQ budgets, but isolated sigma-delta modulators let you send a single 1-bit stream and a clock across the barrier, keeping costs down. Jason walks through Avago, TI, and Analog Devices parts, explains sigma-delta noise shaping in plain terms, and calls out the real engineering work: converting a 10–20 MHz bitstream into usable samples with sinc/CIC decimators or FPGA filtering.


How to Include MathJax Equations in SVG With Less Than 100 Lines of JavaScript!

Jason SachsJason Sachs May 23, 201410 comments

Jason Sachs recounts a simple hack to get MathJax equations inside SVG without heavy dependencies or complex tools. His approach renders MathJax in temporary HTML divs, captures the resulting SVG nodes, and swaps them into SVG elements after MathJax finishes. The standalone JavaScript is under 100 lines, works with exported Simulink diagrams, and avoids CoffeeScript or jQuery.


Scorchers, Part 3: Bare-Metal Concurrency With Double-Buffering and the Revolving Fireplace

Jason SachsJason Sachs July 25, 20201 comment

Jason Sachs presents a practical, low-overhead concurrency pattern for tiny bare-metal systems where an ISR (Speedy) must safely exchange data with a nonreal-time main loop (Poky). He describes the "revolving fireplace", a double-buffering variant that swaps ownership of two shared memory regions, and walks through C examples, atomic/volatile considerations, and testing strategies so you can implement it on RAM-constrained MCUs.