Overlap-add FIR polyphase interpolator
hm = mfilt.fftfirinterp(l,num,bl)
hm = mfilt.fftfirinterp
hm = mfilt.fftfirinterp(l,...)
The input arguments are optional. To enter any optional value, you must include all optional values to the left of your desired value.
When you omit one or more input options, the omitted option applies the default values shown in the table below.
The number of FFT points is given by [bl+ceil(length(num)/l)-1]. It is to your advantage to choose bl such that the number of FFT points is a power of two—using powers of two can improve the efficiency of the FFT and the associated interpolation process.
The following table describes the input arguments for creating hm.
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 2.
Vector containing the coefficients of the FIR lowpass filter used for interpolation. When num is not provided as an input, fftfirinterp uses a lowpass Nyquist filter with gain equal to l and cutoff frequency equal to π/l by default.
Length of each block of input data used in the filtering. bl must be an integer. When you omit input bl, it defaults to 100
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.fftfirinterp objects. The next table describes each property for an mfilt.fftfirinterp filter object.
Reports the type of filter object. You cannot set this property — it is always read only and results from your choice of mfilt object.
Vector containing the coefficients of the FIR lowpass filter used for interpolation.
Interpolation factor for the filter. It specifies the amount to increase the input sampling rate. It must be an integer.
Length of each block of input data used in the filtering.
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.
Stored conditions for the filter, including values for the interpolator states.
Interpolation by a factor of 8. This object removes the spectral replicas in the signal after interpolation.
l = 8; % Interpolation factor hm = mfilt.fftfirinterp(l); % We use the default filter n = 8192; % Number of points hm.blocklength = n; % Set block length to number of points fs = 44.1e3; % Original sample freq: 44.1 kHz. n = 0:n-1; % 0.1858 secs of data x = sin(2*pi*n*22e3/fs); % Original signal, sinusoid at 22 kHz y = filter(hm,x); % Interpolated sinusoid xu = l*upsample(x,8); % Upsample to compare--the spectrum % does not change [px,f]=periodogram(xu,,65536,l*fs);% Power spectrum of original % signal [py,f]=periodogram(y,,65536,l*fs); % Power spectrum of % interpolated signal plot(f,10*log10(([fs*px,l*fs*py]))) legend('22 kHz sinusoid sampled at 44.1 kHz',... '22 kHz sinusoid sampled at 352.8 kHz') xlabel('Frequency (Hz)'); ylabel('Power Spectrum');
To see the results of the example, look at this figure.