Frequency Translation by Way of Lowpass FIR Filtering
Rick Lyons shows how you can translate a signal down in frequency and lowpass filter it in a single operation by embedding cosine mixing values into FIR coefficients. The post explains how to build the translating FIR, how to choose the number of coefficient sets, and how decimation can dramatically reduce storage needs while noting practical constraints like the requirement that ft be an integer submultiple of fs.
Fibonacci trick
Tim Wescott shares a compact, surprising trick linking Fibonacci numbers and difference equations. Start with any two consecutive Fibonacci numbers, negate the larger-magnitude one, and iterate the usual recurrence; after a few steps you'll arrive at the standard Fibonacci sequence or its negative. This behavior is specific to the Fibonacci recurrence and makes a great illustrative example for teaching linear recurrences.
Harmonic Notch Filter
A practical, DSP-friendly recipe for scrubbing 60 Hz power-line hum and its harmonics from noisy ECG and EEG recordings is presented, using IIR notch filters built from second-order all-pass sections. The post derives how to set all-pass phase to place notches and compute biquad coefficients by solving a simple 2x2 system, then shows C code and precomputed coefficients for cascading the first eight odd harmonics at a 2 kHz sample rate. Engineers get a compact, editable implementation with explicit control over notch bandwidth.
Multimedia Processing with FFMPEG
FFMPEG is a set of libraries and a command line tool for encoding and decoding audio and video in many different formats. It is a free software project for manipulating/processing multimedia data. Many open source media players are based on FFMPEG libraries.
Understanding and Implementing the Sliding DFT
The Sliding DFT delivers exact DFT results with per-sample frequency updates, making real-time spectral processing far more efficient than repeatedly running an FFT. Eric Jacobsen walks through the derivation, presents the simple recursive update, and covers practical concerns such as initialization and fixed-point stability. Engineers building low-latency, low-power systems will appreciate the algorithm's computational and latency advantages.
A poor man's Simulink
Markus Nentwig built a compact glue layer that embeds NGSPICE into Octave to cosimulate continuous-time circuits and digital control. The article walks through an RC lowpass example, the MEX-based Octave interface, and the breakpoint-driven cosimulation flow, showing how adaptive SPICE integration handles asynchronous and time-triggered events. It presents a practical, low-cost alternative to Simulink for tightly coupled analog-digital system design.
A Complex Variable Detective Story – A Disconnect Between Theory and Implementation
A subtle phase-wrap gotcha turned a clean pencil-and-paper derivation into a software mismatch for a 5-tap FIR filter with complex coefficients. Rick Lyons shows why two algebraically equivalent-looking expressions can disagree in code, and traces the real culprit to angle limits in rectangular-form complex arithmetic. The fix is simple once you see it, but the trap is easy to miss.
The Number 9, Not So Magic After All
Rick Lyons dismantles the mystique around the number 9 by showing its 'magic' stems from our base-10 system rather than any unique numeral power. He walks through classic 9 tricks, including digit-sum divisibility, digital-root behavior, and division patterns, then generalizes them to base-B where digit B-1 plays the same role. The post is a short, playful link between recreational arithmetic and radix thinking.
Specifying the Maximum Amplifier Noise When Driving an ADC
You can quantify how much amplifier noise is acceptable before adding gain actually hurts an ADC's output SNR. Rick Lyons presents a compact rule showing the amplifier input-referred noise power must be less than (1 - 1/α^2) times the ADC's q^2/12 quantization noise power, with Eq. (8) and a pair of figures that make it easy to pick or specify the right amplifier for a given gain α.
A Remarkable Bit of DFT Trivia
Rick Lyons highlights a surprising equality: the DFT's worst-case scalloping loss equals 2/π, the same probability that a toothpick crosses a floorboard seam in Buffon's needle problem when the toothpick equals board width. The post sketches the DFT bin-intersection derivation and connects the math to the classic probability puzzle, offering a playful insight that sharpens intuition about bin responses.
Least-squares magic bullets? The Moore-Penrose Pseudoinverse
Markus Nentwig walks through a practical way to remove power-line hum from measurements using the Moore-Penrose pseudoinverse. He builds a harmonic basis, computes pinv(basis) to get least-squares coefficients, and reconstructs and subtracts the hum, with a ready-to-run Matlab example. The post highlights limits and performance: basis-like signal components will be removed, and accuracy improves with the square root of sample count.
Improved Narrowband Lowpass IIR Filters
Rick Lyons presents a practical trick from his DSP book that makes narrowband lowpass IIR filters usable in fixed-point systems. By replacing unit delays with M-length delay lines to form an interpolated-IIR, pole radii and angles are transformed so desired poles fall into quantizer-friendly locations without wider coefficient words or extra multiplies. A following CIC image-reject stage removes replicated passbands to meet tight stopband specs.
Impulse Response Approximation
A stepped-triangular impulse approximation represents an FIR low-pass using a cascade of recursive running-sum filters, offering big savings in computation. Christopher Felton outlines the quantization step that maps a true impulse into three stepped-triangular types and shows how the approximation is built from recursive running-sum and sparse-sum blocks. Inspect the frequency tradeoffs and decide if the efficiency gain is worth the approximation error.
Take Control of Noise with Spectral Averaging
Spectral averaging turns noisy FFT outputs into repeatable, measurable spectra by trading time for noise control. This post explains the practical difference between RMS averaging, which reduces variance without changing the noise floor, and vector averaging, which can lower the noise floor but requires phase-coherent, triggered inputs. It also shows how linear and exponential weighting affect reaction time for live displays and measurement accuracy.
Exact Near Instantaneous Frequency Formulas Best at Peaks (Part 1)
Cedron Dawg presents a new family of exact time-domain formulas to estimate the instantaneous frequency of a single pure tone. The methods generalize a known one-sample formula into k-degree neighbor-pair sums with spacing d, giving exact results in the noiseless case and tunable robustness in noise. The paper explains why real-tone estimates must be taken at peaks and shows the formulas also work for complex tones.
Computing Translated Frequencies in Digitizing and Downsampling Analog Bandpass Signals
Textbooks rarely give ready formulas for tracking where individual spectral lines land after bandpass sampling or decimation. Rick Lyons provides three concise equations, with Matlab code, that compute translated frequencies for analog bandpass sampling, real digital downsampling, and complex downsampling. Practical examples show how to place the sampled image at fs/4 and how to translate a complex bandpass to baseband for efficient demodulation.
A Differentiator With a Difference
Rick Lyons presents a compact, practical FIR differentiator that combines central-difference noise attenuation with a much wider linear range. The proposed ydif(n) doubles the usable frequency range to about 0.34π (0.17fs), uses ±1/16 coefficients so multiplications become simple 4-bit right shifts, and has an exact three-sample group delay for easy synchronization with other signals.
Instant CIC
Modeling CIC decimators in floating point is simpler than you might think, Markus Nentwig shows, if you treat the filter as a finite FIR by sampling its impulse response. The post compares a naive float time-domain implementation, an FFT-based frequency-domain approach, and the recommended method of computing the impulse response and using an off-the-shelf FIR filter, with code and plots.
Multiplierless Exponential Averaging
Rick Lyons shows how to implement exponential averaging without multiplies by exploiting a rearranged leaky-integrator form and binary shifts. He demonstrates reducing the standard two-multiply averager to a single-multiply form, then eliminating the multiply entirely when the weighting α equals reciprocals or differences of reciprocals of powers of two. The post catalogs practical α choices for fixed-point filters and flags quantization as an open issue.
Resolving 'Can't initialize target CPU' on TI C6000 DSPs - Part 2
Mike Dunn walks through practical, low-level debugging to fix "Can't initialize target CPU" on TI C6000 DSPs using CCS 3.3, focusing on XDS510-class emulators. He demonstrates how to run xdsprobe to perform JTAG resets, read and interpret adapter and port error messages, and run JTAG IR/DR integrity tests. The article shows example outputs and a simple scope-based trace to locate signal faults.
Take Control of Noise with Spectral Averaging
Spectral averaging turns noisy FFT outputs into repeatable, measurable spectra by trading time for noise control. This post explains the practical difference between RMS averaging, which reduces variance without changing the noise floor, and vector averaging, which can lower the noise floor but requires phase-coherent, triggered inputs. It also shows how linear and exponential weighting affect reaction time for live displays and measurement accuracy.
Computing the Group Delay of a Filter
Rick Lyons presents a neat, practical way to get a filter's group delay directly from its impulse response using only DFTs. The method computes an N-point DFT of h(n) and of n·h(n), divides them in the frequency domain, and takes the real part to obtain group delay in samples, avoiding phase unwrapping. The post includes MATLAB code, a zero-division warning, and a caution that the method is reliable for FIR filters but not always for IIRs.
Accurate Measurement of a Sinusoid's Peak Amplitude Based on FFT Data
Measuring a sinewave's peak from FFT data can be severely biased by scalloping loss, producing errors up to 36.3 percent. Rick Lyons demonstrates how to apply a flat-top window via frequency-domain convolution to the FFT bins, cutting maximum amplitude error to about 0.02 dB compared with 3.9 dB for rectangular windows. The post includes Matlab code and practical caveats for reliable use.
Spectral Flipping Around Signal Center Frequency
Most DSP engineers know that multiplying a real signal by (-1)^n inverts its spectrum about fs/4, but that trick fails when you need to flip around a specific carrier. Rick Lyons presents two practical techniques: a multirate upsample-by-two solution using paired lowpass filters and cosine mixing, and a computationally heavier complex-multiply plus real-part method attributed to Dirk Bell, both yielding the desired fcntr-centered flip.
How Discrete Signal Interpolation Improves D/A Conversion
Digital interpolation can drastically simplify the analog filtering that follows a DAC, lowering cost and improving output quality. Rick Lyons explains how inserting zeros and applying a digital lowpass filter (interpolation-by-two) raises the effective sample rate, reduces the DAC sin(x)/x droop, and widens the analog filter transition band. The post gives practical intuition and spectral illustrations engineers can reuse in real designs.
A poor man's Simulink
Markus Nentwig built a compact glue layer that embeds NGSPICE into Octave to cosimulate continuous-time circuits and digital control. The article walks through an RC lowpass example, the MEX-based Octave interface, and the breakpoint-driven cosimulation flow, showing how adaptive SPICE integration handles asynchronous and time-triggered events. It presents a practical, low-cost alternative to Simulink for tightly coupled analog-digital system design.
Goertzel Algorithm for a Non-integer Frequency Index
Rick Lyons demonstrates how to run the Goertzel algorithm with a non-integer frequency index k, letting you target DTFT frequencies that do not align with DFT bin centers. He interprets Rajmic and Sysel's generalization, provides a simple implementation, and presents a real-valued reformulation that reduces the final multiplies for real inputs. Example Matlab code is included to reproduce and adapt the technique.
Setting the 3-dB Cutoff Frequency of an Exponential Averager
Many engineers use a simple exponential averager but need the correct α to achieve a specified 3-dB cutoff. Rick Lyons compares a common approximation with the exact closed-form solution, shows when the approximation is valid, and derives the exact α in the appendix. The approximation works well for fc < 0.1fs, but it becomes noticeably inaccurate as the normalized cutoff increases.
TCP/IP interface (Matlab/Octave)
Markus Nentwig supplies a compact set of mex C functions that let you control Ethernet-enabled measurement instruments directly from Matlab or Octave on Windows. The code opens raw TCP/IP sockets, sends SCPI commands, and handles ASCII and binary replies including binary-length headers. It intentionally avoids instrument-control toolboxes and timeouts for simplicity, and includes instrIf_socket, instrIf_write, instrIf_read and instrIf_close with simple usage examples.
Using Mason's Rule to Analyze DSP Networks
When algebra gets messy, Rick Lyons shows how Mason's Rule cuts through the tedium to produce z-domain transfer functions for even nested-feedback DSP networks. The post gives a clear step-by-step procedure, definitions, and worked examples including a biquad, a DC-bias remover, and a complex multi-loop network. It also points to a public MATLAB routine to automate the bookkeeping.
















