DSPRelated.com

Computing an FFT of Complex-Valued Data Using a Real-Only FFT Algorithm

Rick LyonsRick Lyons February 9, 20103 comments

Rick Lyons shows a compact trick to get an N-point complex FFT using only real-input FFT routines by transforming the real and imaginary parts separately and recombining their outputs. The post presents a one-line recombination formula, Xc(m) = real[Xr(m)] - imag[Xi(m)] + j{imag[Xr(m)] + real[Xi(m)]}, and an algebraic derivation based on the two-real-in-one-complex FFT identity. Useful for systems that only provide real-only FFTs.


Unit Testing for Embedded Algorithms

Anthony RickeAnthony Ricke December 21, 2009

Unit testing is a best practice for embedded algorithm development, and Anthony Ricke shows how to apply it to DSP code so host and target behave identically. He demonstrates writing unit tests, stubbing Blackfin fixed-point functions in the workstation, and using test-driven development to safely port and optimize an average-calculation example. The SourceForge examples make the approach practical to adopt.


Using Mason's Rule to Analyze DSP Networks

Rick LyonsRick Lyons August 31, 20096 comments

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.


The Nature of Circles

Peter KootsookosPeter Kootsookos February 21, 20093 comments

Averaging angles the usual way can produce nonsense: the mean of 0 and 359 degrees is not 179.5 when working with circular data. Peter Kootsookos shows the correct approach using vectorial or phasor averaging, converting angles to unit complex numbers and taking the argument of their sum. The short post points to directional statistics and a related IEEE paper for deeper details.


Simultaneously Computing a Forward FFT and an Inverse FFT Using a Single FFT

Rick LyonsRick Lyons January 13, 20095 comments

Rick Lyons presents a compact seven-step algorithm to compute a forward FFT and an inverse FFT at the same time using a single radix-2 complex FFT. The method builds intermediate sequences v(n) and z(n), exploits conjugate symmetry, and requires only one N-point FFT plus about 2N additions or subtractions. A clear MATLAB implementation accompanies the explanation so you can try it immediately.


Multiplierless Exponential Averaging

Rick LyonsRick Lyons December 5, 200811 comments

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.


Computing the Group Delay of a Filter

Rick LyonsRick Lyons November 19, 200817 comments

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.


Computing Large DFTs Using Small FFTs

Rick LyonsRick Lyons June 23, 200821 comments

Rick Lyons demonstrates a practical trick for computing large N-point DFTs by combining multiple smaller radix-2 FFTs when only limited FFT sizes are available. He walks through 16-point and 24-point examples using two and three 8-point FFTs, shows how to assemble outputs with twiddle factors, and explains a symmetry that reduces twiddle storage to N/4 values. The method supports non-power-of-two DFT lengths.


Linear-phase DC Removal Filter

Rick LyonsRick Lyons March 30, 200826 comments

Rick Lyons presents a practical, multiplier-free way to remove DC while preserving linear phase by cascading D-point moving-average filters. He shows how choosing D as a power of two gives bit-shift scaling, how a dual-MA yields a narrow transition band with modest ripple, and how a quad-MA drives ripple down to near inaudible levels while noting the fixed-point accumulator sizing required.


Correlation without pre-whitening is often misleading

Peter KootsookosPeter Kootsookos February 18, 20089 comments

Correlation sounds like the obvious way to find a known pattern, but Peter Kootsookos shows why it can go badly wrong on real, nonwhite data. Using an image example with overlapping blobs, he demonstrates that pre-whitening, here done with a simple row difference, can turn a messy correlation result into a sharply localized peak.


Instant CIC

Markus NentwigMarkus Nentwig May 8, 20124 comments

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.


"Neat" Rectangular to Polar Conversion Algorithm

Rick LyonsRick Lyons November 15, 20105 comments

Rick Lyons revisits a clever slide-rule era trick for estimating the magnitude of a complex number without computing a square root. He highlights a neat identity, prompted by a Jerry Avins post, that converts the sqrt problem into forward and inverse trigonometric operations plus ratios. The post invites readers to derive Eq. (2) and see why a seemingly complex idea is actually simple and practical.


Least-squares magic bullets? The Moore-Penrose Pseudoinverse

Markus NentwigMarkus Nentwig October 24, 20109 comments

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.


There's No End to It -- Matlab Code Plots Frequency Response above the Unit Circle

Neil RobertsonNeil Robertson October 23, 20179 comments

If you want a fresh way to inspect a digital filter, this post introduces plotfil3d, a compact MATLAB function that wraps the magnitude response around the unit circle in the Z-plane so you can view it in 3D. It uses freqz to compute H(z) in dB for N points and accepts an optional azimuth to change the viewing angle; the code is provided in the appendix.


Fibonacci trick

Tim WescottTim Wescott October 10, 20164 comments

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.


Correlation without pre-whitening is often misleading

Peter KootsookosPeter Kootsookos February 18, 20089 comments

Correlation sounds like the obvious way to find a known pattern, but Peter Kootsookos shows why it can go badly wrong on real, nonwhite data. Using an image example with overlapping blobs, he demonstrates that pre-whitening, here done with a simple row difference, can turn a messy correlation result into a sharply localized peak.


Simultaneously Computing a Forward FFT and an Inverse FFT Using a Single FFT

Rick LyonsRick Lyons January 13, 20095 comments

Rick Lyons presents a compact seven-step algorithm to compute a forward FFT and an inverse FFT at the same time using a single radix-2 complex FFT. The method builds intermediate sequences v(n) and z(n), exploits conjugate symmetry, and requires only one N-point FFT plus about 2N additions or subtractions. A clear MATLAB implementation accompanies the explanation so you can try it immediately.


A Complex Variable Detective Story – A Disconnect Between Theory and Implementation

Rick LyonsRick Lyons October 14, 2014

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.


Implementing a full-duplex UART using the TMS320VC33 serial port

Manuel HerreraManuel Herrera March 16, 20112 comments

You can convert the TMS320VC33's synchronous serial port into a full-duplex UART in software by using DR0/DX0, on-chip timers, and an external interrupt. Manuel Herrera walks through an interrupt-driven 9600 baud, 8N1 asynchronous receiver/transmitter, explains receiver gating by start bit detection, and includes a schematic plus a complete assembly listing with timer values tied to a 150 MHz clock. Adjust timing for different clock rates.


Exact Near Instantaneous Frequency Formulas Best at Peaks (Part 1)

Cedron DawgCedron Dawg May 12, 2017

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.