Filter input signal through multipath Rician fading channel
The comm.RicianChannel
System object™ filters an input signal through a multipath Rician fading channel. For more
information on fading model processing, see Methodology for Simulating
Multipath Fading Channels.
To filter an input signal using a multipath Rician fading channel:
Create the comm.RicianChannel
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?.
creates a
frequency-selective or frequency-flat multipath Rician fading channel System object. This
object filters a real or complex input signal through the multipath channel to obtain the
channel-impaired signal.ricianlchan
= comm.RicianChannel
sets properties using one or more name-value pair arguments. Enclose each property name in
quotes. For example,
ricianlchan
= comm.RicianChannel(Name,Value)comm.RicianChannel('
sets the
input signal sample rate to 2.SampleRate
',2)
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
— Input signal sample rate1
(default) | positive scalarInput signal sample rate in Hz, specified as a positive scalar.
Data Types: double
PathDelays
— Discrete path delay0
(default) | scalar | row vectorDiscrete path delay in seconds, specified as a scalar or row vector.
When PathDelays
is a scalar, the channel is frequency
flat.
When PathDelays
is a vector, the channel is frequency
selective.
Data Types: double
AveragePathGains
— Average of the discrete paths0
(default) | scalar | row vectorAverage gains of the discrete paths in decibels, specified as a scalar or row
vector. AveragePathGains
must be of the same size as
the PathDelays
property.
Data Types: double
NormalizePathGains
— Normalize average path gains to 0 dBtrue
or 1
(default) | false
or 0
Normalize average path gains to 0 dB, specified as a logical 1
(true
) or 0
(false
).
When NormalizePathGains
is true
, the
fading processes are normalized so that the total power of the path gains,
averaged over time, is 0 dB.
When NormalizePathGains
is false
, the
total power of the path gains is not normalized.
Data Types: logical
KFactor
— Rician K-factor3
(default) | positive scalar | row vector of nonnegative valuesRician K-factor, specified as a positive scalar or row vector of
nonnegative values. The vector must be the same length as the
PathDelays
property value.
When KFactor
is a scalar, the first discrete path is a
Rician fading process with a Rician K-factor of
KFactor
. Any remaining discrete paths are independent
Rayleigh fading processes.
When KFactor
is a row vector, the discrete path
corresponding to a positive element of the KFactor
vector is a
Rician fading process with a Rician K-factor specified by that
element. The discrete path corresponding to any zero-valued elements of the
KFactor
vector are Rayleigh fading processes. At least one
element value must be nonzero.
Data Types: double
DirectPathDopplerShift
— Doppler shift0
(default) | scalar | row vectorDoppler shift of the line-of-sight components of a multipath Rician fading channel,
specified as a scalar or row vector. Units are in hertz. The
DirectPathDopplerShift
property must be of the same size as the
KFactor
property.
When DirectPathDopplerShift
is a scalar, the value
represents the line-of-sight component Doppler shift of the first discrete path.
This path exhibits a Rician fading process.
When DirectPathDopplerShift
is a row vector, the discrete
path corresponding to a positive element of the KFactor
vector is a
Rician fading process. The corresponding element of
DirectPathDopplerShift
specifies the line-of-sight
component Doppler shift of that discrete path.
Data Types: double
DirectPathInitialPhase
— Initial phase0
(default) | scalar | row vectorInitial phase of the line-of-sight components of a multipath Rician fading channel,
specified as a scalar or row vector. Units are in radians. The
DirectPathInitialPhase
property must be of the same size as the
KFactor
property.
When DirectPathInitialPhase
is a scalar, the value
represents the line-of-sight component initial phase of the first discrete path.
This path exhibits a Rician fading process.
When DirectPathInitialPhase
is a row vector, the discrete
path corresponding to a positive element of the KFactor
vector is a
Rician fading process. The corresponding element of
DirectPathInitialPhase
specifies the line-of-sight
component initial phase of that discrete path.
Data Types: double
MaximumDopplerShift
— Maximum Doppler shift for all channel paths0.001
(default) | nonnegative scalarMaximum Doppler shift for all channel paths, specified as a nonnegative scalar. Units are in hertz.
The maximum Doppler shift limit applies to each channel path. When you set this
property to 0
, the channel remains static for the entire input. You
can use the reset
object function to generate a new
channel realization. The MaximumDopplerShift
property
value must be smaller than SampleRate
/10/fc for each path.
fc represents the cutoff frequency factor of
the path. For most Doppler spectrum types, the value of
fc is 1. For Gaussian and biGaussian Doppler
spectrum types, fc is dependent on the Doppler
spectrum structure fields. For more details about how
fc is defined, see Cutoff Frequency Factor.
Data Types: double
DopplerSpectrum
— Doppler spectrum shape for all channel pathsdoppler('Jakes')
(default) | Doppler spectrum structure | 1-by-NP cell array of Doppler spectrum
structuresDoppler spectrum shape for all channel paths, specified as a Doppler spectrum
structure or a 1-by-NP cell array of Doppler
spectrum structures. These Doppler spectrum structures must be outputs of the form
returned from the doppler
function.
NP is the number of discrete delay paths,
that is, the length of the PathDelays
property.
When DopplerSpectrum
is defined by a single Doppler
spectrum structure, all paths have the same specified Doppler spectrum.
When DopplerSpectrum
is defined by a cell array of
Doppler spectrum structures, each path has the Doppler spectrum specified by the
corresponding structure in the cell array.
Options for the spectrum type are specified by the specType
input to the doppler
function. If you set the
FadingTechnique
property to 'Sum of
sinusoids'
, you must set DopplerSpectrum
to
doppler('Jakes')
.
To enable this property, set the MaximumDopplerShift
property to a positive value. The MaximumDopplerShift
property defines the maximum Doppler
shift value permitted when specifying the Doppler spectrum.
Data Types: struct
| cell
FadingTechnique
— Channel model fading technique'Filtered Gaussian noise'
(default) | 'Sum of sinusoids'
Channel model fading technique, specified as 'Filtered Gaussian
noise'
or 'Sum of sinusoids'
.
Data Types: char
| string
NumSinusoids
— Number of sinusoids used48
(default) | positive integerNumber of sinusoids used to model the fading process, specified as a positive integer.
To enable this property, set the FadingTechnique
property to
'Sum of sinusoids'
.
Data Types: double
InitialTimeSource
— Source to control start time of fading process'Property'
(default) | 'Input port'
Source to control the start time of the fading process, specified as
'Property'
or 'Input port'
.
When InitialTimeSource
is set to
'Property'
, use the InitialTime
property
to set the initial time offset.
When InitialTimeSource
is set to 'Input
port'
, specify the start time of the fading process by using the
itime
input to the System object. The input value can change in consecutive calls to the System object.
This property applies when the FadingTechnique
property to
'Sum of sinusoids'
.
Data Types: string
| char
InitialTime
— Initial time offset0
(default) | nonnegative scalarInitial time offset, in seconds, for the fading model, specified as a nonnegative
scalar. InitialTime
must be greater than end time of the last
frame. InitialTime
is rounded up to the nearest sample position
when it is not a multiple of 1/SampleRate
.
To enable this property, set the FadingTechnique
property to
'Sum of sinusoids'
and the InitialTimeSource
property to 'Property'
.
Data Types: double
RandomStream
— Source of random number stream'Global stream'
(default) | 'mt19937ar with seed'
Source of random number stream, specified as 'Global stream'
or
'mt19937ar with seed'
.
'Global stream'
— The current global random number stream
is used for normally distributed random number generation. In this case, the
reset
object function resets the channel
filters only.
'mt19937ar with seed'
— The mt19937ar algorithm is used for
normally distributed random number generation. In this case, the
reset
object function resets the channel filters and
reinitializes the random number stream to the value of the
Seed
property.
Data Types: string
| char
Seed
— Initial seed of mt19937ar random number stream73
(default) | nonnegative integerInitial seed of mt19937ar random number stream generator algorithm, specified as a
nonnegative integer. When the reset
object function is called, the
mt19937ar random number stream is reinitialized to the Seed
property
value.
This property applies when you set the RandomStream
property
to 'mt19937ar with seed'
.
Data Types: double
PathGainsOutputPort
— Option to output path gainsfalse
or 0
(default) | true
or 1
Option to output path gains, specified as 0
(false
) or 1
(true
). Set this
property to 1
(true
) to output the channel path
gains of the underlying fading process.
Data Types: logical
Visualization
— Channel visualization'Off'
(default) | 'Impulse response'
| 'Frequency response'
| 'Impulse and frequency responses'
| 'Doppler spectrum'
Channel visualization, specified as 'Off'
, 'Impulse
response'
, 'Frequency response'
, 'Impulse and
frequency responses'
, or 'Doppler spectrum'
. For more
information, see Channel Visualization.
Data Types: string
| char
SamplesToDisplay
— Percentage of samples to display'25%'
(default) | '10%'
| '50%'
| '100%'
Percentage of samples to display, specified as '25%'
,
'10%'
, '50%'
, or '100%'
.
Displaying fewer samples improves (decreases) the display update rate at the expense of
decreasing the visualized precision.
To enable this property, set the Visualization
property to
'Impulse response'
, 'Frequency response'
, or
'Impulse and frequency responses'
.
Data Types: string
| char
PathsForDopplerDisplay
— Path for Doppler display1
(default) | positive integer Path for Doppler display, specified as a positive integer. Use this property to
select the discrete path used in constructing a Doppler spectrum plot. The specified
path must be an element of {1, 2, ..., NP}. In this set, NP is the
number of discrete delay paths, that is, the length of the PathDelays
property value.
To enable this property, set the Visualization
property to
'Doppler spectrum'
.
Data Types: double
x
— Input signalInput signal, specified as an NS-by-1 vector, where NS is the number of samples.
Data Types: single
| double
Complex Number Support: Yes
itime
— Initial time0
| nonnegative scalarInitial time in seconds, specified as a nonnegative scalar. The
itime
input must be greater than the end time of the last
frame. When itime
is not a multiple of
1/SampleRate
, it is rounded up to the nearest sample
position.
Data Types: single
| double
y
— Output signalOutput signal, returned as an NS-by-1
vector of complex values with the same data precision as the input signal
x
. NS is the number
of samples.
pathgains
— Path gainsPath gains, returned as an
NS-by-NP
array. NS is the number of samples.
NP is the number of discrete delay paths,
that is, the length of the PathDelays
property
value. pathgains
contains complex values with the same precision
as the input signal x
.
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)
This example shows how to produce the same multipath Rician fading channel response by using two different methods for random number generation. The multipath Rician fading channel System object™ includes two methods for random number generation. You can use the current global stream or the mt19937ar algorithm with a specified seed. By interacting with the global stream, the System object can produce the same outputs from the two methods.
Create a PSK modulator System object to modulate randomly generated data.
pskModulator = comm.PSKModulator; channelInput = pskModulator(randi([0 pskModulator.ModulationOrder-1],1024,1));
Create a multipath Rician fading channel System object, specifying the random number generation method as the my19937ar algorithm and the random number seed as 73.
ricianchan = comm.RicianChannel(... 'SampleRate',1e6,... 'PathDelays',[0.0 0.5 1.2]*1e-6,... 'AveragePathGains',[0.1 0.5 0.2],... 'KFactor',2.8,... 'DirectPathDopplerShift',5.0,... 'DirectPathInitialPhase',0.5,... 'MaximumDopplerShift',50,... 'DopplerSpectrum',doppler('Bell', 8),... 'RandomStream','mt19937ar with seed', ... 'Seed',73, ... 'PathGainsOutputPort',true);
Filter the modulated data by using the multipath Rician fading channel System object.
[RicianChanOut1, RicianPathGains1] = ricianchan(channelInput);
Set the System object to use the global stream for random number generation.
release(ricianchan);
ricianchan.RandomStream = 'Global stream';
Set the global stream to have the same seed that was specified when creating the multipath Rician fading channel System object.
rng(73)
Filter the modulated data by using the multipath Rician fading channel System object again.
[RicianChanOut2,RicianPathGains2] = ricianchan(channelInput);
Verify that the channel and path gain outputs are the same for each of the two methods.
isequal(RicianChanOut1,RicianChanOut2)
ans = logical
1
isequal(RicianPathGains1,RicianPathGains2)
ans = logical
1
This example shows how to create a frequency-selective multipath Rician fading channel and display its impulse and frequency responses.
Set the sample rate to 3.84 MHz. Specify path delays and gains by using the ITU pedestrian B channel configuration. Set the Rician K-factor to 10 and the maximum Doppler shift to 50 Hz.
fs = 3.84e6; % Hz pathDelays = [0 200 800 1200 2300 3700]*1e-9; % sec avgPathGains = [0 -0.9 -4.9 -8 -7.8 -23.9]; % dB fD = 50; % Hz
Create a multipath Rician fading channel System object by using the previously defined properties and to visualize the impulse response and frequency response plots.
ricianChan = comm.RicianChannel('SampleRate',fs, ... 'PathDelays',pathDelays, ... 'AveragePathGains',avgPathGains, ... 'KFactor',10, ... 'MaximumDopplerShift',fD, ... 'Visualization','Impulse and frequency responses');
Generate random binary data and pass it through the multipath Rician fading channel. The impulse response plot enables you to identify the individual paths and their corresponding filter coefficients. The frequency response plot shows the frequency-selective nature of the ITU pedestrian B channel.
x = randi([0 1],1000,1); y = ricianChan(x);
The example shows how the channel state is maintained in cases in which data is discontinuously transmitted. Create a Rician channel object and pass data through it using the sum-of-sinusoids technique.
Set the channel properties.
fs = 1000; % Sample rate (Hz) pathDelays = [0 2.5e-3]; % Path delays (s) pathPower = [0 -6]; % Path power (dB) fD = 5; % Maximum Doppler shift (Hz) ns = 1000; % Number of samples nsdel = 100; % Number of samples for delayed paths
Define the overall simulation time and three time segments for which data is to be transmitted. In this case, the channel is simulated for 1s with a 1000 Hz sampling rate. One 1000-sample continuous data sequence is transmitted at time 0. Three 100-sample data packets are transmitted at times 0.1 s, 0.5 s, and 0.8 s, respectively.
to0 = 0.0; to1 = 0.1; to2 = 0.5; to3 = 0.8; t0 = (to0:ns-1)/fs; % Transmission 0 t1 = to1+(0:nsdel-1)/fs; % Transmission 1 t2 = to2+(0:nsdel-1)/fs; % Transmission 2 t3 = to3+(0:nsdel-1)/fs; % Transmission 3
Generate random binary data corresponding to the previously defined time intervals.
d0 = randi([0 1],ns,1); d1 = randi([0 1],nsdel,1); d2 = randi([0 1],nsdel,1); d3 = randi([0 1],nsdel,1);
Create a frequency-flat multipath Rician fading System object, specifying the sum-of-sinusoids fading technique. So that results can be repeated, specify a seed value. Use the default InitialTime
property setting so that the fading channel will be simulated from time 0. Enable the path gains output.
ricianchan1 = comm.RicianChannel('SampleRate',fs, ... 'MaximumDopplerShift',5, ... 'RandomStream','mt19937ar with seed', ... 'Seed',17, ... 'FadingTechnique','Sum of sinusoids', ... 'PathGainsOutputPort',true);
Create a clone of the multipath Rician fading channel System object. Set the source for initial time so that the fading channel offset time can be specified as an input argument when using the System object.
ricianchan2 = clone(ricianchan1);
ricianchan2.InitialTimeSource = 'Input port';
Pass random binary data through the first multipath Rician fading channel System object, ricianchan1
. Data is transmitted over all 1000 time samples. For this example, only the complex path gain is needed.
[~,pg0] = ricianchan1(d0);
Pass random data through the second multipath Rician fading channel System object, ricianchan2
, where the initial time offsets are provided as input arguments.
[~,pg1] = ricianchan2(d1,to1); [~,pg2] = ricianchan2(d2,to2); [~,pg3] = ricianchan2(d3,to3);
Compare the number of samples processed by the two channels by using the info
object function. The ricianchan1
object processed 1000 samples, while the ricianhan2
object only processed 300 samples.
G = info(ricianchan1); H = info(ricianchan2); [G.NumSamplesProcessed H.NumSamplesProcessed]
ans = 1×2
1000 300
Convert the path gains into decibels.
pathGain0 = 20*log10(abs(pg0)); pathGain1 = 20*log10(abs(pg1)); pathGain2 = 20*log10(abs(pg2)); pathGain3 = 20*log10(abs(pg3));
Plot the path gains for the continuous and discontinuous cases. The gains for the three segments match the gain for the continuous case. The alignment of the two highlights that the sum-of-sinusoids technique is suited to the simulation of packetized data, as the channel characteristics are maintained even when data is not transmitted.
plot(t0,pathGain0,'r--') hold on plot(t1,pathGain1,'b') plot(t2,pathGain2,'b') plot(t3,pathGain3,'b') grid xlabel('Time (sec)') ylabel('Path Gain (dB)') legend('Continuous','Discontinuous','location','nw') title('Continuous and Discontinuous Transmission Path Gains')
The example show how to use the ChannelFilterCoefficients
property returned by the info
object function of the comm.RicianChannel
System object to reproduce the multipath Rician fading channel output.
Create a multipath Rician fading channel System object, defining two paths and specifying data to pass through the channel.
ricianchan = comm.RicianChannel('SampleRate',1000,'PathDelays',[0 1e-3], ... 'AveragePathGains',[0 -2],'PathGainsOutputPort',true)
ricianchan = comm.RicianChannel with properties: SampleRate: 1000 PathDelays: [0 1.0000e-03] AveragePathGains: [0 -2] NormalizePathGains: true KFactor: 3 DirectPathDopplerShift: 0 DirectPathInitialPhase: 0 MaximumDopplerShift: 1.0000e-03 DopplerSpectrum: [1x1 struct] Show all properties
data = randi([0 1],600,1);
Pass data through the channel. Assign the ChannelFilterCoefficients
property value to the variable coeff
.
[chanout1,pg] = ricianchan(data); chaninfo = info(ricianchan)
chaninfo = struct with fields:
ChannelFilterDelay: 0
ChannelFilterCoefficients: [2x2 double]
NumSamplesProcessed: 600
coeff = chaninfo.ChannelFilterCoefficients;
Calculate the fractional delayed input signal at the path delay locations stored in coeff
.
Np = length(ricianchan.PathDelays); fracdelaydata = zeros(size(data,1),Np); for ii = 1:Np fracdelaydata(:,ii) = filter(coeff(ii,:),1,data); end
Apply the path gains and sum the results for all paths.
chanout2 = sum(pg .* fracdelaydata,2);
Compare the output of the multipath Rician fading channel System object to the output reproduced using the path gains and the ChannelFilterCoefficients
property of the multipath Rician fading channel System object.
isequal(chanout1,chanout2)
ans = logical
1
The cutoff frequency factor, fc, is determined for different Doppler spectrum types.
For any Doppler spectrum type other than Gaussian and biGaussian, fc equals 1.
For a doppler
('Gaussian')
spectrum type,
fc equals NormalizedStandardDeviation
.
For a doppler
('BiGaussian')
spectrum type:
If the PowerGains
(1)
and
NormalizedCenterFrequencies
(2)
field values are both 0
, then
fc equals NormalizedStandardDeviation
(1)
.
If the PowerGains
(2)
and
NormalizedCenterFrequencies
(1)
field values are both 0
, then
fc equals NormalizedStandardDeviation
(2)
.
If the NormalizedCenterFrequencies
field value is
[0,0]
and the
NormalizedStandardDeviation
field has two identical
elements, then fc equals NormalizedStandardDeviation
(1)
.
In all other cases, fc equals 1.
The comm.RicianChannel
System object enables visualization of the channel impulse response, frequency response,
and Doppler spectrum.
Note
The displayed and specified path gain locations can differ by as much as 5% of the input sample time.
The visualization display speed is controlled by the combination of
the SamplesToDisplay
property and the
Playback > Reduce Updates to Improve
Performance scope menu item. Reducing the percentage
of samples to display and enabling reduced updates can speed up the
rendering of the visualization scope.
After the visualization scopes are manually closed, calls to the System object are executed at its normal speed.
Code generation is available only when the
Visualization
property is set to
'Off'
.
Impulse Response
The impulse response scope displays the path gains, channel filter coefficients, and
interpolated path gains. The path gains occur at time instances which correspond to the
specified PathDelays
property and might not be aligned with the
input sampling time. The channel filter coefficients are used to model the channel. They
are interpolated from the actual path gains and are aligned with the input sampling
time. In cases in which the path gains are aligned with the sampling time, the path
gains overlap the filter coefficients. Sinc interpolation is used to connect the channel
filter coefficients and is shown as the interpolated path gains. These points are used
solely for display purposes and not used in subsequent channel filtering. For a flat
fading channel (one path), the sinc interpolation curve is not displayed. For all
impulse response plots, the frame and sample numbers are shown in the upper-left corner
of the scope.
The impulse response plot shares the same toolbar and menus as the dsp.ArrayPlot
System object.
When the specified path gains align with the sample rate, the path gains and the channel filter coefficients overlap. In this figure the impulse response shows the path gains overlap the filter coefficients.
If the specified path gains are not aligned with the sample rate, the path gains and the channel filter coefficients do not overlap. In this figure, the filter coefficients are equally distributed. The path gains do not overlap with the channel filter coefficients because the path gains are not aligned with the sample rate.
This figure shows the impulse response for a frequency-flat channel. In this case, the interpolated path gains are not displayed.
Frequency response
The frequency response scope displays the multipath Rayleigh fading channel spectrum
by taking a discrete Fourier transform of the channel filter coefficients. The frequency
response plot shares the same toolbar and menus as the dsp.SpectrumAnalyzer
System object.
The y-axis limits of the plot are computed based on the
NormalizePathGains
and AveragePathGains
properties of the comm.RicianChannel
System object.
This table shows other selected default spectrum settings. These settings can be changed from their default values by using the View > Spectrum Settings menu.
Spectrum Settings | Value |
---|---|
Main options>Type |
|
Main options>Window length | Channel filter length |
Main options>NFFT |
|
Window options>Window |
|
Trace options>Units |
|
This figure shows the frequency response plot for a frequency selective channel.
Doppler Spectrum
The Doppler spectrum plot displays the theoretical Doppler spectrum and the
empirically determined data points. The theoretical data is displayed as a line for the
case of nonstatic channels and as a point for static channels. The empirical data is
shown as * symbols. Before the empirical plot is updated, the internal buffer must be
completely filled with filtered Gaussian samples. The empirical plot is the running mean
of the spectrum calculated from each full buffer. For nonstatic channels, the number of
input samples needed before the next update is displayed in the upper-left corner of the
plot. The number of samples needed is a function of the sample rate and the maximum
Doppler shift. For static channels, the text "Reset fading channel for next
update
" is displayed.
[1] Oestges, Claude, and Bruno Clerckx. MIMO Wireless Communications: From Real-World Propagation to Space-Time Code Design. 1st ed. Boston, MA: Elsevier, 2007.
[2] Correia, Luis M., and European Cooperation in the Field of Scientific and Technical Research (Organization), eds. Mobile Broadband Multimedia Networks: Techniques, Models and Tools for 4G. 1st ed. Amsterdam ; Boston: Elsevier/Academic Press, 2006.
[3] Kermoal, J.P., L. Schumacher, K.I. Pedersen, P.E. Mogensen, and F. Frederiksen. “A Stochastic MIMO Radio Channel Model with Experimental Validation.” IEEE Journal on Selected Areas in Communications 20, no. 6 (August 2002): 1211–26. https://doi.org/10.1109/JSAC.2002.801223.
[4] Jeruchim, Michel C., Philip Balaban, and K. Sam Shanmugan. Simulation of Communication Systems. Second edition. Boston, MA: Springer US, 2000.
[5] Patzold, M., Cheng-Xiang Wang, and B. Hogstad. “Two New Sum-of-Sinusoids-Based Methods for the Efficient Generation of Multiple Uncorrelated Rayleigh Fading Waveforms.” IEEE Transactions on Wireless Communications 8, no. 6 (June 2009): 3122–31. https://doi.org/10.1109/TWC.2009.080769.
Usage notes and limitations:
To generate C code, set the DopplerSpectrum
property to a
single Doppler spectrum structure.
Code generation is available only when the Visualization
property is 'Off'
.
See System Objects in MATLAB Code Generation (MATLAB Coder).
comm.AWGNChannel
| comm.ChannelFilter
| comm.MIMOChannel
| comm.RayleighChannel
| comm.WINNER2Channel
You have a modified version of this example. Do you want to open this example with your edits?