Neil Robertson (@neirober)

Neil Robertson worked at Scientific Atlanta, Cisco, and ST Micro doing RF design, System Design, and DSP design for cable TV set-top boxes and cable modems. He is retired and lives in Columbus, Ohio.

Add the Hilbert Transformer to Your DSP Toolkit, Part 2

Neil Robertson December 4, 2022

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.  I’ll also show how a half-band filter can be synthesized using the Matlab function firpm, which employs the Parks-McClellan algorithm.

A half-band filter is a type of lowpass, even-symmetric FIR filter having an odd number of taps, with the even-numbered taps (except for the main tap) equal to zero.  This...


Add the Hilbert Transformer to Your DSP Toolkit, Part 1

Neil Robertson November 22, 20224 comments

In some previous articles, I made use of the Hilbert transformer, but did not explain its theory in any detail.  In this article, I’ll dig a little deeper into how the Hilbert Transformer works.  Understanding the Hilbert Transformer involves a modest amount of mathematics, but the payoff in useful applications is worth it.

As we’ll learn, a Hilbert Transformer is just a particular type of Finite Impulse Response (FIR) filter.  In Part 1 of this article, I’ll...


Book Recommendation "What is Mathematics?"

Neil Robertson June 20, 20229 comments

What is Mathematics is a classic, lucidly written survey of mathematics by Courant and Robbins.  The first edition was published in 1941!  I have only read a portion of it, mainly the chapter on calculus.  One page of Courant is worth about five pages of my old college calculus textbook, and it’s a lot more fun to read.

The reader of this book should already be familiar with algebra and trigonometry.  For engineers, some worthwhile sections of the book are:


Evaluate Noise Performance of Discrete-Time Differentiators

Neil Robertson March 28, 20225 comments

When it comes to noise, all differentiators are not created equal.  Figure 1 shows the magnitude response of two differentiators.  They both have a useful bandwidth of a little less than π/8 radians (based on maximum magnitude response error of 2%).  Suppose we apply a signal with Gaussian noise to each of these differentiators.  The sinusoidal signal with noise is shown in the top of Figure 2.  Signal frequency is π/12.5 radians.  The output of the so-called...


Learn About Transmission Lines Using a Discrete-Time Model

Neil Robertson January 12, 2022

We don’t often think about signal transmission lines, but we use them every day.  Familiar examples are coaxial cable, Ethernet cable, and Universal Serial Bus (USB).  Like it or not, high-speed clock and signal traces on printed-circuit boards are also transmission lines.

While modeling transmission lines is in general a complex undertaking, it is surprisingly simple to model a lossless, uniform line with resistive terminations by using a discrete-time approach.  A...


The Discrete Fourier Transform and the Need for Window Functions

Neil Robertson November 15, 20212 comments

The Discrete Fourier Transform (DFT) is used to find the frequency spectrum of a discrete-time signal.  A computationally efficient version called the Fast Fourier Transform (FFT) is normally used to calculate the DFT.  But, as many have found to their dismay, the FFT, when used alone, usually does not provide an accurate spectrum.  The reason is a phenomenon called spectral leakage.

Spectral leakage can be reduced drastically by using a window function in conjunction...


Modeling Anti-Alias Filters

Neil Robertson September 26, 2021

Digitizing a signal using an Analog to Digital Converter (ADC) usually requires an anti-alias filter, as shown in Figure 1a.  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.  We’ll also model aliasing of Gaussian noise.  I hope the examples make the textbook explanations of aliasing seem a little more real.  Of course, modeling of...


Digital Filter Instructions from IKEA?

Neil Robertson June 18, 20215 comments

Swedish “Bygglek” = build and play.   Swedish “Bygglek” = build and play.

Swedish “Bygglek” = build and play.  Swedish “Bygglek” = build and play.

Swedish “Bygglek” = build and play.  Swedish “Bygglek” = build and play.

Swedish “Bygglek” = build and play.  Swedish “Bygglek” = build and play.

Swedish “Bygglek” = build and play.  Swedish “Bygglek” = build and...


Setting Carrier to Noise Ratio in Simulations

Neil Robertson April 11, 2021

When simulating digital receivers, we often want to check performance with added Gaussian noise.  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).  I also provide a short Matlab function to generate a noise vector of the desired level for a given signal vector.

Definition of C/N

The Carrier to noise ratio is defined as the ratio of average signal power to noise power for a modulated...


Add a Power Marker to a Power Spectral Density (PSD) Plot

Neil Robertson February 7, 2021

Perhaps we should call most Power Spectral Density (PSD) calculations relative PSD, because usually we don’t have to worry about absolute power levels.  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.  Unfortunately, you can’t read the power directly from the plot.  For example, the plotted spectral peak of a narrowband signal, such as a sinewave, is lower than the...


Find Aliased ADC or DAC Harmonics (with animation)

Neil Robertson January 11, 2021

When a sinewave is applied to a data converter (ADC or DAC), device nonlinearities produce harmonics.  If a harmonic frequency is greater than the Nyquist frequency, the harmonic appears as an alias.  In this case, it is not at once obvious if a given spur is a harmonic, and if so, its order.  In this article, we’ll present Matlab code to simulate the data converter nonlinearities and find the harmonic alias frequencies.  Note that Analog Devices has an online tool for...


Compute Images/Aliases of CIC Interpolators/Decimators

Neil Robertson November 1, 20202 comments

Cascade-Integrator-Comb (CIC) filters are efficient fixed-point interpolators or decimators.  For these filters, all coefficients are equal to 1, and there are no multipliers.  They are typically used when a large change in sample rate is needed.  This article provides two very simple Matlab functions that can be used to compute the spectral images of CIC interpolators and the aliases of CIC decimators.

1.  CIC Interpolators

Figure 1 shows three interpolate-by-M...


Design Square-Root Nyquist Filters

Neil Robertson July 13, 2020

In his book on multirate signal processing, harris presents a nifty technique for designing square-root Nyquist FIR filters with good stopband attenuation [1].  In this post, I describe the method and provide a Matlab function for designing the filters.  You can find a Matlab function by harris for designing the filters at [2].

Background

Single-carrier modulation, such as QAM, uses filters to limit the bandwidth of the signal.  Figure 1 shows a simplified QAM system block...


Third-Order Distortion of a Digitally-Modulated Signal

Neil Robertson June 9, 2020
Analog designers are always harping about amplifier third-order distortion.  Why?  In this article, we’ll look at why third-order distortion is important, and simulate a QAM signal with third-order distortion.

In the following analysis, we assume that signal phase at the amplifier output is not a function of amplitude.  With this assumption, the output y of a non-ideal amplifier can be written as a power series of the input signal x:

$$y=...


Second Order Discrete-Time System Demonstration

Neil Robertson April 1, 20202 comments

Discrete-time systems are remarkable:  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).  Here, I try to illustrate this remarkableness by converting a continuous-time second-order system to an approximately equivalent discrete-time system.  With a discrete-time model, we can then easily compute the time response to any input.  But note that the goal here is as much to...


A Simplified Matlab Function for Power Spectral Density

Neil Robertson March 3, 20204 comments

In an earlier post [1], I showed how to compute power spectral density (PSD) of a discrete-time signal using the Matlab function pwelch [2].  Pwelch is a useful function because it gives the correct output, and it has the option to average multiple Discrete Fourier Transforms (DFTs).  However, a typical function call has five arguments, and it can be hard to remember how to set them all and how they default.

In this post, I create a simplified PSD function by putting a...


Fractional Delay FIR Filters

Neil Robertson February 9, 202014 comments

Consider the following Finite Impulse Response (FIR) coefficients:

b = [b0 b1 b2 b1 b0]

These coefficients form a 5-tap symmetrical FIR filter having constant group delay [1,2] over 0 to fs/2 of:

D = (ntaps – 1)/2 = 2      samples

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 number of taps, the group delay is always an integer + 0.5 samples.  Can we design a filter...


Model Signal Impairments at Complex Baseband

Neil Robertson December 11, 20195 comments

In this article, we develop complex-baseband models for several signal impairments: interfering carrier, multipath, phase noise, and Gaussian noise.  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.  Although our example system is QAM, the models can be used for any complex-baseband signal.

I used a very simple complex-baseband model of a QAM system in my last


Compute Modulation Error Ratio (MER) for QAM

Neil Robertson November 5, 20192 comments

This post defines the Modulation Error Ratio (MER) for QAM signals, and shows how to compute it.  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).  A Matlab script at the end of the PDF version of this post computes MER for a simplified QAM-64 system.

Figure 1 is a simplified block diagram of a QAM system.  The transmitter includes a source of QAM symbols, a root-Nyquist...


Plotting Discrete-Time Signals

Neil Robertson September 15, 20195 comments

A discrete-time sinusoid can have frequency up to just shy of half the sample frequency.  But if you try to plot the sinusoid, the result is not always recognizable.  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.  But if you plot a 35 Hz sinusoid sampled at 100 Hz, you get the bottom graph, which does not look like a sine when you connect the dots.  We typically want the plot of a...


Interpolation Basics

Neil Robertson August 20, 201915 comments

This article covers interpolation basics, and provides a numerical example of interpolation of a time signal.  Figure 1 illustrates what we mean by interpolation.  The top plot shows a continuous time signal, and the middle plot shows a sampled version with sample time Ts.  The goal of interpolation is to increase the sample rate such that the new (interpolated) sample values are close to the values of the continuous signal at the sample times [1].  For example, if...


A Direct Digital Synthesizer with Arbitrary Modulus

Neil Robertson June 3, 20195 comments

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.  In other words, f = k*fs/20, where k is an integer and fs is sample frequency.  This article shows how to do this using a simple Direct Digital Synthesizer (DDS) with a look-up table that is at most 20 entries long.   We’ll also demonstrate a Quadrature-output DDS.  A note on...


IIR Bandpass Filters Using Cascaded Biquads

Neil Robertson April 20, 201911 comments

In an earlier post [1], we implemented lowpass IIR filters using a cascade of second-order IIR filters, or biquads.  

This post provides a Matlab function to do the same for Butterworth bandpass IIR filters.  Compared to conventional implementations, bandpass filters based on biquads are less sensitive to coefficient quantization [2].  This becomes important when designing narrowband filters.

A biquad section block diagram using the Direct Form II structure [3,4] is...


Demonstrating the Periodic Spectrum of a Sampled Signal Using the DFT

Neil Robertson March 9, 201920 comments

One of the basic DSP principles states that a sampled time signal has a periodic spectrum with period equal to the sample rate.  The derivation of can be found in textbooks [1,2].  You can also demonstrate this principle numerically using the Discrete Fourier Transform (DFT).

The DFT of the sampled signal x(n) is defined as:

$$X(k)=\sum_{n=0}^{N-1}x(n)e^{-j2\pi kn/N} \qquad (1)$$

Where

X(k) = discrete frequency spectrum of time sequence x(n)


Compute the Frequency Response of a Multistage Decimator

Neil Robertson February 10, 20192 comments

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].  A more efficient version is shown in Figure 1b, which uses three cascaded decimate-by-two filters.  This implementation has the advantages that only FIR 1 is sampled at the highest sample rate, and the total number of filter taps is lower.

The frequency response of the single-stage decimator before downsampling is just...


Use Matlab Function pwelch to Find Power Spectral Density – or Do It Yourself

Neil Robertson January 13, 201938 comments

In my last post, we saw that finding the spectrum of a signal requires several steps beyond computing the discrete Fourier transform (DFT)[1].  These include windowing the signal, taking the magnitude-squared of the DFT, and computing the vector of frequencies.  The Matlab function pwelch [2] performs all these steps, and it also has the option to use DFT averaging to compute the so-called Welch power spectral density estimate [3,4].

In this article, I’ll present some...


Evaluate Window Functions for the Discrete Fourier Transform

Neil Robertson December 18, 2018

The Discrete Fourier Transform (DFT) operates on a finite length time sequence to compute its spectrum.  For a continuous signal like a sinewave, you need to capture a segment of the signal in order to perform the DFT.  Usually, you also need to apply a window function to the captured signal before taking the DFT [1 - 3].  There are many different window functions and each produces a different approximation of the spectrum.  In this post, we’ll present Matlab code that...


Design a DAC sinx/x Corrector

Neil Robertson July 22, 20189 comments

This post provides a Matlab function that designs linear-phase FIR sinx/x correctors.  It includes a table of fixed-point sinx/x corrector coefficients for different DAC frequency ranges.

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.  In DSP math, we treat the digital signal applied to the DAC is a sequence of impulses.  These are converted by the DAC into contiguous pulses...


Digital PLL’s, Part 3 – Phase Lock an NCO to an External Clock

Neil Robertson May 27, 201834 comments

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.  This situation is shown in Figure 1.  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.  This time-domain PLL model is similar to the one presented in Part 1 of this series on digital PLL’s [1].  In that PLL, we...


ADC Clock Jitter Model, Part 2 – Random Jitter

Neil Robertson April 22, 20187 comments

In Part 1, I presented a Matlab function to model an ADC with jitter on the sample clock, and applied it to examples with deterministic jitter.  Now we’ll investigate an ADC with random clock jitter, by using a filtered or unfiltered Gaussian sequence as the jitter source.  What we are calling jitter can also be called time jitter, phase jitter, or phase noise.  It’s all the same phenomenon.  Typically, we call it jitter when we have a time-domain representation,...


ADC Clock Jitter Model, Part 1 – Deterministic Jitter

Neil Robertson April 16, 201817 comments

Analog to digital converters (ADC’s) have several imperfections that affect communications signals, including thermal noise, differential nonlinearity, and sample clock jitter [1, 2].  As shown in Figure 1, the ADC has a sample/hold function that is clocked by a sample clock.  Jitter on the sample clock causes the sampling instants to vary from the ideal sample time.  This transfers the jitter from the sample clock to the input signal.

In this article, I present a Matlab...


Phase or Frequency Shifter Using a Hilbert Transformer

Neil Robertson March 25, 201821 comments

In this article, we’ll describe how to use a Hilbert transformer to make a phase shifter or frequency shifter.  In either case, the input is a real signal and the output is a real signal.  We’ll use some simple Matlab code to simulate these systems.  After that, we’ll go into a little more detail on Hilbert transformer theory and design. 

Phase Shifter

A conceptual diagram of a phase shifter is shown in Figure 1, where the bold lines indicate complex...


Coefficients of Cascaded Discrete-Time Systems

Neil Robertson March 4, 2018

In this article, we’ll show how to compute the coefficients that result when you cascade discrete-time systems.  With the coefficients in hand, it’s then easy to compute the time or frequency response.  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 portion [1].

This article is available in PDF format for...


Design IIR Filters Using Cascaded Biquads

Neil Robertson February 11, 201826 comments

This article shows how to implement a Butterworth IIR lowpass filter as a cascade of second-order IIR filters, or biquads.  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.  Although we’ll be designing Butterworth filters, the approach applies to any all-pole lowpass filter (Chebyshev, Bessel, etc).  As we’ll see, the cascaded-biquad design is less sensitive to coefficient...


Design IIR Highpass Filters

Neil Robertson February 3, 20182 comments

This post is the fourth in a series of tutorials on IIR Butterworth filter design.  So far we covered lowpass [1], bandpass [2], and band-reject [3] filters; now we’ll design highpass filters.  The general approach, as before, has six steps:

Find the poles of a lowpass analog prototype filter with Ωc = 1 rad/s. Given the -3 dB frequency of the digital highpass filter, find the corresponding frequency of the analog highpass filter (pre-warping). Transform the...

Design IIR Band-Reject Filters

Neil Robertson January 17, 20182 comments

In this post, I show how to design IIR Butterworth band-reject filters, and provide two Matlab functions for band-reject filter synthesis.  Earlier posts covered IIR Butterworth lowpass [1] and bandpass [2] filters.  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 dB frequencies.   I’ll discuss the differences between the two approaches later in this...


Design IIR Bandpass Filters

Neil Robertson January 6, 201810 comments

In this post, I present a method to design Butterworth IIR bandpass filters.  My previous post [1] covered lowpass IIR filter design, and provided a Matlab function to design them.  Here, we’ll do the same thing for IIR bandpass filters, with a Matlab function bp_synth.m.  Here is an example function call for a bandpass filter based on a 3rd order lowpass prototype:

N= 3; % order of prototype LPF fcenter= 22.5; % Hz center frequency, Hz bw= 5; ...

Design IIR Butterworth Filters Using 12 Lines of Code

Neil Robertson December 10, 201712 comments

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.  You can do it in 12 lines of Matlab code.  In this article, we’ll create a Matlab function butter_synth.m to design lowpass Butterworth filters of any order.  Here is an example function call for a 5th order filter:

N= 5 % Filter order fc= 10; % Hz cutoff freq fs= 100; % Hz sample freq [b,a]=...

Simplest Calculation of Half-band Filter Coefficients

Neil Robertson November 20, 20179 comments

Half-band filters are lowpass FIR filters with cut-off frequency of one-quarter of sampling frequency fs and odd symmetry about fs/4  [1]*.  And it so happens that almost half of the coefficients are zero.  The passband and stopband bandwiths are equal, making these filters useful for decimation-by-2 and interpolation-by-2.  Since the zero coefficients make them computationally efficient, these filters are ubiquitous in DSP systems.

Here we will compute half-band...


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

Neil Robertson October 23, 20179 comments
Reference [1] has some 3D plots of frequency response magnitude above the unit circle in the Z-plane.  I liked them enough that I wrote a Matlab function to plot the response of any digital filter this way.  I’m not sure how useful these plots are, but they’re fun to look at. The Matlab code is listed in the Appendix. 

This post is available in PDF format for easy...


Modeling a Continuous-Time System with Matlab

Neil Robertson June 6, 20172 comments

Many of us are familiar with modeling a continuous-time system in the frequency domain using its transfer function H(s) or H(jω).  However, finding the time response can be challenging, and traditionally involves finding the inverse Laplace transform of H(s).  An alternative way to get both time and frequency responses is to transform H(s) to a discrete-time system H(z) using the impulse-invariant transform [1,2].  This method provides an exact match to the continuous-time...


Canonic Signed Digit (CSD) Representation of Integers

Neil Robertson February 18, 2017

In my last post I presented Matlab code to synthesize multiplierless FIR filters using Canonic Signed Digit (CSD) coefficients.  I included a function dec2csd1.m (repeated here in Appendix A) to convert decimal integers to binary CSD values.  Here I want to use that function to illustrate a few properties of CSD numbers.

In a binary signed-digit number system, we allow each binary digit to have one of the three values {0, 1, -1}.  Thus, for example, the binary value 1 1...


Matlab Code to Synthesize Multiplierless FIR Filters

Neil Robertson October 31, 20163 comments

This article presents Matlab code to synthesize multiplierless Finite Impulse Response (FIR) lowpass filters.

A filter coefficient can be represented as a sum of powers of 2.  For example, if a coefficient = decimal 5 multiplies input x, the output is $y= 2^2*x + 2^0*x$.  The factor of $2^2$ is then implemented with a shift of 2 bits.  This method is not efficient for coefficients having a lot of 1’s, e.g. decimal 31 = 11111.  To reduce the number of non-zero...


The Power Spectrum

Neil Robertson October 8, 2016

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.  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.  This post shows how to calculate an accurate power spectrum.

Parseval’s theorem [1,2] is a property of the Discrete Fourier Transform (DFT) that...


Digital PLL's -- Part 2

Neil Robertson June 15, 20165 comments

In Part 1, we found the time response of a 2nd order PLL with a proportional + integral (lead-lag) loop filter.  Now let’s look at this PLL in the Z-domain [1, 2].  We will find that the response is characterized by a loop natural frequency ωn and damping coefficient ζ. 

Having a Z-domain model of the DPLL will allow us to do three things:

Compute the values of loop filter proportional gain KL and integrator gain KI that give the desired loop natural...

Digital PLL's -- Part 1

Neil Robertson June 7, 201626 comments
1. Introduction

Figure 1.1 is a block diagram of a digital PLL (DPLL).  The purpose of the DPLL is to lock the phase of a numerically controlled oscillator (NCO) to a reference signal.  The loop includes a phase detector to compute phase error and a loop filter to set loop dynamic performance.  The output of the loop filter controls the frequency and phase of the NCO, driving the phase error to zero.

One application of the DPLL is to recover the timing in a digital...


Peak to Average Power Ratio and CCDF

Neil Robertson May 17, 20164 comments

Peak to Average Power Ratio (PAPR) is often used to characterize digitally modulated signals.  One example application is setting the level of the signal in a digital modulator.  Knowing PAPR allows setting the average power to a level that is just low enough to minimize clipping.

However, for a random signal, PAPR is a statistical quantity.  We have to ask, what is the probability of a given peak power?  Then we can decide where to set the average...


Filter a Rectangular Pulse with no Ringing

Neil Robertson May 12, 201610 comments

To filter a rectangular pulse without any ringing, there is only one requirement on the filter coefficients:  they must all be positive.  However, if we want the leading and trailing edge of the pulse to be symmetrical, then the coefficients must be symmetrical.  What we are describing is basically a window function.

Consider a rectangular pulse 32 samples long with fs = 1 kHz.  Here is the Matlab code to generate the pulse:

N= 64; fs= 1000; % Hz sample...

Re: The Nyquist Sampling Theorem

Reply posted 1 day ago (01/26/2023)
"In the style of Bob Dylan" is a lot to ask -- The song sounds more like a cross between Dylan and Dr. Seuss.

Re: GNURadio BPSK Position Costas Loop and Clocksync

Reply posted 2 months ago (12/03/2022)
No, the timing synchronization must occur before carrier synchronization.  I know this from designing QPSK demods.  There is some limit to the amount of carrier...

Re: Good site for distance Learning

Reply posted 3 months ago (10/22/2022)
Thanks Dave, looks interesting.

Re: Channel power measurement

Reply posted 3 months ago (10/21/2022)
Loganathan,I wrote a post that includes a Matlab function to compute power over a band:https://www.dsprelated.com/showarticle/1387.phpI'm not sure it applies to...

Re: Difference between fft and pspectrum in Matlab

Reply posted 4 months ago (09/19/2022)
Hi MK,I think pspectrum is similar to another Matlab function called pwelch.  Like pspectrum, pwelch computes the power spectral density.  I wrote a tutorial on...

Re: Determine Classical Phase Noise from EVM

Reply posted 11 months ago (03/01/2022)
I haven't tried to calculate phase noise from EVM or MER. I used to measure the noise spectrum of the unmodulated carrier on a spectrum analyzer and record the...

Re: Determine Classical Phase Noise from EVM

Reply posted 11 months ago (03/01/2022)
Hi Maxplus,I wrote a blog post: "Model Signal Impairments at Complex Baseband" that computes a QAM constellation with added phase noise.  It also calculates MER...
Hi,It appears you are not using a window function, so I think you are getting different spectral leakage components, depending on the phase of the sine.  I discussed...

Re: Free book: Software-Defined Radio for Engineers

Reply posted 1 year ago (12/09/2021)
Thanks Marcin!
This pdf book is available on the Analog Devices site here.  I have not read it, but it appears to contain a reasonable mix of theory and practice.  The book...
Rick,I vaguely recall fred harris deprecating Chebyshev windows.  I think it was because the flat sidelobes alias.  By contrast, the Kaiser window has sidelobes...
fred and Rick,Thanks for these very useful comments.  I have been incorrectly using hanning(N) for DFT windowing, when I should have been using hanning(N,'periodic'). ...
For non-RF people:  VNA = Vector Network Analyzer.  This is a piece of lab equipment that is used to measure the complex S-parameters over some frequency range...

Re: Can you find the illegal step?

Reply posted 1 year ago (08/28/2021)
If you let b = 1, then you get the "classic" homework result:2 = 1From this follows the other classic result: 1 = 0. Neil

Re: Overdriven Sine Wave through DSP Filter

Reply posted 2 years ago (05/28/2021)
Hi Groger,What is the sample rate of your A/D converter?  Are you using an anti-aliasing (AA) filter?  What is the AA filter's stopband frequency/attenuation?Note...

Re: Single Sideband Demodulation

Reply posted 2 years ago (04/28/2021)
Hi,Go to "contact" at the bottom and send a message.  The site owner is named StephaneNeil

Re: Real Numbers

Reply posted 2 years ago (04/05/2021)
Rick,I like it too.  But what about lucky numbers and unlucky numbers?  I think they are a subset of the integers.-- Neil

Re: time recovery algorithm and CORDIC

Reply posted 2 years ago (03/05/2021)
...

Re: time recovery algorithm and CORDIC

Reply posted 2 years ago (03/05/2021)
Hi Ali,A good introductory reference for timing recovery is in Michael Rice's book:  "Digital Communications, A Discrete-Time Approach". Pearson Prentice Hall,...
I don't know.  I usually deal with signals that are ac-coupled.
Hi artmez,Actually, S/N in the ENOB formula is full-scale sine power relative to the total noise power.  So you have to integrate the noise power to find the S/N. ...

Re: Dinner's ready!

Reply posted 2 years ago (01/31/2021)
Hallelujah!   Thanks.  If you don't watch out, someone may ask you to explain your demo.-- Neil

Dinner's ready!

New thread started 2 years ago
I may be the last one to know this trick, but if you turn on your computer speakers and type the following code in Matlab, it plays a gong sound: load gong.mat; sound(y) Silly,...

Matlab Basic Functions Reference (pdf)

New thread started 2 years ago
Matlab has posted a pdf document that lists basic functions.  Here is a link to the pdf.-- Neil

Re: Multi-filter Parks McClellan algorithm

Reply posted 2 years ago (12/17/2020)
Woodpecker,I just reviewed the post I referenced -- it turns out I actually used a least-squares approximation (Matlab firls), not PM.  I don't recall if it worked...

Re: Multi-filter Parks McClellan algorithm

Reply posted 2 years ago (12/16/2020)
Hi Woodpecker,It seems to me it could work well for a droop-compensation filter.  For example, I have used the Matlab firls [not PM] algorithm to design sinx/x...

Re: Multi-filter Parks McClellan algorithm

Reply posted 2 years ago (12/16/2020)
Also,If H1(f) has a region where it is very small (e.g. filter stopband), this region can be excluded.  For example, if H1 is a LP, you could just compute H2 over...

Re: Multi-filter Parks McClellan algorithm

Reply posted 2 years ago (12/16/2020)
Hi Woodpecker,Suppose you want overall magnitude response H(f), and you will realize this with cascaded responses H1(f) and H2(f), where H1(f) is given and H2(f)...

Re: Off-topic: Xmas gift for a techie?

Reply posted 2 years ago (12/03/2020)
Hi Woodpecker,I guess we may find out how well AI works next time we buy a car...Neil

Off-topic: Xmas gift for a techie?

New thread started 2 years ago
I am reading Ian Stewart's great book:  In Pursuit of the Unknown, subtitled "17 Equations that Changed the World".  Here are the subjects of some chapters:Pythagoras's...
Maybe a pentagon formed by uniting a square with a triangle on its right edge.  In other words, the same symbol that is used on schematics when a signal comes from...

Re: SDR/DSP Question

Reply posted 2 years ago (08/15/2020)
Hi,A cleaner solution would be to perform the upconversion in the digital domain.  You could use a quadrature Digital UpConverter (DUC) chip, which includes an...

Re: Tilt correction in modulators

Reply posted 2 years ago (08/14/2020)
nbtech,So was the tilt correction a matter of DAC sinx/x correction or something else?regards,Neil

Re: DSPOnlineConference.com - need help testing it.

Reply posted 3 years ago (07/14/2020)
Hi Stephane,The website looks good.  Note it says "Free for early registration", so you may want to change that to "half-price for early registration".Neil
Hi JGruber,You can try changing the dB ripple parameter "r" of the Chebychev window in my function.  It is set at 70 dB -- you can improve accuracy by using a...
As others have said, you can do it in the time domain.  You could use a Farrow interpolator, or for better accuracy of the amplitude response, you could use a Fractional-delay...

Re: Question regarding CIC filter

Reply posted 3 years ago (05/28/2020)
Hi Amin,Take a look at this article if you have not already read it:https://www.dsprelated.com/showarticle/1337.phpregards,Neil
Hi Jon,Looks like progress!  You could of course reduce the number of taps by reducing the number of samples per symbol in the RRC filters.  It is common to use...
Jon,Here is an example of random symbols of value +.5/-.5 filtered by cascaded root-Nyquist filters.  The m-file eye1.m calls the function eyeplot.m.  Both mfile...
Yes, the two cases you mentioned won't be the same length.  However, there will be samples at either end of the cascaded root-Nyquist response that are close to...
Jon,Actually, the 2nd filter should be identical to the first one.  you are correct to upsample before filtering on the transmit side.  Are you viewing an eyeplot...

Re: Covid-19 Stories

Reply posted 3 years ago (03/27/2020)
Hi everyone,I'm in Columbus, Ohio.  I am wondering how long my hair will be before my barber is open for business again.  OK, not a big issue!

Re: Tunable power divider

Reply posted 3 years ago (03/03/2020)
So, if P1 + P2 = Ptotal,P2/Ptotal = 1 - P1/Ptotallet P1 dB = 10log10(P1/Ptotal)    P2 dB = 10log10(P2/Ptotal)thenP2 dB = 10log10(1 - 10^(P1dB/10))e.g.  for...

Re: Tunable power divider

Reply posted 3 years ago (03/03/2020)
Sumit,Sorry, but I don't have anything specific.  Since passive devices tend to be based on transformers, they tend to have a fixed loss.  Maybe you could just...

Re: Tunable power divider

Reply posted 3 years ago (03/03/2020)
Hi Sumit,What is the frequency range required?  Must this be a passive device, or can it be powered?-- Neil

Re: Advice for FM Demodulation Techniques

Reply posted 3 years ago (01/23/2020)
Greg,Make sure to use atan2(Q,I), and not atan(Q/I).  Another option is to use the block diagram in Figure 13-61 (b).Neil

Re: Advice for FM Demodulation Techniques

Reply posted 3 years ago (01/23/2020)
Here is a post by Rick Lyons on FM demodulation.  You can also refer to section 13.22 of his book Understanding Digital Signal Processing (3rd ed.)https://www.embedded.com/dsp-tricks-frequency-demodulation-algorithms/One...

Re: Back online - Migration done

Reply posted 3 years ago (01/19/2020)
It seems to me the site is loading faster.-- Neil

Update to my last blog post

New thread started 3 years ago
I made an update to my blog post:  "Model Signal Impairments at Complex Baseband".  I simplified the math for adding phase noise in section 3, and I updated...

Re: Practical digital communications book

Reply posted 3 years ago (11/13/2019)
Hi Simonzz,A good book that covers theory and practice is Digital Communications, A Discrete-Time Approach, by Michael Rice. (Pearson, 2009).  Among other topics,...

Re: phase change

Reply posted 3 years ago (11/09/2019)
...

Re: New IEEE Signal Processing Society Journal

Reply posted 3 years ago (10/31/2019)
Hi Stephane,I suppose most readers of DSPrelated come here to get informed and instructed about somewhat general DSP theory and tips.  They want to get some education...

Re: New IEEE Signal Processing Society Journal

Reply posted 3 years ago (10/30/2019)
For that price, they should at least throw in a diploma from IEEE School of Truck Driving or IEEE Beauty College.Neil

Re: Designing an IIR comb (peak) filter

Reply posted 3 years ago (09/03/2019)
bobby_k:1.  Since you said your band of interest was 0 -200 Hz, it is ok to decimate by 4 to give fs= 3750 Hz.  You don't have to decimate, but if you don't,...

Re: Designing an IIR comb (peak) filter

Reply posted 3 years ago (09/03/2019)
bobby_k,Your sample rate is 15 kHz.  So you can decimate by 4 to 3750 kHz.  Then this code gives the response you are looking for, I think.regards,Neilfs= 3750; b=...

Re: reconstruct phase-shifted sine tone

Reply posted 3 years ago (08/04/2019)
Hi fred,Thanks for being so helpful!

Re: reconstruct phase-shifted sine tone

Reply posted 3 years ago (08/04/2019)
Note cost of the paper is $33.00 for non-IEEE members.

Re: Clock drift and compensation

Reply posted 4 years ago (06/28/2019)
Are the crystal frequencies equal or related by an integer factor?  If so, it may be easier to drive the DSP chip with the clock from the tuner.

Re: Real to Complex conversion

Reply posted 4 years ago (06/28/2019)
I don't think method a) works.  I discuss the Hilbert transformer in this post:https://www.dsprelated.com/showarticle/1147.phpA Hilbert transformer could work. ...

Re: OFF TOPIC: A Question About PI

Reply posted 4 years ago (06/27/2019)
Rick,The girl in the video asked what pi is good for.  Obviously, it's good for designing the NCO in the demodulator of her smart phone.

Re: Window Impulse Response

Reply posted 4 years ago (06/25/2019)
The impulse response just the output of your system when the input is the unit impulse function.  The Fourier transform of the impulse response is the transfer...

Re: Window Impulse Response

Reply posted 4 years ago (06/25/2019)
Hi Samp17,When using a window, be sure to multiply your signal by the window, sample-by-sample.  That will allow your spectrum to cover the range of 0 to fs/2. ...

Re: Low cost audio DSP Exploration

Reply posted 4 years ago (05/22/2019)
Send a message to stephaneb -- you can contact him by clicking on his name.Neil
To continue the discussion of linear algebra:  the classic application we learned in EE was steady-state simulation of linear RLC circuits.  A circuit with N loops can...

Re: Timing Recovery Loop Filter Rate

Reply posted 4 years ago (05/10/2019)
I agree that there is no advantage to running the loop filter faster than the rate of the TED.  It is not a big deal to do the loop computations with the loop filter...
Maybe the rules for authors that Rick mentions should be modified as follows:After you are done writing the paper add 100 or 200 words to explain "the obvious".

Re: Todo List: Improvements to the Related Sites

Reply posted 4 years ago (05/02/2019)
Hi Stephane,On the home page, I preferred the previous list of recent blogs to the present list, which only contains 6 posts.  The present format causes blogs to...
Hi Naumankalia,What is the difference between your scheme and just applying a full-scale sinewave and then taking the windowed fft?  What is your definition of...

Re: Trying to go live SOON

Reply posted 4 years ago (04/07/2019)
Stephane,Thanks for the intro to New Brunswick humor.Neil
Hi,I have read parts of this book by Lin and Costello.  It may be out of print.  The book was pretty straightforward, however, it is a long slog to get to the...
"Then, I view the "Taking aliasing into account" section as doing all of the decimation in one go"Yes, that's right.Neil
I summarize this process on page 6 of the pdf version.
Weetabixharry,I'm not saying to reorder the filtering and downsampling -- If you look at figure 5, what I am doing is cascading versions of each filter that are...
Hi,Take a look at my post on this subject:https://www.dsprelated.com/showarticle/1228.phpregards,Neil
No need to repost.  You might want to look at Michael Rice's book, Chapter 8.https://www.pearson.com/us/higher-education/progra...

Re: SC FDMA Channel Equalization

Reply posted 4 years ago (02/26/2019)
Hi,I think you posted this around the time dsprelated.com suffered a host outage.  It may have gone unnoticed by some.regards,Neil
Hi Michael,I think you posted this around the time dsprelated.com suffered a host outage.  It may have gone unnoticed by some.regards,Neil

Re: Regarding my recent post on Multistage Decimators

Reply posted 4 years ago (02/11/2019)
Hi Kaz,Your code computes the impulse response of the decimator at the output sample rate of fs/8.  My post computes the impulse response and frequency response...
I posted an article on Multistage decimators yesterday.  I decided it needed some tweaking, so today I updated it to show the stopband requirements in a couple...

Re: 50Hz and harmonics filtering

Reply posted 4 years ago (02/07/2019)
Also, what is the band of the desired signal?

Re: 50Hz and harmonics filtering

Reply posted 4 years ago (02/07/2019)
Hi Dimaios,What is your sample rate?Which harmonics are you trying to attenuate?  Odd? Even? Odd and even?How high in frequency do the harmonics extend?  5th harm,...

Re: Time domain signal slikes

Reply posted 4 years ago (01/14/2019)
Imoshe,I think you will need to provide more details.  Not being a radar person, I can make one comment -- it is probably not a good idea to zero-out data before...

Re: Phase Locked Loop Books in a time of DSP

Reply posted 4 years ago (01/09/2019)
Tim,I'm not sure if it is appropriate, but you could do a search on "Time to Digital Converter" (TDC).regards,Neil

Re: Real to Complex conversion

Reply posted 4 years ago (12/14/2018)
Here is my post that uses a Hilbert xfrmr:https://www.dsprelated.com/showarticle/1147.php
Ah yes -- the Old West, before the color subcarrier.Neil
For the elderly out there (I had to look it up):  ASA = as soon asNeil
I've been reading a P.G. Wodehouse book (Right-Ho, Jeeves) that has several fictional telegrams in it.  For example:Fink-Nottle, Brinkley Court, Market Snodsbury,...
Carneyc,So presumably the varactors are controlled by DC outputs of some kind of DACs (e.g. sigma-delta DACs).  I imagine you have a DAC assigned to each varactor,...
Carneyc,Can you provide more detail about what you mean by "a 4x4 array of bandpass filters"?  Also, how are the filters now tuned/calibrated?  Do they have variable...
Nelson,Pay TV is much more sophisticated now than back in the days of "scrambling" of analog video.  For that matter, analog video is almost non-existent now. ...
Rick,Thanks.  This is an occupational hazard of being an engineer.  Another hazard is getting something to work, but having the wrong explanation of why it works...

Re: Digital lock in amplifier on FPGA

Reply posted 5 years ago (04/30/2018)
Gabrics,I notice there are a lot of articles on this subject on the web.  For example:Microchip App note AN1115:  Implementing Digital Lock-In Amplifiers Using...

Re: DSP diagramming software?

Reply posted 5 years ago (04/15/2018)
Hi,I use Microsoft Visio.  I created my own library of symbols for my particular applications.  It's not perfect, but it does have a lot of flexibility.Another...

Re: MATLAB simulation of bilinear transformation

Reply posted 5 years ago (03/26/2018)
Simon,You have a lot of steps, so it's hard to say quickly where the problem is.  You can design a band-reject filter in one step using:[b,a]= butter(N,[fL fU]*2/fs,'stop')where...

Re: DSP History

Reply posted 5 years ago (03/13/2018)
Yes!  I used a slide rule for my freshman year, and got a Texas Instrument SR-50 scientific calculator (with red LED display) my sophomore year.

Re: DSP History

Reply posted 5 years ago (03/13/2018)
Rick,I was working on analog video modulators back in the early '80's.  Little did I know that these DSP pioneers had set in motion the technology that would replace...

Re: How to Obtain Biquad Coefficients

Reply posted 5 years ago (03/02/2018)
I noticed there is some Matlab code for the A-weighted filter in a DSPrelated post from 2011:https://www.dsprelated.com/showcode/214.phpHere is the code, with the...

Re: How to Obtain Biquad Coefficients

Reply posted 5 years ago (02/19/2018)
Hi,For a biquad, the feedback coeffs are [1 a1 a2] and the feedforward coeffs are [b0 b1 b2].  The a0 coefficient does not appear explicitly in the filter structure. ...

Re: IIR filters

Reply posted 5 years ago (11/29/2017)
Hi,Good point! Thanks,Neil

IIR filters

New thread started 5 years ago
I am curious about the usefulness of IIR filters above 2nd order in DSP applications.  I know that first order IIR's are common, and presumably so are biquads. ...
Konejisimo,I don't want to make specific suggestions that may be totally off the mark for your situation.  A couple of possibilities for phase detectors in an all-digtial...
Konejesimo,Here are posts I wrote on digital PLL design that you might find useful:https://www.dsprelated.com/showarticle/967.phphttps://www.dsprelated.com/showarticle/973.phpUsing...

Re: AGC on FPGA

Reply posted 5 years ago (11/14/2017)
Kaz,I am not expert on AGC.  Maybe that's something I can study and write about sometime in the future.regards,Neil

Re: AGC on FPGA

Reply posted 5 years ago (11/14/2017)
Hi,I think you need to read up on how digital agc is typically done.  At its simplest, digital AGC consists of a threshold detector, integrator, and multiplier.Here...

Re: New DSP FAQ Section - please suggest topics

Reply posted 5 years ago (10/27/2017)
How do I make an FIR filter have gain of 1 at f = 0?

Re: New DSP FAQ Section - please suggest topics

Reply posted 5 years ago (10/27/2017)
What is the difference between FIR and IIR fiters?

Re: New DSP FAQ Section - please suggest topics

Reply posted 5 years ago (10/27/2017)
What is zero padding?

Re: New DSP FAQ Section - please suggest topics

Reply posted 5 years ago (10/27/2017)
I'm not sure I understand what you're getting at here.  I view the bilinear xform as a tool.  Does a hammer matter?regards,Neil

Re: Differential frequency measurement

Reply posted 5 years ago (10/07/2017)
Hi,By way of background, Mitra discusses DTMF decoding in his book, and provides an m-file:Sanjit K. Mitra, Digital Signal Processing 2nd Ed., McGraw-Hill 2001,...

Re: Gapped-signals

Reply posted 5 years ago (10/04/2017)
Tudelft_Res,To get more frequency resolution, you could zero-pad the segments **after** windowing.  For example, if one segment were length 1500, you could window...

Re: Gapped-signals

Reply posted 5 years ago (09/29/2017)
Tudelft_Res,I guess the answer depends on the type of signal and what you are using the signal for.  For example, if your purpose were spectral analysis, you could...
Hi,A delay of length T can be implemented by a series of one-sample delays, and it will have a linear phase slope.  For example, if you want a delay of 5 ms and...

Re: DSP project suggestion

Reply posted 5 years ago (09/11/2017)
Hi,A very simple project would be a one-bit sigma-delta DAC.  You could use various constants as input and measure the DC output of a one-pole RC lowpass filter...
Yeah,I once implemented a TDC phase detector who's input was just an external clock that was captured asynchronously as a single-bit signal.  I forget how much...
Hi John,The analysis in my PLL tutorial still applies -- however, to use that approach you would need to calculate the gain Kp of the time-stamp based phase detector....

Re: DFT of a signal and system

Reply posted 6 years ago (05/05/2017)
Yeah, it stems from the continuous system H(s):  the transfer function H(s) is the Laplace transform of the impulse response, and H(jw) is the Fourier transform...

Re: PAPR (peak to average power ratio)

Reply posted 6 years ago (04/13/2017)
...

Re: The adoption of the frequency measure "Hertz"

Reply posted 6 years ago (03/29/2017)
So you could say that they put Hertz in the driver's seat.

Re: Eye diagram

Reply posted 6 years ago (01/24/2017)
Avi,I have not looked at your code, so this may not apply.  However...If you have RRC filtered data, to look at the eye, you need to filter it again with the same RRC...

Re: Matlab Home-use version

Reply posted 6 years ago (11/08/2016)
Mark,They say "Get the full Capabilities of Matlab", so that implies it is full-featured.  As you noted, the DSP toolbox (a key feature) appears to be extra --...

Matlab Home-use version

New thread started 6 years ago
As many of you know, #Matlab is a very expensive tool -- its cost brings to mind Mylan Pharmeceuticals and the EpiPen.However, besides the student version, they...

Re: Understanding maths behind DFT?

Reply posted 6 years ago (11/07/2016)
Hi,The tricky thing is that textbooks are not always the best at clearly explaining the DFT. You may need to try a few to find an approach you like.  You might...

Re: Power Measurement of Complex Signal

Reply posted 6 years ago (10/19/2016)
...
Hi,This may not relate exactly to your problem, but take a look at this article.  It shows how to plot the image response of a decimator.  This method automatically...
Hi Andy,I'm not an expert, but FEC can be a tricky subject to jump into. The math can be tedious. I have read parts of the Lin and Costello book below -- it...

Re: A digital filter question

Reply posted 7 years ago (07/04/2016)
Rick,As a practical matter, if the sample rate is much higher than the filter passband,  you could insert a delay of one sample in the block diagram without affecting...

Re: A digital filter question

Reply posted 7 years ago (07/04/2016)
Hi Rick,No I have not seen that structure -- I have seen feed-forward structures for that purpose.The transfer function of your structure is of course Ha = 1/(1...

Re: Decimator Image response

Reply posted 7 years ago (05/10/2016)
Rick,Regarding the non-symmetric b_down and u_down: If I change two lines of code     b_down = 4*b(4:4:end);     (instead of (1:4:end) )     u_down = 4*u(2:4:end);...

Re: Decimator Image response

Reply posted 7 years ago (05/09/2016)
Hi Rick,1.  The definition I would propose for image response would be the sum of the undesired component levels that fall in-band due to decimation, with respect...

Decimator Image response

New thread started 7 years ago
...

Use this form to contact neirober

Before you can contact a member of the *Related Sites:

  • You must be logged in (register here)
  • You must confirm you email address