<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Neil Robertson Blog on DSPRelated.com</title>
<link>https://www.dsprelated.com/blogs-1/nf/Neil_Robertson.php</link>
<description><![CDATA[RSS Feed for Neil Robertson Blog on DSPRelated.com]]></description>
<image><title>Neil Robertson Blog on DSPRelated.com</title>
<link>https://www.dsprelated.com/blogs-1/nf/Neil_Robertson.php</link>
<url>https://d23s79tivgl8me.cloudfront.net/user/profilepictures/113580.jpg</url>
</image>
<atom:link href="https://www.dsprelated.com/blogs_rss.php?bloggerid=113580" rel="self" type="application/rss+xml"></atom:link>
<language>en-US</language>
<lastBuildDate>Sat, 18 Apr 2026 12:58:38 +0000</lastBuildDate>
<pubDate>1776517118</pubDate>
<item>
<title>A Lesson in Statistics Using Random Sequences</title>
<link>https://www.dsprelated.com/showarticle/1778.php</link>
<description><![CDATA[<p>Statistics may come naturally to some people, but it is a difficult subject for many of us.&nbsp; Using simulations helps to remove some of the mystery of statistics.&nbsp; Luckily, it is trivial to produce a pseudo-random Gaussian or uniform sequence:&nbsp; a single command in Matlab (or Python) does it.
</p>
<p>In this article, I try to explain a few concepts using Gaussian and uniform random...]]></description>
<pubDate>Sat, 14 Mar 2026 17:02:00 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Simple but Effective Spectrum Averaging</title>
<link>https://www.dsprelated.com/showarticle/1773.php</link>
<description><![CDATA[<p>Digitally modulated signals and Gaussian noise are random signals, and randomness is apparent in their spectra.&nbsp; For example, Figure 1 (left) shows the power spectral density (PSD) of a QAM-16 signal with added Gaussian noise.&nbsp; While this PSD is perfectly correct, it has a large variation around the average values of the signal and the noise, making it difficult to estimate...]]></description>
<pubDate>Fri, 02 Jan 2026 20:00:15 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>The First-Order IIR Filter -- More than Meets the Eye</title>
<link>https://www.dsprelated.com/showarticle/1769.php</link>
<description><![CDATA[<p>While we might be inclined to disdain the simple first-order infinite impulse response (IIR) filter, it is not so simple that we can’t learn something from it.&nbsp; Studying it can teach DSP math skills, and it is a very useful filter in its own right.&nbsp; In this article, we’ll examine the time response of the filter, compare the first-order IIR filter to the FIR moving average filter,...]]></description>
<pubDate>Sun, 16 Nov 2025 16:20:08 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>A Matlab Function for FIR Half-Band Filter Design</title>
<link>https://www.dsprelated.com/showarticle/1748.php</link>
<description><![CDATA[<p>&nbsp;Half-band filters have -6 dB frequency of 1/4 the sample rate, and odd symmetry of the frequency response about 1/4 the sample rate.&nbsp; Given the odd-symmetry of the response, the passband and stopband edge frequencies are symmetric with respect to fs/4.&nbsp; This symmetry makes the halfband filter ideal for decimation by 2 or interpolation by 2.&nbsp; And, remarkably, the...]]></description>
<pubDate>Sun, 06 Jul 2025 18:35:32 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>The Discrete Fourier Transform of Symmetric Sequences</title>
<link>https://www.dsprelated.com/showarticle/1718.php</link>
<description><![CDATA[<p>Symmetric sequences arise often in digital signal processing.&nbsp; Examples include symmetric pulses, window functions, and the coefficients of most finite-impulse response (FIR) filters, not to mention the cosine function.&nbsp; Examining symmetric sequences can give us some insights into the Discrete Fourier Transform (DFT).&nbsp; An even-symmetric sequence is centered at n = 0 and xeven(n)...]]></description>
<pubDate>Sun, 08 Dec 2024 12:57:57 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Learn to Use the Discrete Fourier Transform</title>
<link>https://www.dsprelated.com/showarticle/1696.php</link>
<description><![CDATA[<p>Discrete-time sequences arise in many ways:&nbsp; a sequence could be a signal captured by an analog-to-digital converter; a series of measurements; a signal generated by a digital modulator; or simply the coefficients of a digital filter.&nbsp; We may wish to know the frequency spectrum of any of these sequences.&nbsp;&nbsp;The most-used tool to accomplish this is the Discrete Fourier...]]></description>
<pubDate>Sat, 28 Sep 2024 17:36:07 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Model a Sigma-Delta DAC Plus RC Filter</title>
<link>https://www.dsprelated.com/showarticle/1642.php</link>
<description><![CDATA[<p>Sigma-delta digital-to-analog converters (SD DAC’s) are often used for discrete-time signals with sample rate much higher than their bandwidth.&nbsp; For the simplest case, the DAC output is a single bit, so the only interface hardware required is a standard digital output buffer.&nbsp; Because of the high sample rate relative to signal bandwidth, a very simple DAC reconstruction filter...]]></description>
<pubDate>Sat, 16 Mar 2024 18:25:43 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>DAC Zero-Order Hold Models</title>
<link>https://www.dsprelated.com/showarticle/1627.php</link>
<description><![CDATA[<p>As the name indicates, a digital to analog converter (DAC) converts a digital quantity to an analog voltage or current.&nbsp; But more than this, a DAC converts a discrete-time signal into a continuous-time signal.&nbsp; The latter operation is almost always accomplished by a zero-order hold (ZOH) function.  As we’ll see, it is the ZOH that causes the sinx/x roll-off in the frequency...]]></description>
<pubDate>Sun, 21 Jan 2024 18:29:17 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Decimators Using Cascaded Multiplierless Half-band Filters</title>
<link>https://www.dsprelated.com/showarticle/1609.php</link>
<description><![CDATA[<p>In my last <a href="https://www.dsprelated.com/showarticle/1585.php" target="_blank">post</a>, I provided coefficients for several multiplierless half-band FIR filters [1].&nbsp; In the comment section, Rick Lyons mentioned that such filters would be useful in a multi-stage decimator, as shown in Figure 1 for the decimate-by-8 case.&nbsp; For such an arrangement, any subsequent multipliers save on resources, since they operate at 1/8th of the maximum sample frequency or...]]></description>
<pubDate>Sun, 19 Nov 2023 18:42:45 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Multiplierless Half-band Filters and Hilbert Transformers</title>
<link>https://www.dsprelated.com/showarticle/1585.php</link>
<description><![CDATA[<p>This article provides coefficients of multiplierless Finite Impulse Response 7-tap, 11-tap, and 15-tap half-band filters and Hilbert Transformers.&nbsp; Since Hilbert transformer coefficients are simply related to half-band coefficients, multiplierless Hilbert transformers are easily derived from multiplierless half-bands.&nbsp; Image attenuation of the Hilbert transformers presented here is...]]></description>
<pubDate>Sat, 07 Oct 2023 14:14:47 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Interpolator Design:  Get the Stopbands Right</title>
<link>https://www.dsprelated.com/showarticle/1542.php</link>
<description><![CDATA[<p>Designing an interpolator needn’t be confusing.&nbsp; In this article, I’ll present a simple approach for designing interpolators that takes the guesswork out of determining the stopbands (For a basic introduction to interpolators, see my earlier <a href="https://www.dsprelated.com/showarticle/1293.php" target="_blank">post</a> [1]).
</p>
<p>Figure 1a shows a block diagram of an interpolator, which consists of an up-sampler that increases the sample rate of the input...]]></description>
<pubDate>Thu, 06 Jul 2023 14:48:59 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Simple Discrete-Time Modeling of Lossy LC Filters </title>
<link>https://www.dsprelated.com/showarticle/1507.php</link>
<description><![CDATA[<p>There are many software applications that allow modeling LC filters in the frequency domain.&nbsp; But sometimes it is useful to have a time domain model, such as when you need to analyze a mixed analog and DSP system.&nbsp; For example, the system in Figure 1 includes an LC filter as well as a DSP portion.&nbsp; The LC filter could be an anti-alias filter, a channel filter, or some other LC...]]></description>
<pubDate>Wed, 19 Apr 2023 12:22:11 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>The Discrete Fourier Transform as a Frequency Response</title>
<link>https://www.dsprelated.com/showarticle/1498.php</link>
<description><![CDATA[<p>The discrete frequency response H(k) of a Finite Impulse Response (FIR) filter is the Discrete Fourier Transform (DFT) of its impulse response h(n) [1].&nbsp; So, if we can find H(k) by whatever method, it should be identical to the DFT of h(n).&nbsp;&nbsp;In this article, we’ll find H(k) by using complex exponentials, and we’ll see that it is indeed identical to the DFT of h(n)....]]></description>
<pubDate>Sat, 04 Feb 2023 19:01:05 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Add the Hilbert Transformer to Your DSP Toolkit, Part 2</title>
<link>https://www.dsprelated.com/showarticle/1487.php</link>
<description><![CDATA[<p>In this part, I’ll show how to design a Hilbert Transformer using the coefficients of a half-band filter as a starting point, which turns out to be remarkably simple.&nbsp; I’ll also show how a half-band filter can be synthesized using the Matlab function firpm, which employs the Parks-McClellan algorithm.
</p>
<p>A half-band filter is a type of lowpass, even-symmetric FIR filter having an odd...]]></description>
<pubDate>Sun, 04 Dec 2022 19:19:19 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Add the Hilbert Transformer to Your DSP Toolkit, Part 1</title>
<link>https://www.dsprelated.com/showarticle/1486.php</link>
<description><![CDATA[<p>In some previous articles, I made use of the Hilbert transformer, but did not explain its theory in any detail.&nbsp; In this article, I’ll dig a little deeper into how the Hilbert Transformer works.&nbsp; Understanding the Hilbert Transformer involves a modest amount of mathematics, but the payoff in useful&nbsp;applications is worth it.
</p>
<p>As we’ll learn, a Hilbert Transformer is just a...]]></description>
<pubDate>Tue, 22 Nov 2022 14:41:43 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Book Recommendation &quot;What is Mathematics?&quot;</title>
<link>https://www.dsprelated.com/showarticle/1454.php</link>
<description><![CDATA[<p>What is Mathematics is a classic, lucidly written survey of mathematics by Courant and Robbins.&nbsp; The first edition was published in 1941!&nbsp; I have only read a portion of it, mainly the chapter on calculus.&nbsp; One page of Courant is worth about five pages of my old college calculus textbook, and it’s a lot more fun to read.</p>  <p>The reader of this book should already be familiar with...]]></description>
<pubDate>Mon, 20 Jun 2022 14:40:09 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Evaluate Noise Performance of Discrete-Time Differentiators</title>
<link>https://www.dsprelated.com/showarticle/1447.php</link>
<description><![CDATA[<p>When it comes to noise, all differentiators are not created equal.&nbsp; Figure 1 shows the magnitude response of two differentiators.&nbsp; They both have a useful bandwidth of a little less than π/8 radians (based on maximum magnitude response error of 2%).&nbsp; Suppose we apply a signal with Gaussian noise to each of these differentiators.&nbsp; The sinusoidal signal with noise is shown...]]></description>
<pubDate>Mon, 28 Mar 2022 19:01:01 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Learn About Transmission Lines Using a Discrete-Time Model</title>
<link>https://www.dsprelated.com/showarticle/1441.php</link>
<description><![CDATA[<p>We don’t often think about signal transmission lines, but we use them every day.&nbsp; Familiar examples are coaxial cable, Ethernet cable, and Universal Serial Bus (USB).&nbsp; Like it or not, high-speed clock and signal traces on printed-circuit boards are also transmission lines.
</p>
<p>While modeling transmission lines is in general a complex undertaking, it is surprisingly simple to model a...]]></description>
<pubDate>Wed, 12 Jan 2022 19:58:39 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>The Discrete Fourier Transform and the Need for Window Functions</title>
<link>https://www.dsprelated.com/showarticle/1433.php</link>
<description><![CDATA[
<p>The Discrete Fourier Transform (DFT) is used to find the frequency spectrum of a discrete-time signal.&nbsp; A computationally efficient version called the Fast Fourier Transform (FFT) is normally used to calculate the DFT.&nbsp; But, as many have found to their dismay, the FFT, when used alone, usually does not provide an accurate spectrum.&nbsp; The reason is a phenomenon called spectral...]]></description>
<pubDate>Mon, 15 Nov 2021 13:18:30 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Modeling Anti-Alias Filters</title>
<link>https://www.dsprelated.com/showarticle/1418.php</link>
<description><![CDATA[<p>Digitizing a signal using an Analog to Digital Converter (ADC) usually requires an anti-alias filter, as shown in Figure 1a.&nbsp; In this post, we’ll develop models of lowpass Butterworth and Chebyshev anti-alias filters, and compute the time domain and frequency domain output of the ADC for an example input signal.&nbsp; We’ll also model aliasing of Gaussian noise.&nbsp; I hope the...]]></description>
<pubDate>Sun, 26 Sep 2021 12:11:57 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Digital Filter Instructions from IKEA?</title>
<link>https://www.dsprelated.com/showarticle/1404.php</link>
<description><![CDATA[<p>
</p>

<p>
</p>
<p>
</p>

<p>
</p>
<p>
</p>

<p>
</p>
<p>
</p>
<p>
</p>

<p>
</p>
<p>
</p>
<p>
</p>

<p>
</p>
<p>
</p>


<p></p><p></p><p></p>

Reference
<p>Lyons, Richard G., Understanding Digital Signal Processing, Third Ed., Prentice Hall, 2011, section 13.7.
</p>
<p>
</p>
<p>
</p>
<p>
</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Neil Robertson&nbsp; &nbsp; &nbsp; June,...]]></description>
<pubDate>Fri, 18 Jun 2021 17:58:51 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Setting Carrier to Noise Ratio in Simulations</title>
<link>https://www.dsprelated.com/showarticle/1398.php</link>
<description><![CDATA[<p>When simulating digital receivers, we often want to check performance with added Gaussian noise.&nbsp; In this article, I’ll derive the simple equations for the rms noise level needed to produce a desired carrier to noise ratio (CNR or C/N).&nbsp; I also provide a short Matlab function to generate a noise vector of the desired level for a given signal vector.
</p>
Definition of C/N
<p>The...]]></description>
<pubDate>Sun, 11 Apr 2021 15:12:57 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Add a Power Marker to a Power Spectral Density (PSD) Plot</title>
<link>https://www.dsprelated.com/showarticle/1387.php</link>
<description><![CDATA[<p>Perhaps we should call most Power Spectral Density (PSD) calculations relative PSD, because usually we don’t have to worry about absolute power levels.&nbsp; However, for cases (e.g., measurements or simulations) where we are concerned with absolute power, it would be nice to be able to display it on a PSD plot.&nbsp; Unfortunately, you can’t read the power directly from the plot.&nbsp;...]]></description>
<pubDate>Sun, 07 Feb 2021 15:25:26 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Find Aliased ADC or DAC Harmonics (with animation)</title>
<link>https://www.dsprelated.com/showarticle/1380.php</link>
<description><![CDATA[<p>When a sinewave is applied to a data converter (ADC or DAC), device nonlinearities produce harmonics.&nbsp; If a harmonic frequency is greater than the Nyquist frequency, the harmonic appears as an alias.&nbsp; In this case, it is not at once obvious if a given spur is a harmonic, and if so, its order.&nbsp; In this article, we’ll present Matlab code to simulate the data converter...]]></description>
<pubDate>Mon, 11 Jan 2021 18:12:36 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Compute Images/Aliases of CIC Interpolators/Decimators</title>
<link>https://www.dsprelated.com/showarticle/1375.php</link>
<description><![CDATA[<p>Cascade-Integrator-Comb (CIC) filters are efficient fixed-point interpolators&nbsp;or decimators.&nbsp; For these filters, all coefficients are equal to 1, and there are no multipliers.&nbsp; They are typically used when a large change in sample rate is needed.&nbsp; This article provides two very simple Matlab functions that can be used to compute the spectral images of CIC interpolators and...]]></description>
<pubDate>Sun, 01 Nov 2020 17:50:34 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Design Square-Root Nyquist Filters</title>
<link>https://www.dsprelated.com/showarticle/1361.php</link>
<description><![CDATA[<p>In his book on multirate signal processing, harris presents a nifty technique for designing square-root Nyquist FIR filters with good stopband attenuation [1].&nbsp; In this post, I describe the method and provide a Matlab function for designing the filters.&nbsp; You can find a Matlab function by harris for designing the filters at [2].
</p>
Background
<p>Single-carrier modulation, such as QAM,...]]></description>
<pubDate>Mon, 13 Jul 2020 18:20:47 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Third-Order Distortion of a Digitally-Modulated Signal</title>
<link>https://www.dsprelated.com/showarticle/1355.php</link>
<description><![CDATA[Analog designers are always harping about amplifier third-order distortion.&nbsp; Why?&nbsp; In this article, we’ll look at why third-order distortion is important, and simulate a QAM signal with third-order distortion.
<p style="text-align: center;">
</p>
<p>In the following analysis, we assume that signal phase at the amplifier output is not a function of amplitude.&nbsp; With this assumption, the output y of a non-ideal...]]></description>
<pubDate>Tue, 09 Jun 2020 16:27:59 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Second Order Discrete-Time System Demonstration</title>
<link>https://www.dsprelated.com/showarticle/1341.php</link>
<description><![CDATA[<p>Discrete-time systems are remarkable:&nbsp; the time response can be computed from mere difference equations, and the coefficients ai, bi of these equations are also the coefficients of H(z).&nbsp; Here, I try to illustrate this remarkableness by converting a continuous-time second-order system to an approximately equivalent discrete-time system.&nbsp; With a discrete-time model, we can then...]]></description>
<pubDate>Wed, 01 Apr 2020 18:20:59 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>A Simplified Matlab Function for Power Spectral Density</title>
<link>https://www.dsprelated.com/showarticle/1333.php</link>
<description><![CDATA[<p>In an earlier <a href="https://www.dsprelated.com/showarticle/1221.php">post</a> [1], I showed how to compute power spectral density (PSD) of a discrete-time signal using the Matlab function <a href="https://www.mathworks.com/help/signal/ref/pwelch.html" rel="nofollow">pwelch</a> [2].&nbsp; Pwelch is a useful function because it gives the correct output, and it has the option to average multiple Discrete Fourier Transforms (DFTs).&nbsp; However, a typical function call has five arguments, and it can be hard to remember how to set them...]]></description>
<pubDate>Tue, 03 Mar 2020 18:06:17 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Fractional Delay FIR Filters</title>
<link>https://www.dsprelated.com/showarticle/1327.php</link>
<description><![CDATA[<p>Consider the following Finite Impulse Response (FIR) coefficients:
</p>
<p style="margin-left: 40px;">b = [b0 b1 b2 b1 b0]
</p>
<p>These coefficients form a 5-tap symmetrical FIR filter having constant group delay [1,2] over 0 to fs/2 of:
</p>
<p style="margin-left: 40px;">D = (ntaps – 1)/2 = 2&nbsp; &nbsp; &nbsp; samples
</p>
<p>For a symmetrical filter with an odd number of taps, the group delay is always an integer number of samples, while for one with an even...]]></description>
<pubDate>Sun, 09 Feb 2020 20:15:03 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Model Signal Impairments at Complex Baseband</title>
<link>https://www.dsprelated.com/showarticle/1312.php</link>
<description><![CDATA[<p>In this article, we develop complex-baseband models for several signal impairments:  interfering carrier, multipath, phase noise, and Gaussian noise.&nbsp; To provide concrete examples, we’ll apply the impairments to a QAM system.  The impairment models are Matlab functions that each use at most seven lines of code.&nbsp; Although our example system is QAM, the models can be used for any...]]></description>
<pubDate>Wed, 11 Dec 2019 15:45:53 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Compute Modulation Error Ratio (MER) for QAM</title>
<link>https://www.dsprelated.com/showarticle/1305.php</link>
<description><![CDATA[<p>This post defines the Modulation Error Ratio (MER) for QAM signals, and shows how to compute it.&nbsp; As we’ll see, in the absence of impairments other than noise, the MER tracks the signal’s Carrier-to-Noise Ratio (over a limited range).&nbsp; A Matlab script at the end of the PDF version of this post&nbsp;computes MER for a simplified QAM-64 system.
</p>
<p>Figure 1 is a simplified block...]]></description>
<pubDate>Tue, 05 Nov 2019 18:54:37 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Plotting Discrete-Time Signals</title>
<link>https://www.dsprelated.com/showarticle/1298.php</link>
<description><![CDATA[<p>A discrete-time sinusoid can have frequency up to just shy of half the sample frequency.&nbsp; But if you try to plot the sinusoid, the result is not always recognizable.&nbsp; For example, if you plot a 9 Hz sinusoid sampled at 100 Hz, you get the result shown in the top of Figure 1, which looks like a sine.&nbsp; But if you plot a 35 Hz sinusoid sampled at 100 Hz, you get the bottom graph,...]]></description>
<pubDate>Sun, 15 Sep 2019 15:12:03 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Interpolation Basics</title>
<link>https://www.dsprelated.com/showarticle/1293.php</link>
<description><![CDATA[<p>This article covers interpolation basics, and provides a numerical example of&nbsp;interpolation of a time signal.&nbsp; Figure 1 illustrates what we mean by interpolation.&nbsp; The top plot shows a continuous time signal, and the middle plot shows a sampled version with sample time Ts.&nbsp; The goal of interpolation is to increase the sample rate such that the new (interpolated) sample...]]></description>
<pubDate>Tue, 20 Aug 2019 20:14:46 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>A Direct Digital Synthesizer with Arbitrary Modulus</title>
<link>https://www.dsprelated.com/showarticle/1275.php</link>
<description><![CDATA[<p>Suppose you have a system with a 10 MHz sample clock, and you want to generate a sampled sinewave at any frequency below 5 MHz on 500 kHz spacing; i.e., 0.5, 1.0, 1.5, … MHz.&nbsp; In other words, f = k*fs/20, where k is an integer and fs is sample frequency.&nbsp; This article shows how to do this using a simple Direct Digital Synthesizer (DDS) with a look-up table that is at most 20...]]></description>
<pubDate>Mon, 03 Jun 2019 20:05:10 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>IIR Bandpass Filters Using Cascaded Biquads</title>
<link>https://www.dsprelated.com/showarticle/1257.php</link>
<description><![CDATA[<p>In an earlier post [1], we implemented lowpass IIR filters using a cascade of second-order IIR filters, or biquads.&nbsp;&nbsp;</p><p>This post provides a Matlab function to do the same for Butterworth bandpass IIR filters.&nbsp; Compared to conventional implementations, bandpass filters based on biquads are less sensitive to coefficient quantization [2].&nbsp; This becomes important when designing...]]></description>
<pubDate>Sat, 20 Apr 2019 19:18:19 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Demonstrating the Periodic Spectrum of a Sampled Signal Using the DFT</title>
<link>https://www.dsprelated.com/showarticle/1235.php</link>
<description><![CDATA[<p>One of the basic DSP principles states that a sampled time signal has a periodic spectrum with period equal to the sample rate.&nbsp; The derivation of can be found in textbooks [1,2].&nbsp; You can also demonstrate this principle numerically using the Discrete Fourier Transform (DFT).
</p>
<p>The DFT of the sampled signal x(n) is defined as:
</p>
<p>$$X(k)=\sum_{n=0}^{N-1}x(n)e^{-j2\pi kn/N}...]]></description>
<pubDate>Sat, 09 Mar 2019 19:40:12 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Compute the Frequency Response of a Multistage Decimator</title>
<link>https://www.dsprelated.com/showarticle/1228.php</link>
<description><![CDATA[<p>Figure 1a shows the block diagram of a decimation-by-8 filter, consisting of a low-pass finite impulse response (FIR) filter followed by downsampling by 8 [1].&nbsp; A more efficient version is shown in Figure 1b, which uses three cascaded decimate-by-two filters.&nbsp; This implementation has the advantages that only FIR 1 is sampled at the highest sample rate, and the total number of filter...]]></description>
<pubDate>Sun, 10 Feb 2019 20:32:27 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Use Matlab Function pwelch to Find Power Spectral Density -- or Do It Yourself</title>
<link>https://www.dsprelated.com/showarticle/1221.php</link>
<description><![CDATA[<p>In my last post, we saw that finding the spectrum of a signal requires several steps beyond computing the discrete Fourier transform (DFT)<a href="https://www.dsprelated.com/showarticle/1211.php">[1]</a><a href="https://www.dsprelated.com/showarticle/1221.php"></a>.&nbsp; These include windowing the signal, taking the magnitude-squared of the DFT, and computing the vector of frequencies.&nbsp; The Matlab function pwelch [2] performs all these steps, and it also has the option to use DFT averaging to compute the...]]></description>
<pubDate>Sun, 13 Jan 2019 18:18:48 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Evaluate Window Functions for the Discrete Fourier Transform</title>
<link>https://www.dsprelated.com/showarticle/1211.php</link>
<description><![CDATA[<p>The Discrete Fourier Transform (DFT) operates on a finite length time sequence to compute its spectrum.&nbsp; For a continuous signal like a sinewave, you need to capture a segment of the signal in order to perform the DFT.&nbsp; Usually, you also need to apply a window function to the captured signal before taking the DFT [1 - 3].&nbsp; There are many different window functions and each...]]></description>
<pubDate>Tue, 18 Dec 2018 20:43:38 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Design a DAC sinx/x Corrector</title>
<link>https://www.dsprelated.com/showarticle/1191.php</link>
<description><![CDATA[<p>This post provides a Matlab function that designs linear-phase FIR sinx/x correctors.&nbsp; It includes a table of fixed-point sinx/x corrector coefficients for different DAC frequency ranges.
</p>
<p>A sinx/x corrector is a digital (or analog) filter used to compensate for the sinx/x roll-off inherent in the digital to analog conversion process.&nbsp; In DSP math, we treat the digital signal...]]></description>
<pubDate>Sun, 22 Jul 2018 17:22:49 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Digital PLL&#039;s, Part 3 -- Phase Lock an NCO to an External Clock</title>
<link>https://www.dsprelated.com/showarticle/1177.php</link>
<description><![CDATA[<p>Sometimes you may need to phase-lock a numerically controlled oscillator (NCO) to an external clock that is not related to the system clocks of your ASIC or FPGA.&nbsp; This situation is shown in Figure 1.&nbsp; Assuming your system has an analog-to-digital converter (ADC) available, you can sync to the external clock using the scheme shown in Figure 2.&nbsp; This time-domain PLL model is...]]></description>
<pubDate>Sun, 27 May 2018 18:06:07 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>ADC Clock Jitter Model, Part 2 – Random Jitter</title>
<link>https://www.dsprelated.com/showarticle/1160.php</link>
<description><![CDATA[<p>In Part 1, I&nbsp;presented a Matlab function to model an ADC with jitter on the sample clock, and applied it to examples with deterministic jitter.&nbsp; Now we’ll investigate an ADC with random clock jitter, by using a filtered or unfiltered Gaussian sequence as the jitter source.&nbsp; What we are calling jitter can also be called time jitter, phase jitter, or phase noise.&nbsp; It’s...]]></description>
<pubDate>Sun, 22 Apr 2018 17:30:15 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>ADC Clock Jitter Model, Part 1 -- Deterministic Jitter</title>
<link>https://www.dsprelated.com/showarticle/1157.php</link>
<description><![CDATA[<p>Analog to digital converters (ADC’s) have several imperfections that affect communications signals, including thermal noise, differential nonlinearity, and sample clock jitter [1, 2].&nbsp; As shown in Figure 1, the ADC has a sample/hold function that is clocked by a sample clock.&nbsp; Jitter on the sample clock causes the sampling instants to vary from the ideal sample time.&nbsp; This...]]></description>
<pubDate>Mon, 16 Apr 2018 17:29:19 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Phase or Frequency Shifter Using a Hilbert Transformer</title>
<link>https://www.dsprelated.com/showarticle/1147.php</link>
<description><![CDATA[<p>In this article, we’ll describe how to use a Hilbert transformer to make a phase shifter or frequency shifter.&nbsp; In either case, the input is a real signal and the output is a real signal.&nbsp;&nbsp;We’ll use some simple Matlab code to simulate these systems.&nbsp; After that, we’ll go into a little more detail on Hilbert transformer theory and design.&nbsp;
</p>
Phase Shifter
<p>A...]]></description>
<pubDate>Sun, 25 Mar 2018 16:43:41 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Coefficients of Cascaded Discrete-Time Systems</title>
<link>https://www.dsprelated.com/showarticle/1141.php</link>
<description><![CDATA[<p>In this article, we’ll show how to compute the coefficients that result when you cascade discrete-time systems.&nbsp; With the coefficients in hand, it’s then easy to compute the time or frequency response.&nbsp; The computation presented here can also be used to find coefficients of mixed discrete-time and continuous-time systems, by using a discrete time model of the continuous-time...]]></description>
<pubDate>Sun, 04 Mar 2018 16:08:17 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Design IIR Filters Using Cascaded Biquads</title>
<link>https://www.dsprelated.com/showarticle/1137.php</link>
<description><![CDATA[<p>This article shows how to implement a Butterworth IIR lowpass filter as a cascade of second-order IIR filters, or biquads.&nbsp; We’ll derive how to calculate the coefficients of the biquads and do some examples using a Matlab function biquad_synth provided in the Appendix.&nbsp; Although we’ll be designing Butterworth filters, the approach applies to any all-pole lowpass filter...]]></description>
<pubDate>Sun, 11 Feb 2018 21:08:34 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Design IIR Highpass Filters</title>
<link>https://www.dsprelated.com/showarticle/1135.php</link>
<description><![CDATA[<p>This post is the fourth in a series of tutorials on IIR Butterworth filter design.&nbsp; So far we covered lowpass [1], bandpass [2], and band-reject [3] filters; now we’ll design highpass filters.&nbsp; The general approach, as before, has six steps:
</p>

	<li>Find the poles of a lowpass analog prototype filter with Ωc = 1 rad/s.</li>
	<li>Given the -3 dB frequency of the digital highpass filter,...]]></description>
<pubDate>Sat, 03 Feb 2018 16:09:47 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Design IIR Band-Reject Filters</title>
<link>https://www.dsprelated.com/showarticle/1131.php</link>
<description><![CDATA[<p>In this post, I show how to design IIR Butterworth band-reject filters, and provide two Matlab functions for band-reject filter synthesis.&nbsp; Earlier posts covered IIR Butterworth lowpass [1] and bandpass [2] filters.&nbsp; Here, the function br_synth1.m designs band-reject filters based on null frequency and upper -3 dB frequency, while br_synth2.m designs them based on lower and upper -3...]]></description>
<pubDate>Wed, 17 Jan 2018 23:54:49 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Design IIR Bandpass Filters</title>
<link>https://www.dsprelated.com/showarticle/1128.php</link>
<description><![CDATA[<p>In this post, I present a method to design Butterworth IIR bandpass filters.&nbsp; My previous <a href="https://www.dsprelated.com/showarticle/1119.php">post</a> [1] covered lowpass IIR filter design, and provided a Matlab function to design them.&nbsp; Here, we’ll do the same thing for IIR bandpass filters, with a Matlab function bp_synth.m.&nbsp; Here is an example function call for a bandpass filter based on a 3rd order lowpass prototype:
</p>
N=...]]></description>
<pubDate>Sat, 06 Jan 2018 18:35:44 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Design IIR Butterworth Filters Using 12 Lines of Code</title>
<link>https://www.dsprelated.com/showarticle/1119.php</link>
<description><![CDATA[<p>While there are plenty of canned functions to design Butterworth IIR filters [1], it’s instructive and not that complicated to design them from scratch.&nbsp; You can do it in 12 lines of Matlab code.&nbsp; In this article, we’ll create a Matlab function butter_synth.m  to design lowpass Butterworth filters of any order.&nbsp; Here is an example function call for a 5th order filter:
</p>
N=...]]></description>
<pubDate>Sun, 10 Dec 2017 19:20:56 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Simplest Calculation of Half-band Filter Coefficients</title>
<link>https://www.dsprelated.com/showarticle/1113.php</link>
<description><![CDATA[<p>Half-band filters are lowpass FIR filters with cut-off frequency of one-quarter of sampling frequency fs and odd symmetry about fs/4 &nbsp;[1]*. &nbsp;And it so happens that almost half of the coefficients are zero.&nbsp; The passband and stopband bandwiths are equal, making these filters useful for decimation-by-2 and interpolation-by-2.&nbsp; Since the zero coefficients make them...]]></description>
<pubDate>Mon, 20 Nov 2017 18:26:41 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>There&#039;s No End to It -- Matlab Code Plots Frequency Response above the Unit Circle</title>
<link>https://www.dsprelated.com/showarticle/1102.php</link>
<description><![CDATA[Reference [1] has some 3D plots of frequency
response magnitude above the unit circle in the Z-plane.&nbsp; I liked them enough that I wrote a Matlab
function to plot the response of any digital filter this way.&nbsp; I’m not sure how useful these plots are, but
they’re fun to look at.&nbsp;The Matlab code
is listed in the Appendix.&nbsp;
<p></p><p><a href="https://d23s79tivgl8me.cloudfront.net/user/113580/plotting frequency...]]></description>
<pubDate>Mon, 23 Oct 2017 20:34:11 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Modeling a Continuous-Time System with Matlab</title>
<link>https://www.dsprelated.com/showarticle/1055.php</link>
<description><![CDATA[<p>Many of us are familiar with modeling a continuous-time system in the frequency domain using its transfer function H(s) or H(jω).&nbsp; However, finding the time response can be challenging, and traditionally involves finding the inverse Laplace transform of H(s). &nbsp;An alternative way to get both time and frequency responses is to transform H(s) to a discrete-time system H(z) using the...]]></description>
<pubDate>Tue, 06 Jun 2017 19:55:45 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Canonic Signed Digit (CSD) Representation of Integers</title>
<link>https://www.dsprelated.com/showarticle/1030.php</link>
<description><![CDATA[<p>In my last&nbsp;<a href="https://www.dsprelated.com/showarticle/1011.php">post</a> I presented Matlab code to synthesize multiplierless FIR filters using Canonic Signed Digit (CSD) coefficients.&nbsp; I included a function dec2csd1.m (repeated here in Appendix A) to convert decimal integers to binary CSD values.&nbsp; Here I want to use that function to illustrate a few properties of CSD numbers.</p>
<p>In a binary signed-digit number system, we allow...]]></description>
<pubDate>Sat, 18 Feb 2017 16:23:36 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Matlab Code to Synthesize Multiplierless FIR Filters</title>
<link>https://www.dsprelated.com/showarticle/1011.php</link>
<description><![CDATA[<p>This article presents Matlab code to synthesize multiplierless Finite Impulse Response (FIR) lowpass filters.
</p>
<p>A filter coefficient can be represented as a sum of powers of 2.&nbsp; For example, if a coefficient = decimal 5 multiplies input x, the output is $y= 2^2*x + 2^0*x$.&nbsp; The factor of $2^2$&nbsp;is then implemented with a shift of 2 bits.&nbsp; This method is not efficient for...]]></description>
<pubDate>Mon, 31 Oct 2016 16:54:27 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>The Power Spectrum</title>
<link>https://www.dsprelated.com/showarticle/1004.php</link>
<description><![CDATA[<p>Often, when calculating the spectrum of a sampled signal, we are interested in relative powers, and we don’t care about the absolute accuracy of the y axis.&nbsp; However, when the sampled signal represents an analog signal, we sometimes need an accurate picture of the analog signal’s power in the frequency domain. &nbsp;This post shows how to calculate an accurate power...]]></description>
<pubDate>Sat, 08 Oct 2016 21:47:09 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Digital PLL&#039;s -- Part 2</title>
<link>https://www.dsprelated.com/showarticle/973.php</link>
<description><![CDATA[<p>In<a href="https://www.dsprelated.com/showarticle/967.php" target="_blank">&nbsp;Part 1</a>, we found the time response of a 2nd order PLL with a proportional + integral (lead-lag) loop filter.&nbsp; Now let’s look at this PLL in the Z-domain [1, 2].&nbsp; We will find that the response is characterized by a loop natural frequency ωn and damping coefficient ζ.&nbsp;
</p>
<p>Having a Z-domain model of the DPLL will allow us to do three things:
</p>

	<li>Compute the...]]></description>
<pubDate>Wed, 15 Jun 2016 11:18:41 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Digital PLL&#039;s -- Part 1</title>
<link>https://www.dsprelated.com/showarticle/967.php</link>
<description><![CDATA[1. Introduction
<p>Figure 1.1 is a block diagram of a digital PLL (DPLL).&nbsp; The purpose of the DPLL is to lock the phase  of a numerically controlled oscillator (NCO) to a reference signal.&nbsp; The loop includes a phase detector to compute  phase error and a loop filter to set loop dynamic performance.&nbsp; The output of the loop filter controls the  frequency and phase of the NCO,...]]></description>
<pubDate>Tue, 07 Jun 2016 14:34:38 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Peak to Average Power Ratio and CCDF</title>
<link>https://www.dsprelated.com/showarticle/962.php</link>
<description><![CDATA[<p>Peak to Average Power Ratio (PAPR) is often used to characterize digitally modulated signals.&nbsp;&nbsp;One example application is setting the level of the signal in a digital modulator.&nbsp;&nbsp;Knowing PAPR allows setting the average power to a level that is just low enough to minimize clipping.</p>
<p>However, for a random signal, PAPR is a statistical quantity.&nbsp;&nbsp;We have to ask, what...]]></description>
<pubDate>Tue, 17 May 2016 18:55:24 +0000</pubDate>
<author>Neil Robertson</author>
</item>
<item>
<title>Filter a Rectangular Pulse with no Ringing</title>
<link>https://www.dsprelated.com/showarticle/956.php</link>
<description><![CDATA[<p>To filter a rectangular pulse without any ringing,  there is only one requirement on the filter coefficients:&nbsp; they must all be positive.&nbsp; However, if we want the leading and trailing  edge of the pulse to be symmetrical, then the coefficients must be  symmetrical.&nbsp; What we are describing is  basically a window function.
</p>
<p>Consider a rectangular pulse 32 samples long with  fs ...]]></description>
<pubDate>Thu, 12 May 2016 13:53:11 +0000</pubDate>
<author>Neil Robertson</author>
</item>
</channel>
</rss>