Accelerating the pace of engineering and science

# decimate

Decimation — decrease sampling rate

## Syntax

• y = decimate(x,r) example
• y = decimate(x,r,n) example
• y = decimate(x,r,'fir')
• y = decimate(x,r,n,'fir') example

## Description

Decimation reduces the original sampling rate of a sequence to a lower rate. It is the opposite of interpolation. decimate lowpass filters the input to guard against aliasing and downsamples the result.

example

y = decimate(x,r) reduces the sampling rate of x, the input signal, by a factor of r. The decimated vector, y, is shortened by a factor of r so that length(y) = ceil(length(x)/r). By default, decimate uses a lowpass Chebyshev Type I IIR filter of order 8.

example

y = decimate(x,r,n) uses a Chebyshev filter of order n. Orders above 13 are not recommended because of numerical instability. The function displays a warning in those cases.

y = decimate(x,r,'fir') uses an FIR filter designed using the window method with a Hamming window. The filter has order 30.

example

y = decimate(x,r,n,'fir') uses an FIR filter of order n.

 Note:   For better results when r is greater than 13, divide r into smaller factors and call decimate several times.

## Input Arguments

expand all

### x — Input signalvector

Input signal, specified as a vector.

Data Types: double

### r — Decimation factorpositive integer scalar

Decimation factor, specified as a positive integer scalar.

Data Types: double

### n — Filter orderpositive integer scalar

Filter order, specified as a positive integer scalar. When using the IIR filter, avoid values above 13 because sometimes the results are unreliable.

Data Types: double

## Output Arguments

expand all

### y — Decimated signalvector

Decimated signal, returned as a vector.

Data Types: double

## Examples

expand all

### Decimate a Signal

Create a sinusoidal signal sampled at 4 kHz. Decimate it by a factor of four.

```t = 0:.00025:1;
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);
```

Plot the original and decimated signals.

```subplot 211
stem(0:120,x(1:121),'filled','markersize',3)
grid on
xlabel 'Sample number',ylabel 'Original'
subplot 212
stem(0:30,y(1:31),'filled','markersize',3)
grid on
xlabel 'Sample number',ylabel 'Decimated'
```

### Decimate a Signal Using the Chebyshev Filter

Create a signal with two sinusoids. Decimate it by a factor of 13 using a Chebyshev IIR filter of order 5. Plot the original and decimated signals.

```r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,5);
stem(lx-1:-r:0,fliplr(y),'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')
```

The original and decimated signals have matching last elements.

### Decimate a Signal Using the FIR Filter

Create a signal with two sinusoids. Decimate it by a factor of 13 using an FIR filter of order 82. Plot the original and decimated signals.

```r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,82,'fir');
stem(0:r:lx-1,y,'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')
```

The original and decimated signals have matching first elements.

expand all

### Algorithms

decimate uses decimation algorithms 8.2 and 8.3 from [1].

1. decimate creates a lowpass filter. The default is a Chebyshev Type I filter designed using cheby1. This filter has normalized cutoff frequency 0.8/r and passband ripple 0.05 dB. Sometimes, the specified filter order produces passband distortion due to roundoff errors accumulated from the convolutions needed to create the transfer function. The filter order is automatically reduced when distortion causes the magnitude response at the cutoff frequency to differ from the ripple by more than 10–6.

When the 'fir' option is chosen, decimate uses fir1 to design a lowpass FIR filter with cutoff frequency 1/r.

2. When using the FIR filter, decimate filters the input sequence in only one direction. This conserves memory and is useful for working with long sequences. In the IIR case, decimate applies the filter in forward and reverse directions using filtfilt to remove phase distortion. This in effect doubles the filter order. In both cases, the function minimizes transient effects at both ends of the signal by matching endpoint conditions.

3. Finally, decimate resamples the data by selecting every rth point from the interior of the filtered signal. The resampled sequence is such that y(end) matches x(end) when the IIR filter is used and y(1) matches x(1) in the FIR case.

## References

[1] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979, chap. 8.