# Finite Impulse Reseponse Interpolator (firinterp)

The interp object implements a basic interpolator with an integer output-to-input resampling ratio. An example of the interp interface is listed below.


#include <liquid/liquid.h>

int main() {
unsigned int M=4;       // interpolation factor
unsigned int h_len;     // interpolation filter length

// design filter and create interpolator
float h[h_len];         // filter coefficients
firinterp_crcf q = firinterp_crcf_create(M,h,h_len);

// generate input signal and interpolate
float complex x;        // input sample
float complex y[M];     // output samples

// run interpolator (repeat as necessary)
{
firinterp_crcf_execute(q, x, y);
}

// destroy the interpolator object
firinterp_crcf_destroy(q);
}


Listed below is the full interface to the interp family of objects. While each method is listed for firinterp_crcf , the same functionality applies to interp_rrrf and interp_cccf .

• firinterp_crcf_create(M,*h,N) creates an interp object with an interpolation factor $$M$$ using $$N$$ filter coefficients $$\vec{h}$$ .
• firinterp_crcf_create_prototype(M,m,As) create an interp object using a filter prototype designed using the firdes_kaiser_window() method (see [section-filter-firdes] ) with a normalized cut-off frequency $$1/2M$$ , a filter length of $$2Mm$$ coefficients, and a stop-band attenuation of $$A_s$$ dB.
• firinterp_crcf_create_rnyquist(type,k,m,beta,dt) creates an interp object from a square-root Nyquist filter prototype with $$k$$ samples per symbol (interpolation factor), $$m$$ symbols of delay, $$\beta$$ excess bandwidth, and a fractional sampling interval $$\Delta t$$ . [section-filter-firdes-rnyquist] provides a detailed description of the available square-root Nyquist filter prototypes available in liquid.
• firinterp_crcf_destroy(q) destroys the interpolator, freeing all internally-allocated memory.
• firinterp_crcf_print(q) prints the internal properties of the interpolator to the standard output.
• firinterp_crcf_clear(q) clears the internal interpolator buffers.
• firinterp_crcf_execute(q,x,*y) executes the interpolator for an input $$x$$ , storing the result in the output array $$y$$ (which has a length of $$M$$ samples).

Figure [fig-filter-firinterp_crcf]. firinterp_crcf (interpolator) example with $$M=4$$ , compensating for filter delay.

A graphical example of the interpolator can be seen in [fig-filter-firinterp_crcf] . A detailed example program is given in examples/firinterp_crcf_example.c , located under the main liquid project directory.