cic_process

Resampling and filtering of a signal

Calling sequence

[cic,y] = cic_process(cic, x)

Parameters

cic:

CIC filter object, as created by cic_init

x:

input signal (1d column vector), sampled at frequency

y:

output signal (1d column vector), sampled at frequency (for decimation) or (for upsampling)

Description

This function take as input 1d vector x of size , and outputs about (if a decimating filter was configured) or (if an upsampling filter was configured) samples in the vector y. The context is saved in the cic object.

Before computing, the input vector x will be truncated as a int32 vector, as a CIC filter can only process integer or fixed point samples (no floating point). So, it is recommended to scale accordingly the data before calling the filter.

Example 1: decimation

// Input sampling frequency = 10 MHz
fs = 10e6;
// Decimate by 16 (e.g. output sample frequency = 625 KHz)
R = 16; N = 4;
// Creation of the CIC filter
cic = cic_init(R, N);
;
// Build a signal which is the superposition of 2 pure sine wave:
//  - one at 2 MHz
//  - one at 20 KHz
t = (0:1/fs:1e-3); // 1 ms time slot
f1 = 2e6; f2 = 20e3;
x = sin(t*2*%pi*f1) + sin(t*2*%pi*f2);
// Scale the data to 16 bit precision
x = int32(x * 32768);
// Decimation by ratio 1/R
[cic,xd] = cic_process(cic,x);

Input and output of the CIC decimation filter (note the disparition of the high frequency component in the output).

Example 2: upsampling

// Upsample by 16 (e.g. output sample frequency = 625 KHz)
R = 16; N = 4;
fs = (10e6)/R; // Input sampling frequency = 10 MHz / 16
// Creation of the CIC filter
cic = cic_init(R, N, 1, 'u');
// Build a signal pure sine wave at 50 KHz
t = ((0:1/fs:1e-4))'; // 100 Ás time slot
f = 50e3;
x = 32768 * sin(t*2*%pi*f);
;
// Upsampling by ratio R
[cic,xd] = cic_process(cic,x);

Input and output of the CIC upsampling (interpolation) filter.