dsp.FIRFilter
Static or timevarying FIR filter
Description
The dsp.FIRFilter
System object™ filters each channel of the input using static or timevarying FIR filter
implementations.
To filter each channel of the input:
Create the
dsp.FIRFilter
object and set its properties.Call the object with arguments, as if it were a function.
To learn more about how System objects work, see What Are System Objects?
Under specific conditions, this System object also supports SIMD code generation. For details, see Code Generation.
Creation
Description
returns a finite impulse
response (FIR) filter object, fir
= dsp.FIRFilterfir
, which independently filters each
channel of the input over time using a specified FIR filter implementation.
returns an FIR filter System object, fir
= dsp.FIRFilter(num
)fir
, with the Numerator
property
set to num
.
returns an FIR filter System object, fir
= dsp.FIRFilter(Name,Value
)fir
, with each property set to the specified
value.
Properties
Unless otherwise indicated, properties are nontunable, which means you cannot change their
values after calling the object. Objects lock when you call them, and the
release
function unlocks them.
If a property is tunable, you can change its value at any time.
For more information on changing property values, see System Design in MATLAB Using System Objects.
Structure
— Filter structure
Direct form
(default)  Direct form symmetric
 Direct form antisymmetric
 Direct form transposed
 Lattice MA
Specify the filter structure. You can specify the filter structure as one of
Direct form
 Direct form symmetric

Direct form antisymmetric
 Direct form
transposed
 Lattice MA
.
NumeratorSource
— Source of filter coefficients
Property
(default)  Input port
Specify the source of the filter coefficients as Property
or
Input port
. When you specify Input port
, the
filter object updates the timevarying filter once every frame.
Dependencies
This applies when you set the Structure
to
Direct form
 Direct form symmetric

Direct form antisymmetric
 Direct form
transposed
.
ReflectionCoefficientsSource
— Source of filter coefficients
Property
(default)  Input port
Specify the source of the Lattice filter coefficients as Property
or Input port
. When you specify Input port
, the
filter object updates the timevarying filter once every frame.
Dependencies
This applies when you set the Structure
to
Lattice MA
.
Numerator
— Numerator coefficients
[0.5 0.5]
(default)  row vector
Specify the filter coefficients as a real or complex numeric row vector.
Tunable: Yes
Dependencies
This property applies when you set the NumeratorSource
property to Property
, and the Structure property is set to Direct
form
, Direct form symmetric
, Direct form
antisymmetric
, or Direct form transposed
.
Data Types: single
 double
 int8
 int16
 int32
 int64
 uint8
 uint16
 uint32
 uint64
Complex Number Support: Yes
ReflectionCoefficients
— Reflection coefficients of lattice filter structure
[0.5 0.5]
(default)  row vector
Specify the reflection coefficients of a lattice filter as a real or complex numeric row vector.
Tunable: Yes
Dependencies
This property applies when you set the Structure property to Lattice
MA
, and the ReflectionCoefficientsSource
property to
Property
.
Data Types: single
 double
 int8
 int16
 int32
 int64
 uint8
 uint16
 uint32
 uint64
Complex Number Support: Yes
InitialConditions
— Initial conditions for the FIR filter
0
(default)  scalar  vector  matrix
Specify the initial conditions of the filter states. The number of states or delay elements equals the number of reflection coefficients for the lattice structure, or the number of filter coefficients–1 for the other direct form structures.
You can specify the initial conditions as a scalar, vector, or matrix. If you specify a scalar value, the FIR filter object initializes all delay elements in the filter to that value. If you specify a vector whose length equals the number of delay elements in the filter, each vector element specifies a unique initial condition for the corresponding delay element. The object applies the same vector of initial conditions to each channel of the input signal.
If you specify a vector whose length equals the product of the number of input channels and the number of delay elements in the filter, each element specifies a unique initial condition for the corresponding delay element in the corresponding channel.
If you specify a matrix with the same number of rows as the number of delay elements in the filter, and one column for each channel of the input signal, each element specifies a unique initial condition for the corresponding delay element in the corresponding channel.
Tunable: Yes
Data Types: single
 double
 int8
 int16
 int32
 int64
 uint8
 uint16
 uint32
 uint64
FixedPoint Properties
FullPrecisionOverride
— Full precision override for fixedpoint arithmetic
true
(default)  false
Specify whether to use full precision rules. If you set FullPrecisionOverride
to true
, which is the default,
the object computes all internal arithmetic and output data types using full precision
rules. These rules provide the most accurate fixedpoint numerics. It also turns off
the display of other fixedpoint properties because they do not apply individually.
These rules guarantee that no quantization occurs within the object. Bits are added,
as needed, to ensure that no roundoff or overflow occurs. If you set FullPrecisionOverride
to false
,
fixedpoint data types are controlled through individual fixedpoint property
settings. For more information, see Full Precision for FixedPoint System Objects.
RoundingMethod
— Rounding method for fixedpoint operations
Floor
(default)  Ceiling
 Convergent
 Nearest
 Round
 Simplest
 Zero
Specify the rounding method.
Dependencies
This property applies only if the object is not in full precision mode.
OverflowAction
— Overflow action for fixedpoint operations
Wrap
(default)  Saturate
Specify the overflow action as Wrap
or
Saturate
.
Dependencies
This property applies only if the object is not in full precision mode.
CoefficientsDataType
— Coefficients word and fraction lengths
Same word length as input
(default)  Custom
Specify the coefficients fixedpoint data type as Same word length as
input
or Custom
.
Dependencies
This property applies when you set the NumeratorSource
property to Property
.
CustomCoefficientsDataType
— Custom coefficients word and fraction lengths
numerictype(true,16,15)
(default)  numerictype
Specify the coefficients fixedpoint type as a signed or unsigned numerictype
(FixedPoint Designer) object.
Dependencies
This property applies when you set the CoefficientsDataType
property to Custom
.
ReflectionCoefficientsDataType
— Reflection coefficients word and fraction lengths
Same word length as input
(default)  Custom
Specify the reflection coefficients fixedpoint data type as Same word
length as input
or Custom
.
Dependencies
This property applies when you set the
ReflectionCoefficientsSource
property to
Property
.
CustomReflectionCoefficientsDataType
— Custom reflection coefficients word and fraction lengths
numerictype(true,16,15)
(default)  numerictype
Specify the reflection coefficients fixedpoint type as a signed or unsigned
numerictype
(FixedPoint Designer) object.
Dependencies
This property applies when you set the
ReflectionCoefficientsDataType
property to
Custom
.
ProductDataType
— Product word and fraction lengths
Full precision
(default)  Same as input
 Custom
Specify the product fixedpoint data type as Full precision
,
Same as input
, or Custom
.
CustomProductDataType
— Custom product word and fraction lengths
numerictype(true,32,30)
(default)  numerictype
Specify the product fixedpoint type as a signed or unsigned scaled numerictype
(FixedPoint Designer) object.
Dependencies
This property applies when you set the ProductDataType
property to Custom
.
AccumulatorDataType
— Accumulator word and fraction lengths
Full precision
(default)  Same as input
 Same as product
 Custom
Specify the accumulator fixedpoint data type to Full
precision
, Same as input
, Same as
product
, or Custom
.
CustomAccumulatorDataType
— Custom accumulator word and fraction lengths
numerictype(true,32,30)
(default)  numerictype
Specify the accumulator fixedpoint type as a signed or unsigned scaled numerictype
(FixedPoint Designer) object.
Dependencies
This property applies when you set the AccumulatorDataType
property to Custom
.
StateDataType
— State word and fraction lengths
Same as accumulator
(default)  Same as input
 Custom
Specify the state fixedpoint data type as one of Same as
input
, Same as accumulator
, or
Custom
.
Dependencies
This property does not apply to any of the direct form or direct form I filter structures.
CustomStateDataType
— Custom state word and fraction lengths
numerictype(true,16,15)
(default)  numerictype
Specify the state fixedpoint type as a signed or unsigned scaled numerictype
(FixedPoint Designer) object.
Dependencies
This property applies when you set the StateDataType
property to Custom
.
OutputDataType
— Output word and fraction lengths
Same as accumulator
(default)  Same as input
 Custom
Specify the output fixedpoint data type as one of Same as
input
, Same as accumulator
, or
Custom
.
CustomOutputDataType
— Custom output word and fraction lengths
numerictype(true,16,15) (default)  numerictype
Specify the output fixedpoint type as a signed or unsigned scaled numerictype
(FixedPoint Designer) object.
Dependencies
This property applies when you set the OutputDataType property to
Custom
.
Usage
Description
Input Arguments
x
— Data input
vector  matrix
Data input, specified as a vector or a matrix. When the input data is of a
fixedpoint type, it must be signed when the structure is set to Direct form
symmetric
or Direct form antisymmetric
. The FIR filter
object operates on each channel of the input signal independently over successive
calls to the object.
This System object supports variablesize input.
Data Types: single
 double
 int8
 int16
 int32
 uint8
 uint16
 uint32
 fi
Complex Number Support: Yes
coeff
— Filter coefficients
row vector
Timevarying filter coefficients, specified as a row vector. The data and coefficient inputs must have the same data type.
Data Types: single
 double
 int8
 int16
 int32
 uint8
 uint16
 uint32
 fi
Complex Number Support: Yes
Output Arguments
y
— Filtered output
vector  matrix
Filtered output, returned as a vector or a matrix. The output has the same size and data type as the input.
Data Types: single
 double
 int8
 int16
 int32
 uint8
 uint16
 uint32
 fi
Complex Number Support: Yes
Object Functions
To use an object function, specify the
System object as the first input argument. For
example, to release system resources of a System object named obj
, use
this syntax:
release(obj)
Specific to dsp.FIRFilter
freqz  Frequency response of discretetime filter System object 
fvtool  Visualize frequency response of DSP filters 
impz  Impulse response of discretetime filter System object 
info  Information about filter System object 
coeffs  Returns the filter System object coefficients in a structure 
cost  Estimate cost of implementing filter System object 
grpdelay  Group delay response of discretetime filter System object 
generatehdl  Generate HDL code for quantized DSP filter (requires Filter Design HDL Coder) 
Examples
Lowpass Filter a Sinusoid Signal Using FIRFilter object
Use an FIR filter to apply a low pass filter to a waveform with two sinusoidal components.
t = (0:1000)'/8e3; xin = sin(2*pi*0.3e3*t)+sin(2*pi*3e3*t); sr = dsp.SignalSource; sr.Signal = xin; sink = dsp.SignalSink; fir = dsp.FIRFilter(fir1(10,0.5)); sa = spectrumAnalyzer(... 'SampleRate',8e3,... 'Method','welch',... 'PlotAsTwoSidedSpectrum',false,... 'OverlapPercent',80,... 'SpectrumUnits','dBW',... 'YLimits',[150 10]); while ~isDone(sr) input = sr(); filteredOutput = fir(input); sink(filteredOutput); sa(filteredOutput) end
filteredResult = sink.Buffer;
fvtool(fir,'Fs',8000)
Design an FIR filter as a System object.
N = 10; Fc = 0.4; B = fir1(N,Fc); fir1 = dsp.FIRFilter(B); fvtool(fir1)
This can also be achieved by using fdesign
as a constructor and design
to design the filter.
N = 10; Fc = 0.4; specLowpass = fdesign.lowpass('N,Fc',... N,Fc); fir2 = design(specLowpass,... 'systemobject',true)
fir2 = dsp.FIRFilter with properties: Structure: 'Direct form' NumeratorSource: 'Property' Numerator: [1.2414e18 0.0126 0.0247 0.0635 0.2748 0.3981 ... ] InitialConditions: 0 Show all properties
fvtool(fir2);
Algorithms
This object implements the algorithm, inputs, and outputs described on the Discrete FIR Filter (Simulink) block reference page. The object properties correspond to the block parameters.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Only the
Numerator
property is tunable for code generation.See System Objects in MATLAB Code Generation (MATLAB Coder).
The dsp.FIRFilter
System object supports SIMD code generation using Intel AVX2 technology under these
conditions:
Filter structure is set to
'Direct form'
or'Direct form transposed'
.Input signal is realvalued with real filter coefficients.
Input signal is complexvalued with real or complex filter coefficients.
Input signal has a data type of
single
ordouble
.
The SIMD technology significantly improves the performance of the generated code.
HDL Code Generation
Generate Verilog and VHDL code for FPGA and ASIC designs using HDL Coder™.
This object supports HDL code generation with the HDL Coder™ or Filter Design HDL Coder™ products. For HDL Coder workflow and limitations, see HDL Code Generation for System Objects (HDL Coder). For Filter Design HDL Coder workflow and limitations, see Generate HDL Code for Filter System Objects (Filter Design HDL Coder).
Version History
See Also
Functions
freqz
fvtool
impz
info
coeffs
cost
grpdelay
generatehdl
designFracDelayFIR
Objects
Blocks
 Discrete FIR Filter (Simulink)
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 United Kingdom (English)