Filter signal using multipath gains at specified path delays
System object™ to filter a signal using multipath gains at specified path delays.
To filter a signal using multipath gains:
comm.ChannelFilter 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?.
multipath channel filter System object to filter an input signal with path gains at the specified path
chanFilt = comm.ChannelFilter
sets properties using one or more name-value pairs. For example,
chanFilt = comm.ChannelFilter(
'SampleRate',1e6 sets the sampling rate to
Enclose each property name in quotes.
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.
SampleRate— Sample rate
1Hz (default) | real positive scalar
Sample rate of the input signal, specified as a real, positive scalar.
PathDelays— Discrete path delays
0(default) | real scalar | real vector
Delays of the discrete paths in seconds, specified as a real scalar or vector.
FilterDelaySource— Channel filter delay source
Channel filter delay source, specified as either
specify the channel filter delay as the minimum possible value.
specify the channel filter delay as a custom value. The custom value cannot be
smaller than the minimum possible value.
FilterDelay— Channel filter delay
7(default) | real non-negative integer scalar
Channel filter delay in samples, specified as a real, non-negative, integer scalar.
To enable this property, set the
'Custom'. The specified value must be no smaller than the
automatically determined channel filter delay when you set
NormalizeChannelOutputs— Normalize outputs by number of receive antennas
Normalize outputs by number of receive antennas, specified as either
x— Input signal
Input signal, specified as a matrix. The argument
x must be a
matrix, where Ns is the number of samples
and Nt is the number of transmit
Complex Number Support: Yes
g— Path gain
Path gain, specified as an array. The input G must be a Ns-by-Np-by-Nt-by-Nr or 1-by-Np-by-Nt-by-Nr array, where Nr is the number of receive antennas and Np is the number of paths, i.e., the length of the PathDelays property.
Complex Number Support: Yes
y— Channel output
Channel output, returned as a Ns-by-Nr matrix.
Complex Number Support: Yes
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
In a distributed MIMO system, send the same signal from two geographically separate transmitters (Tx) and combine the received signals at one single receiver (Rx) to explore spatial diversity. The two Txs are not co-located and they experience different multipath (path delays) to the Rx. Specify the path delays respectively.
delay1 = [0 1.5 2.3 5.2 6.6]; delay2 = [0 3.7 6.2];
Configure one channel filter object per Tx.
chanFilt1 = comm.ChannelFilter('PathDelays', delay1); chanFilt2 = comm.ChannelFilter('PathDelays', delay2);
The two channel filters get different filter delays.
fd1 = chanFilt1.info.ChannelFilterDelay
fd1 = 6
fd2 = chanFilt2.info.ChannelFilterDelay
fd2 = 4
In order to combine the two channel outputs at Rx, the two channel filters must have the same filter delay. Customize the filter delay for each object.
set(chanFilt1, ... "FilterDelaySource", 'Custom', ... "FilterDelay", max(fd1, fd2)); set(chanFilt2, ... "FilterDelaySource", 'Custom', ... "FilterDelay", max(fd1, fd2));
Set up system parameters. It is assumed one antenna at each Tx and Rx.
[Nt, Nr] = deal(1); Ns = 30720; Np1 = length(chanFilt1.PathDelays); Np2 = length(chanFilt2.PathDelays); M = 64;
Generate random 64-QAM signal and complex path gains for the two channels.
x = qammod(randi([0, M-1], Ns, Nt), M); g1 = complex(rand(Ns, Np1, Nt, Nr), rand(Ns, Np1, Nt, Nr)); g2 = complex(rand(Ns, Np2, Nt, Nr), rand(Ns, Np2, Nt, Nr));
Perform channel filtering and Rx combining. The combined 2x1 MIMO channel has a filter delay of max(
y = chanFilt1(x, g1) + chanFilt2(x, g2);
Construct a channel filter object with the LTE Extended Vehicular A model (EVA) delay profile.
chanFilt = comm.ChannelFilter( ... 'SampleRate', 30.72e6, ... 'PathDelays', [0 30 150 310 370 710 1090 1730 2510]*1e-9);
Set up system parameters. There are two transmit and receive antennas.
[Nt, Nr] = deal(2); Ns = 30720; Np = length(chanFilt.PathDelays); M = 256;
Generate random 256-QAM signal and complex path gains.
x = qammod(randi([0, M-1], Ns, Nt), M); g = complex(rand(Ns, Np, Nt, Nr), rand(Ns, Np, Nt, Nr));
Filter the signal with path gains for the EVA delay profile.
y = chanFilt(x, g);
The channel filter implements a fractional delay (FD) finite impulse response (FIR) bandpass filter with a length of 16 coefficients for each candidate fractional delay at 0, 0.02, 0.04, …, 0.98.
Each discrete path is rounded to its nearest candidate fractional delay, so the delay error limit is 1% of the sample time. To achieve a group delay bandwidth exceeding 80% and a magnitude bandwidth exceeding 90%, the algorithm selects the optimal FIR coefficient values for each fractional delay, while satisfying the following criteria:
Group delay ripple ≤ 10%
Magnitude ripple ≤ 2 dB
Magnitude bandedge attenuation = 3 dB
The plots show bandwidths that satisfy the design criteria for group delay ripple, magnitude ripple, and magnitude bandedge attenuation.
For additional information, see the article A Matlab-based Object-Oriented Approach to Multipath Fading Channel Simulation at MATLAB® Central.