Filter and resample a signal using polyphase interpolation.
upfirdn(x, h, p =1, q =1)
Arguments
x: input data, specified as a numeric vector or matrix. In case of a vector it represents a single signal; in case of a matrix each column is a signal.
h: Impulse response of the FIR filter specified as a numeric vector or matrix. If it is a vector, then it represents one FIR filter to may be applied to multiple signals in x; if it is a matrix, then each column is a separate FIR impulse response.
p: Upsampling factor, specified as a positive integer (default: 1).
q: downsampling factor, specified as a positive integer (default: 1).
Returns
output signal, returned as a vector or matrix. Each column has length ceiling(((length(x) - 1) * p + length(h)) / q).
Details
upfirdn performs a cascade of three operations:
Upsample the input data in the matrix x by a factor of the integer p (inserting zeros)
FIR filter the upsampled signal data with the impulse response sequence given in the vector or matrix h
Downsample the result by a factor of the integer q (throwing away samples)
The FIR filter is usually a lowpass filter, which you must design using another function such as fir1.
Note
This function uses a polyphase implementation, which is generally faster than using filter by a factor equal to the downsampling factor, since it only calculates the needed outputs.
Examples
x <- c(1,1,1)h <- c(1,1)## FIR filtery <- upfirdn(x, h)## FIR filter + upsamplingy <- upfirdn(x, h,5)## FIR filter + downsamplingy <- upfirdn(x, h,1,2)## FIR filter + up/downsamplingy <- upfirdn(x, h,5,2)