Accelerating the pace of engineering and science

# Documentation Center

• Trial Software

# mfilt.firfracinterp (Obsolete)

Direct-form FIR polyphase fractional interpolator

## Syntax

hm = mfilt.firfracinterp(l,m,num)

## Description

mfilt.firfracinterp will be removed in a future release. Use mfilt.firsrc instead.

hm = mfilt.firfracinterp(l,m,num) returns a direct-form FIR polyphase fractional interpolator mfilt object. l is the interpolation factor. It must be an integer. If not specified, l defaults to 3.

m is the decimation factor. Like l, it must be an integer. If you do not specify m in the calling syntax, it defaults to 1. If you also do not specify a value for l, m defaults to 2.

num is a vector containing the coefficients of the FIR lowpass filter used for interpolation. If omitted, a lowpass Nyquist filter of gain l and cutoff frequency of π/max(l,m) is used by default.

By specifying both a decimation factor and an interpolation factor, you can interpolate your input signal by noninteger amounts. The fractional interpolator first interpolates the input, then decimates to result in an output signal whose sample rate is l/m of the input rate. For proper interpolation, you specify l to be greater than m. By default, the resulting interpolation factor is 3/2 when you do not provide l and m in the calling syntax.

### Input Arguments

The following table describes the input arguments for creating hm.

Input Argument

Description

l

Interpolation factor for the filter. l specifies the amount to increase the input sampling rate. It must be an integer. When you do not specify a value for l it defaults to 3.

num

Vector containing the coefficients of the FIR lowpass filter used for interpolation. When num is not provided as an input, firfracinterp uses a lowpass Nyquist filter with gain equal to l and cutoff frequency equal to π/max(l,m) by default.

m

Decimation factor for the filter. m specifies the amount to reduce the sampling rate of the input signal. It must be an integer. When you do not specify a value for m it defaults to 1. When you do not specify l as well, m defaults to 2.

### mfilt.firfracinterp Object Properties

Every multirate filter object has properties that govern the way it behaves when you use it. Note that many of the properties are also input arguments for creating mfilt.firfracinterp objects. The next table describes each property for an mfilt.firfracinterp filter object.

Name

Values

Description

FilterStructure

Reports the type of filter object. You cannot set this property — it is always read only and results from your choice of mfilt object.

Numerator

Vector containing the coefficients of the FIR lowpass filter used for interpolation.

RateChangeFactors

[l,m]

Reports the decimation (m) and interpolation (l) factors for the filter object. Combining these factors results in the final rate change for the signal.

PersistentMemory

false or true

Determines whether the filter states are restored to their starting values for each filtering operation. The starting values are the values in place when you create the filter if you have not changed the filter since you constructed it. PersistentMemory returns to the default values any state that the filter changes during processing. States that the filter does not change are not affected.

States

Matrix

Stored conditions for the filter, including values for the interpolator and comb states.

## Examples

To convert a signal from 32 kHz to 48 kHz requires fractional interpolation. This example uses the mfilt.firfracinterp object to upsample an input signal. Setting l = 3 and m = 2 returns the same mfilt object as the default mfilt.firfracinterp object.

```l  = 3; m = 2;               % Interpolation/decimation factors.
hm = mfilt.firfracinterp(l,m);    % We use the default filter
fs = 32e3;                   % Original sample freq: 32 kHz.
n = 0:6799;                  % 6800 samples, 0.212 second long signal
x  = sin(2*pi*1e3/fs*n);     % Original signal, sinusoid at 1 kHz
y = filter(hm,x);            % 10200 samples, still 0.212 seconds
stem(n(1:32)/fs,x(1:32),'filled') % Plot original sampled at
% 32 kHz
hold on;
% Plot fractionally interpolated signal (48 kHz) in red
stem(n(1:48)/(fs*l/m),y(20:67),'r')
xlabel('Time (sec)');ylabel('Signal Value')```

The ability to interpolate by fractional amounts lets you raise the sampling rate from 32 to 48 kHz, something you cannot do with integral interpolators. Both signals appear in the following figure.