This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materials including this page, select Japan from the country navigator on the bottom of this page.

dsp.FrequencyDomainAdaptiveFilter System object

Frequency Domain Adaptive filter


The dsp.FrequencyDomainAdaptiveFilter computes output, error, and coefficients using a frequency domain FIR adaptive filter.

To implement the adaptive FIR filter object:

  1. Define and set up your adaptive FIR filter object. See Construction.

  2. Call step to implement the filter according to the properties of dsp.FrequencyDomainAdaptiveFilter. The behavior of step is specific to each object in the toolbox.


Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.


fdaf = dsp.FrequencyDomainAdaptiveFilter returns a frequency domain FIR adaptive filter System object, fdaf. This System object is used to compute the filtered output and the filter error for a given input and desired signal.

fdaf = dsp.FrequencyDomainAdaptiveFilter('PropertyName', PropertyValue,...) returns an FrequencyDomainAdaptiveFilter System object, fdaf, with each specified property set to the specified value.

fdaf = dsp.FrequencyDomainAdaptiveFilter(LEN,'PropertyName',PropertyValue,...) returns an FrequencyDomainAdaptiveFilter System object, fdaf, with the Length property set to LEN and other specified properties set to the specified values.



Method to calculate filter coefficients

Specify the method used to calculate filter coefficients as one of 'Constrained FDAF' |'Unconstrained FDAF'. The default is 'Constrained FDAF'. For algorithms on how to implement this filter and its three methods, refer to [1]. This property is nontunable.


Length of filter coefficients vector

Specify the length of the FIR filter coefficients vector as a positive integer value. This property is nontunable.

The default value is 32.


Block length for coefficient updates

Specify the block length of the coefficients updates as a positive integer value. The length of the input vectors must be divisible by the BlockLength property value. For faster execution, the sum of the length property value and the BlockLength property value should be a power of two. The default value is the value of Length. This property is nontunable.


Adaptation step size

Specify the adaptation step size factor as a positive numeric scalar less than or equal to 1. Setting the StepSize property equal to 1 provides the fastest convergence during adaptation. The default is 1. This property is tunable.


Adaptation leakage factor

Specify the leakage factor used in leaky adaptive filter as a scalar numeric value between 0 and 1, both inclusive. When the value is less than 1, the System object implements a leaky adaptive algorithm. The default is 1, providing no leakage in the adapting method. This property is tunable.


Averaging factor of energy estimator

Specify the averaging factor used to compute the exponentially windowed FFT input signal powers for the coefficient updates as a scalar positive numeric value less than or equal to 1. The default value is 0.9. This property is tunable.


Offset for normalization terms

Specify the offset for the normalization terms in the coefficient updates as a scalar nonnegative numeric value. Use this property to avoid divide by zero or divide by very small numbers. This situation occurs if any of the FFT input signal powers becomes very small. The default value is 0. This property is tunable.


Initial FFT input signal power

Specify the initial common value of all of the FFT input signal powers as a scalar positive numeric value. The default is 1. This property is tunable.


Time-domain initial coefficients of the filter

Specify the initial time-domain coefficients of the adaptive filter as a scalar or a vector of length equal to the Length property value. The adaptive filter object uses these coefficients to compute the initial frequency-domain filter coefficients. The default is 0. This property is tunable.


Locked status of coefficient updates

Specify whether to lock the filter coefficient values. By default, the value of this property is false, and the object continuously updates the filter coefficients. If this property is set to true, the filter coefficients do not update and their values remain the same.

This property is tunable.


Current FFT coefficients of the filter

This property stores the current discrete Fourier transform of the filter coefficients as a row vector. The length of this vector is equal to the sum of the Length value and the BlockLength value. This property is initialized to the FFT values of the InitialCoefficients property. To get the discrete Fourier transform of the filter coefficients, call the object, and access the FFTCoefficients property of the object.


resetReset filter states for Frequency Domain Adaptive filter
stepApply Frequency Domain Adaptive filter to input
Common to All System Objects

Create System object with same property values


Expected number of inputs to a System object


Expected number of outputs of a System object


Check locked states of a System object (logical)


Allow System object property value changes


expand all

Note: This example runs only in R2016b or later. If you are using an earlier release, replace each call to the function with the equivalent step syntax. For example, myObject(x) becomes step(myObject,x).

Generate QPSK and noise signals, filter to obtain the received signal, and delay the QPSK signal to obtain the desired signal.

D = 16;
b  = exp(1i*pi/4)*[-0.7 1];
a  = [1 -0.7];
ntr= 1024;
s  = sign(randn(1,ntr+D))+1i*sign(randn(1,ntr+D));
n  = 0.1*(randn(1,ntr+D) + 1i*randn(1,ntr+D));
r  = filter(b,a,s) + n;
x  = r(1+D:ntr+D);
d  = s(1:ntr);

Use the Frequency Domain Adaptive Filter to compute the filtered output and the filter error for the input and desired signal. To get the discrete Fourier transform of the filter coefficients, call the fdaf object, and access the FFTCoefficients property of this object.

mu  = 0.1;
fdaf = dsp.FrequencyDomainAdaptiveFilter('Length',32,'StepSize',mu);
[y,e] = fdaf(x,d);
fftCoeffs = fdaf.FFTCoefficients
fftCoeffs = 
  Columns 1 through 4

   0.6802 - 0.6847i  -0.2485 - 0.9427i  -0.9675 - 0.2123i  -0.5605 + 0.8002i

  Columns 5 through 8

   0.5748 + 0.7593i   0.8541 - 0.3917i  -0.2526 - 0.9022i  -0.9298 + 0.1255i

  Columns 9 through 12

   0.0181 + 0.9366i   0.9207 + 0.0511i   0.1063 - 0.8972i  -0.8919 - 0.1829i

  Columns 13 through 16

  -0.2668 + 0.9113i   0.9215 + 0.3186i   0.3417 - 0.8859i  -0.8285 - 0.3760i

  Columns 17 through 20

  -0.4317 + 0.8200i   0.8741 + 0.4765i   0.4874 - 0.9075i  -0.8517 - 0.4774i

  Columns 21 through 24

  -0.4709 + 0.7632i   0.7468 + 0.4833i   0.5193 - 0.7995i  -0.8218 - 0.5649i

  Columns 25 through 28

  -0.5908 + 0.7768i   0.7316 + 0.5866i   0.5806 - 0.7270i  -0.7148 - 0.5998i

  Columns 29 through 32

  -0.6287 + 0.6702i   0.6575 + 0.6379i   0.6332 - 0.7153i  -0.7659 - 0.6424i

  Columns 33 through 36

  -0.6678 + 0.7294i   0.6536 + 0.6891i   0.7006 - 0.6333i  -0.6594 - 0.7117i

  Columns 37 through 40

  -0.7207 + 0.6517i   0.6031 + 0.7239i   0.7362 - 0.5776i  -0.5869 - 0.7682i

  Columns 41 through 44

  -0.7975 + 0.5789i   0.5449 + 0.7992i   0.7909 - 0.5343i  -0.5512 - 0.8070i

  Columns 45 through 48

  -0.8392 + 0.5338i   0.4605 + 0.8493i   0.8358 - 0.3921i  -0.3751 - 0.8388i

  Columns 49 through 52

  -0.8739 + 0.3785i   0.3625 + 0.9048i   0.8986 - 0.3405i  -0.3285 - 0.8728i

  Columns 53 through 56

  -0.8692 + 0.2947i   0.2106 + 0.9001i   0.9391 - 0.1095i  -0.0381 - 0.9526i

  Columns 57 through 60

  -0.9339 - 0.0169i  -0.1066 + 0.9073i   0.8955 + 0.2469i   0.4160 - 0.8776i

  Columns 61 through 64

  -0.7874 - 0.6033i  -0.8034 + 0.5626i   0.1949 + 0.9546i   0.9394 + 0.2570i

Plot the In-Phase and the Quadrature components of the desired, output, and the error signals.

subplot(2,2,1); plot(1:ntr,real([d;y;e]));
legend('Desired','Output','Error'); title('In-Phase Components');
xlabel('Time Index'); ylabel('signal value');
subplot(2,2,2); plot(1:ntr,imag([d;y;e]));
legend('Desired','Output','Error'); title('Quadrature Components');
xlabel('Time Index'); ylabel('signal value');

Plot the received and equalized signals' scatter plots.

subplot(2,2,3); plot(x(ntr-100:ntr),'.'); axis([-3 3 -3 3]);
title('Received Signal Scatter Plot'); axis('square');
xlabel('Real[x]'); ylabel('Imag[x]'); grid on;
subplot(2,2,4); plot(y(ntr-100:ntr),'.'); axis([-3 3 -3 3]);
title('Equalized Signal Scatter Plot'); axis('square');
xlabel('Real[y]'); ylabel('Imag[y]'); grid on;


[1] Shynk, J.J.“Frequency-Domain and Multirate Adaptive Filtering.” IEEE Signal Processing Magazine, Vol. 9, No. 1, pp. 14–37, Jan. 1992.

Extended Capabilities

Introduced in R2013b

Was this topic helpful?