Documentation Center

  • Trial Software
  • Product Updates

Contents

mfilt.firfracdecim (Obsolete)

Direct-form FIR polyphase fractional decimator

Syntax

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

Description

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

hm = mfilt.firfracdecim(l,m,num) returns a direct-form FIR polyphase fractional decimator. Input argument l is the interpolation factor. l must be an integer. When you omit l in the calling syntax, it defaults to 2. m is the decimation factor. It must be an integer. If not specified, it defaults to l+1.

num is a vector containing the coefficients of the FIR lowpass filter used for decimation. If you omit num, 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 decimate your input signal by noninteger amounts. The fractional decimator first interpolates the input, then decimates to result in an output signal whose sample rate is l/m of the input rate. By default, the resulting decimation factor is 2/3 when you do not provide l and m in the calling syntax. Specify l smaller than m for proper decimation.

Input Arguments

The following table describes the input arguments for creating hm.

Input Argument

Description

l

Interpolation factor for the filter. It must be an integer. When you do not specify a value for l it defaults to 2.

num

Vector containing the coefficients of the FIR lowpass filter used for decimation. When num is not provided as an input, firfracdecim 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 l + 1.

mfilt.firfracdecim 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.firfracdecim objects. The next table describes each property for an mfilt.firfracdecim filter object.

Name

Values

Description

FilterStructure

String

Reports the type of filter object, such as a decimator or fractional decimator. You cannot set this property — it is always read only and results from your choice of mfilt object.

InputOffsetIntegersContains the number of input data samples processed without generating an output sample. The default value is 0.

Numerator

Vector

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 zero any state that the filter changes during processing. States that the filter does not change are not affected.

States

Matrix

Stored conditions for the delays between each interpolator phase, the filter states, and the states at the output of each phase in the filter.

The number of states is (lh-1)*m+(l-1)*(lo+mo) where lh is the length of each subfilter, and l and m are the interpolation and decimation factors. lo and mo, the input and output delays between each interpolation phase, are integers from Euclid's theorem such that lo*l-mo*m = -1 (refer to the reference for more details). Use euclidfactors to get lo and mo for an mfilt.firfracdecim object

Examples

To demonstrate firfracdecim, perform a fractional decimation by a factor of 2/3. This is one way to downsample a 48 kHz signal to 32 kHz, commonly done in audio processing.

l  = 2; m = 3;                % Interpolation/decimation factors.
hm = mfilt.firfracdecim(l,m); % We use the default
fs = 48e3;                    % Original sample freq: 48 kHz.
n  = 0:10239;                 % 10240 samples, 0.213 second long 
                              % signal
x  = sin(2*pi*1e3/fs*n);      % Original signal, sinusoid at 1 kHz
y  = filter(hm,x);            % 9408 samples, still 0.213 seconds
stem(n(1:49)/fs,x(1:49)); hold on; % Plot original signal sampled 
                                   % at 48 kHz
stem(n(1:32)/(fs*l/m),y(13:44),'r','filled') % Plot decimated 
                                             % signal at 32 kHz
xlabel('Time (sec)');

As shown, the plot clearly demonstrates the reduced sampling frequency of 32 kHz.

References

Fliege, N.J., Multirate Digital Signal Processing, John Wiley & Sons, Ltd., 1994

See Also

| |

Was this topic helpful?