Decimate signal using cascaded integrator-comb filter
DSP System Toolbox / Filtering / Multirate Filters
The CIC Decimation block performs a sample rate decrease (decimation) on an input signal by an integer factor. Cascaded Integrator-Comb (CIC) filters are a class of linear phase FIR filters comprised of a comb part and an integrator part.
The block supports real and complex fixed-point inputs. In its normal mode of operation, the CIC Decimation block allows the adder’s numeric values to overflow and wrap around [1] [3]. The Fixed-Point infrastructure then causes overflow warnings to appear on the command line. This overflow is of no consequence.
The CIC Decimation block requires a Fixed-Point Designer™ license.
Port_1
— Input signalData input, specified as a vector or matrix. The number of input rows must be a multiple of the decimation factor.
If the input is fixed-point, it must be signed integer or signed fixed point with power-of-two slope and zero bias.
Data Types: int8
| int16
| int32
| int64
| fixed point
Complex Number Support: Yes
Port_1
— CIC decimated outputCIC decimated output, returned as a vector or a matrix. The data type of the output is determined by the settings in the block dialog. The complexity of the output matches that of the input. The number of output rows is (1/R)✕Num, where R is the decimation factor and Num is the number of input rows.
Data Types: int8
| int16
| int32
| int64
| fixed point
Complex Number Support: Yes
Coefficient source
— Source of the filter informationDialog parameters
(default) | Filter object
Source of the filter information, specified as one of the following:
Dialog parameters
— Enter information about
the filter, such as Decimation factor (R),
Differential delay (M) and Number of sections
(N), in the block dialog.
Filter object
— Specify the filter using a
dsp.CICDecimator
System
object™.
Different items appear on the CIC Decimation block dialog depending
on whether you select Dialog parameters
or
Filter object
in the Coefficient
source parameter.
Decimation factor (R)
— Decimation factor2
(default) | integerDecimation factor of the filter, specified as an integer greater than 1.
This parameter appears when you set Coefficient source to
Dialog parameters
.
Differential Delay (M)
— Differential delay1
(default) | positive integerSpecify the differential delay of the comb part of the filter, M, as a positive integer. For more details, see CIC Filter Structure.
This parameter appears when you set Coefficient source to
Dialog parameters
.
Number of sections (N)
— Number of filter sections2
(default) | positive integerSpecify the number of filter sections. The number you specify determines the number of sections in either the comb part of the filter or the integrator part of the filter. This value does not represent the total number of sections in the comb and integrator parts combined.
This parameter appears when you set Coefficient source to
Dialog parameters
.
Data type specification mode
— Specify word length and fraction length of filter sections and outputFull precision
(default) | Minimum section word lengths
| Specify word lengths
| Binary point scaling
Choose how you specify the fixed-point word length and fraction length of the filter sections and/or output:
Full precision
— The word and fraction
lengths of the filter sections and outputs are automatically selected for you. All
word lengths (WL) are set to:
where,
I –– Input word length
M –– Differential delay
N –– Number of sections
R –– Decimation factor
All fraction lengths are set to the input fraction length.
Minimum section word lengths
— Specify the
word length of the filter output in the Output word length
parameter. The block automatically selects the word lengths of the filter sections
and all fraction lengths such that each of the section word lengths is as small as
possible. The precision of each filter section is less than in Full
precision
mode, but the range of each section is preserved.
Specify word lengths
— Specify the word
lengths of the filter sections and output in the Section word
lengths and Output word length parameters. The
block automatically selects fraction lengths for the filter sections and output
such that the range of each section is preserved when the least significant bits
are discarded.
Binary point scaling
— Specify the word and
fraction lengths of the filter sections and output in the Section word
lengths, Section fraction lengths,
Output word length, and Output fraction
length parameters.
This parameter appears when you set Coefficient source to
Dialog parameters
.
Section word lengths
— Word length of filter sections16 16 16 16
] (default) | scalar | row vectorWord lengths of filter sections, specified as a scalar or a vector of length equal to 2N, where N is the number of filter sections. The section word length must be in the range [2, 128].
This parameter appears when you set Coefficient source to
Dialog parameters
and Data type specification
mode to either Specify word lengths
or
Binary point scaling
.
Section fraction lengths
— Fraction lengths of filter sections0
(default) | integerFraction lengths of filter sections, specified as an integer.
This parameter appears when you set Coefficient source to
Dialog parameters
and Data type specification
mode to Binary point scaling
.
Output word length
— Word length of filter output32
(default) | integerWord length of the filter output, specified as an integer in the range [2, 128].
This parameter appears when you set Coefficient source to
Dialog parameters
and Data type specification
mode to any option other than Full
precision
.
Output fraction length
— Fraction length of filter output0
(default) | integerFraction length of the filter output, specified as an integer.
This parameter appears when you set Coefficient source to
Dialog parameters
and Data type specification
mode to Binary point scaling
.
Rate options
— Rate processing ruleEnforce single-rate processing
(default) | Allow multirate processing
Specify the rate processing rule for the block:
Enforce single-rate processing
— The block
performs frame-based processing and produces an output that has the same sample rate
as the input. To decimate the signal while maintaining the input sample rate, the
block decreases the output frame size. In this mode, the input column size must be a
multiple of Decimation Factor (R).
Allow multirate processing
— The block
performs sample-based processing. In this mode, the block produces an output with a
sample rate that is R
times slower than the input sample
rate.
Filter object
— Multirate filter objectdsp.CICDecimator
Specify the name of the multirate filter object that you want the block to
implement. You must specify the filter as a dsp.CICDecimator
System
object.
You can define the System object in the block dialog or in a MATLAB® workspace variable.
For information on creating System objects, see Define Basic System Objects (MATLAB).
This parameter appears when you set Coefficient source to
Filter object
.
View Filter Response
— View filter responsegui button
This button opens the Filter Visualization Tool (fvtool
) from the Signal
Processing Toolbox™ product and displays the filter response of the filter defined in the
block. For more information on FVTool, see the Signal
Processing Toolbox documentation.
If you specify a filter in the Filter object parameter, you must apply the filter by clicking the Apply button before using the View Filter Response button.
Data Types |
|
Multidimensional Signals |
|
Variable-Size Signals |
|
The transfer function of a CIC decimation filter is
where
HI is the transfer function of the integrator part of the filter.
HC is the transfer function of the comb part of the filter.
N is the number of sections. The number of sections in a CIC filter is defined as the number of sections in either the comb part or the integrator part of the filter. This value does not represent the total number of sections throughout the entire filter.
R is the decimation factor.
M is the differential delay.
The CIC Decimation block has the following CIC filter structure. The structure consists of N sections of cascaded integrators, followed by a rate change by a factor R, followed by N sections of cascaded comb filters [1] .
The unit delay in the integrator portion of the CIC Filter can be located in either the feed-forward or the feedback path. These two configurations yield an identical filter frequency response. However, the numerical outputs from these two configurations are different due to the latency. This block puts the unit delay in the feed-forward path of the integrator because the configuration is preferred for HDL implementation.
[1] Hogenauer, E.B. “An Economical Class of Digital Filters for Decimation and Interpolation.” IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 29, Number 2, 1981, pp. 155–162.
[2] Meyer-Baese, U. Digital Signal Processing with Field Programmable Gate Arrays. New York: Springer Verlag, 2001.
[3] Harris, Fredric J., Multirate Signal Processing for Communication Systems. Upper Saddle River, NJ: Prentice Hall PTR, 2004.
Generated code relies on memcpy
or
memset
functions (string.h
) under certain
conditions.
HDL Coder™ provides additional configuration options that affect HDL implementation and synthesized logic.
HDL Coder supports Coefficient source options Dialog parameters and Filter object.
When you use AddPipelineRegisters, registers are placed based on the filter structure. The pipeline register placement determines the latency.
Pipeline Register Placement | Latency (clock cycles) |
---|---|
A pipeline register is added between the comb stages of the differentiators. | NS-1 , where NS is number of sections
(at the output side). |
AddPipelineRegisters | Insert a pipeline register between stages of computation in a filter. See also AddPipelineRegisters (HDL Coder). |
ConstrainedOutputPipeline | Number of registers to place at
the outputs by moving existing delays within your design. Distributed
pipelining does not redistribute these registers. The default is
|
InputPipeline | Number of input pipeline stages
to insert in the generated code. Distributed pipelining and constrained
output pipelining can move these registers. The default is
|
OutputPipeline | Number of output pipeline stages
to insert in the generated code. Distributed pipelining and constrained
output pipelining can move these registers. The default is
|
Vector and frame inputs are not supported for HDL code generation.
When you select Dialog parameters, the Filter
Structure option Zero-latency decimator
is not
supported for HDL code generation. From the Filter Structure
drop-down list, select Decimator
.
If the input is fixed point, it must be signed integer or signed fixed point with power-of-two slope and zero bias.
dsp.CICCompensationDecimator
| dsp.CICCompensationInterpolator
| dsp.CICDecimator
| dsp.CICInterpolator
| dsp.FIRDecimator
| dsp.FIRHalfbandDecimator
| dsp.FIRHalfbandInterpolator
| dsp.FIRInterpolator