## Savitzky Golay Filter

The Savitzky-Golay filter is a mathematical smoothing filter that is often used in signal processing. It was first described in 1964 by Abraham Savitzky and Marcel Golay. The filter uses a polynomial regression over a series of values to find a smoothed value. One advantage of the Savitzky-Golay filter is that, unlike other smoothing filters, high-frequency components are not simply cut off, but are included in the calculation. As a result, the filter shows excellent properties with regard to the relative maxima, minima and scatter. In this article, the principle of the Savitzky Golay filter is explained and accompanied with MATLAB scripts. Two simple examples will be examined and provided with meaningful representations of the results to help understand these filters. The MATLAB function sgolay and its parameters are also explained and applied so that you can better understand this function and use it for your own applications.

## Fractional Delay Farrow Filter

The Fractional Delay Farrow Filter is a digital filter that delays the discrete-time input signal by a fraction of the sample period. There are many applications where such a delay is necessary. As an example one can consider symbol synchronization in digital receivers, conversion between arbitrary sampling frequencies, echo cancellation, speech coding and speech synthesis, modeling of musical instruments, etc.

## Decimation and Interpolation with IFIR Filters

In this article, the principle of the IFIR filter is first explained and accompanied by simulation. It also shows how to use the IFIR filters efficiently in the process of decimation and interpolation. Here, too, simulations with Simulink are used to explain the subject in an understandable manner.

## Decimation and Interpolation with Polyphase Filters

This article deals with decimation and interpolation in classical and polyphase realizations. The topic is accompanied by many simulations with MATLAB and Simulink, so that the facts can be easily fixed. The simulations can be creatively expanded with your own ideas.

## Zero-Order-Hold function as a model for DAConverters

The output of a digital to analog converter, short DAC, is a constant analog signal between two discrete samples. The DAC's output register retains its value from one sample up to the next sample. The network, which converts the binary value of the register into an analog voltage thus supplies a constant voltage and that leads to a stepped output signal. The analog smoothing filter connected at the output together with the frequency response of the DAC, modeled with a Zero-Order-Hold function, results in distortions. These are examined here and solutions to compensate for them are presented.

## A Simplified Matlab Function for Power Spectral Density

In an earlier post, I showed how to compute power spectral density (PSD) of a discrete-time signal using the Matlab function pwelch. 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 wrapper on pwelch that sets some parameters and converts the output units from W/Hz to dBW/bin. The function is named psd_simple.m, and its code is listed in the appendix.

## Fractional Delay FIR Filters

Consider the following Finite Impulse Response (FIR) coefficients:

b = [b_{0} b_{1} b_{2} b_{1} b_{0}]

These coefficients form a 5-tap symmetrical FIR filter having constant group delay [1,2] over 0 to f_{s}/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 with arbitrary delay, say 9.3 samples? The answer is yes -- It is possible to design a non-symmetrical FIR filter with arbitrary group delay which is approximately constant over a wide band, with approximately flat magnitude response [3,4]. Let the desired group delay be:

D = (ntaps - 1)/2 + u

= D_{0} + u samples, (1)

where we call u the fractional delay and -0.5 <= u <= 0.5. D_{0} is the fixed portion of the total delay; it is determined by ntaps. The appendix lists a simple Matlab function frac_delay_fir.m to compute FIR coefficients for a given value of u and ntaps. The function provides coefficients with approximately flat delay and frequency responses over a frequency range approaching 0 to f_{s}/2.

In this post, we'll present a couple of examples using the function, then discuss the theory behind it. Finally, we'll look at an example of a fractional delay lowpass FIR filter with arbitrary cut-off frequency.

## Digital Filtering in the Frequency Domain

Time domain digital filtering, whether implemented using FIR or IIR techniques, has been very well documented in literature and been thoroughly used in many base band processor designs. However, with the advent of software defined radios as well as CPU support in more recent baseband processors, it has become possible and often desirable to filter signals in software rather than digital hardware. Whereas, time domain digital filtering can certainly be implemented in software as well, it becomes highly inefficient as the number of filter taps grows. Frequency domain filtering, using FFT and IFFT operations, is significantly more efficient and surprisingly easy to understand. This document introduces the reader to frequency domain filtering both in theory and in practice via a MatLab script.

## The DFT of Finite-Length Time-Reversed Sequences

Recently I've been reading papers on underwater acoustic communications systems and this caused me to investigate the frequency-domain effects of time-reversal of time-domain sequences. I created this article because there is so little coverage of this topic in the literature of DSP.

## Model Signal Impairments at Complex Baseband

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.

## A Quadrature Signals Tutorial: Complex, But Not Complicated

Quadrature signals are based on the notion of complex numbers and perhaps no other topic causes more heartache for newcomers to DSP than these numbers and their strange terminology of j operator, complex, imaginary, real, and orthogonal. If you're a little unsure of the physical meaning of complex numbers and the j = √-1 operator, don't feel bad because you're in good company. Why even Karl Gauss, one the world's greatest mathematicians, called the j operator the "shadow of shadows". Here we'll shine some light on that shadow so you'll never have to call the Quadrature Signal Psychic Hotline for help. Quadrature signal processing is used in many fields of science and engineering, and quadrature signals are necessary to describe the processing and implementation that takes place in modern digital communications systems. In this tutorial we'll review the fundamentals of complex numbers and get comfortable with how they're used to represent quadrature signals. Next we examine the notion of negative frequency as it relates to quadrature signal algebraic notation, and learn to speak the language of quadrature processing. In addition, we'll use three-dimensional time and frequency-domain plots to give some physical meaning to quadrature signals. This tutorial concludes with a brief look at how a quadrature signal can be generated by means of quadrature-sampling.

## Savitzky Golay Filter

The Savitzky-Golay filter is a mathematical smoothing filter that is often used in signal processing. It was first described in 1964 by Abraham Savitzky and Marcel Golay. The filter uses a polynomial regression over a series of values to find a smoothed value. One advantage of the Savitzky-Golay filter is that, unlike other smoothing filters, high-frequency components are not simply cut off, but are included in the calculation. As a result, the filter shows excellent properties with regard to the relative maxima, minima and scatter. In this article, the principle of the Savitzky Golay filter is explained and accompanied with MATLAB scripts. Two simple examples will be examined and provided with meaningful representations of the results to help understand these filters. The MATLAB function sgolay and its parameters are also explained and applied so that you can better understand this function and use it for your own applications.

## Introduction of C Programming for DSP Applications

Appendix C of the book : Real-Time Digital Signal Processing: Implementations, Application and Experiments with the TMS320C55X

## Decimation and Interpolation with Polyphase Filters

This article deals with decimation and interpolation in classical and polyphase realizations. The topic is accompanied by many simulations with MATLAB and Simulink, so that the facts can be easily fixed. The simulations can be creatively expanded with your own ideas.

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

In this article, I'll present some examples to show how to use pwelch. You can also "do it yourself", i.e. compute spectra using the Matlab fft or other fft function. As examples, the appendix provides two demonstration mfiles; one computes the spectrum without DFT averaging, and the other computes the spectrum with DFT averaging.

## Fractional Delay Farrow Filter

The Fractional Delay Farrow Filter is a digital filter that delays the discrete-time input signal by a fraction of the sample period. There are many applications where such a delay is necessary. As an example one can consider symbol synchronization in digital receivers, conversion between arbitrary sampling frequencies, echo cancellation, speech coding and speech synthesis, modeling of musical instruments, etc.

## Digital Envelope Detection: The Good, the Bad, and the Ugly

Recently I've been thinking about the process of envelope detection. Tutorial information on this topic is readily available but that information is spread out over a number of DSP textbooks and many Internet web sites. The purpose of this blog is to summarize various digital envelope detection methods in one place. Here I focus of envelope detection as it is applied to an amplitude-fluctuating sinusoidal signal where the positive-amplitude fluctuations (the sinusoid's envelope) contain some sort of information. Let's begin by looking at the simplest envelope detection method.

## Digital PLL's -- Part 1

We will use Matlab to model the DPLL in the time and frequency domains (Simulink is also a good tool for modeling a DPLL in the time domain). Part 1 discusses the time domain model; the frequency domain model will be covered in Part 2. The frequency domain model will allow us to calculate the loop filter parameters to give the desired bandwidth and damping, but it is a linear model and cannot predict acquisition behavior. The time domain model can be made almost identical to the gate-level system, and as such, is able to model acquisition.

## Decimation and Interpolation with IFIR Filters

In this article, the principle of the IFIR filter is first explained and accompanied by simulation. It also shows how to use the IFIR filters efficiently in the process of decimation and interpolation. Here, too, simulations with Simulink are used to explain the subject in an understandable manner.

## A Simplified Matlab Function for Power Spectral Density

In an earlier post, I showed how to compute power spectral density (PSD) of a discrete-time signal using the Matlab function pwelch. 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 wrapper on pwelch that sets some parameters and converts the output units from W/Hz to dBW/bin. The function is named psd_simple.m, and its code is listed in the appendix.