comm.RayleighChannel
Filter input signal through multipath Rayleigh fading channel
Description
The comm.RayleighChannel
System object™ filters an input signal through the multipath Rayleigh fading channel. For
more information on fading model processing, see the Methodology for Simulating
Multipath Fading Channels section.
To filter an input signal through a multipath Rayleigh fading channel:
Create the
comm.RayleighChannelobject 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?
Creation
Description
creates a
frequency-selective or frequency-flat multipath Rayleigh fading channel System object. This object filters a real or complex input signal through the
multipath channel to obtain a channel-impaired signal.rayleighchan = comm.RayleighChannel
sets properties using one or more name-value arguments. For example,
rayleighchan = comm.RayleighChannel(Name=Value)comm.RayleighChannel(SampleRate=2) sets the input signal sample
rate to 2.
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.
Input signal sample rate in hertz, specified as a positive scalar.
Data Types: double
Since R2026a
Path gains sample rate, specified as 'signal' or
'auto'.
When you set this property to
'signal', the object sets the path gain sampling rate to the signal sampling rate,SampleRate.When you set this property to
'auto', the object uses a path gain sampling rate that is lower than the signal sampling rate and allows for faster computation. For more information, seePathGainSampleRatein theinfoobject function.
Discrete path delay in seconds, specified as a scalar or row vector.
When you set
PathDelaysto a scalar, the channel is frequency flat.When you set
PathDelaysto a vector, the channel is frequency selective.
The PathDelays and AveragePathGains
properties must be the same length.
Data Types: double
Average gains of the discrete paths in decibels, specified as a scalar or row
vector. The AveragePathGains and PathDelays properties
must be the same length.
Data Types: double
Normalize average path gains, specified as one of these logical values:
1(true) — The fading processes are normalized so that the total power of the path gains, averaged over time, is 0 dB.0(false) — The total power of the path gains is not normalized.
The AveragePathGains
property specifies the average powers of the path gains.
Data Types: logical
Maximum 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 less than or equal to
SampleRate/10/fc for each
path. fc is the cutoff frequency factor
of the path. For most Doppler spectrum types, the value of
fc is 1. For Gaussian and bi-Gaussian
Doppler spectrum types, fc is dependent
on the Doppler spectrum structure fields. For more details about how
fc is defined, see the Cutoff Frequency Factor
section.
Data Types: double
Doppler 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 specified by the PathDelays property. The
MaximumDopplerShift property defines the maximum Doppler shift
value that the DopplerSpectrum property permits when you
specify the Doppler spectrum..
When you set
DopplerSpectrumto a single Doppler spectrum structure, all paths have the same specified Doppler spectrum.When you set
DopplerSpectrumto a cell array of Doppler spectrum structures, each path has the Doppler spectrum specified by the corresponding structure in the cell array.
Specify options for the spectrum type by using the
specType input to the doppler function. If you set the
FadingTechnique
property to 'Sum of sinusoids', you must set
DopplerSpectrum to
doppler('Jakes').
Dependencies
To enable this property, set the MaximumDopplerShift property to a positive scalar.
Data Types: struct | cell
Channel filtering, specified as one of these logical values:
1(true) — The channel accepts an input signal and produces a filtered output signal.0(false) — The object does not accept an input signal, produces no filtered output signal, and outputs only channel path gains. You must specify the duration of the fading process by using theNumSamplesproperty.
Data Types: logical
Output channel path gains, specified as a logical 0
(false) or 1 (true).
Set this property to true to output the channel path gains of
the underlying fading process.
Dependencies
To enable this property, set the ChannelFiltering
property to true.
Data Types: logical
Number of samples used for the duration of the fading process, specified as a nonnegative integer.
When you set
PathGainSampleRateto'signal', the object processes samples at the rate ofSampleRate.When you set
PathGainSampleRateto'auto', the object processes samples at the rate ofPathGainSampleRate.
Tunable: Yes
Dependencies
To enable this property, set the ChannelFiltering
property to false.
Data Types: double
Path gain output data type, specified as 'double' or
'single'.
Dependencies
To enable this property, set the ChannelFiltering
property to false.
Data Types: char | string
Channel model fading technique, specified as 'Filtered Gaussian
noise' or 'Sum of sinusoids'.
Data Types: char | string
Number of sinusoids used to model the fading process, specified as a positive integer.
Dependencies
To enable this property, set the FadingTechnique
property to 'Sum of sinusoids'.
Data Types: double
Source to control the start time of the fading process, specified as
'Property' or 'Input port'.
When you set
InitialTimeSourceto'Property', set the initial time offset by using theInitialTimeproperty.When you set
InitialTimeSourceto'Input port', specify the start time of the fading process by using theinittimeinput argument. The input value can change in consecutive calls to the object.
Dependencies
To enable this property, set the FadingTechnique
property to 'Sum of sinusoids'.
Data Types: char | string
Initial time offset for the fading model in seconds, specified as a nonnegative scalar.
When mod(InitialTime/SampleRate) is nonzero, the initial time offset is rounded up to the nearest
sample position.
Dependencies
To enable this property, set the FadingTechnique
property to 'Sum of sinusoids' and the InitialTimeSource property to
'Property'.
Data Types: double
Source of the random number stream, specified as 'Global
stream' or 'mt19937ar with seed'.
When you specify
'Global stream', the object uses the current global random number stream for random number generation. In this case, theresetobject function resets only the filters.When you specify
'mt19937ar with seed', the object uses the mt19937ar algorithm for random number generation. In this case, theresetobject function resets the filters and reinitializes the random number stream to the value of theSeedproperty.
Data Types: char | string
Initial seed of the mt19937ar random number stream generator algorithm,
specified as a nonnegative integer. When you call the reset
object function, it reinitializes the mt19937ar random number stream to the
Seed value.
Dependencies
To enable this property, set the RandomStream
property to 'mt19937ar with seed'.
Data Types: double
Channel visualization, specified as 'Off', 'Impulse
response', 'Frequency response', 'Impulse
and frequency responses', or 'Doppler spectrum'.
For more information, see the Channel Visualization topic.
Data Types: char | string
Path used for displaying the Doppler spectrum, specified as a positive integer
in the range [1, NP].
NP is the number of discrete delay
paths specified by the PathDelays property. Use
this property to select the discrete path used in constructing a Doppler spectrum
plot.
Dependencies
To enable this property, set the Visualization
property to 'Doppler spectrum'.
Data Types: double
Percentage of samples to display, specified as '25%',
'10%', '50%', or
'100%'. Increasing the percentage improves display accuracy
at the expense of simulation speed.
Dependencies
To enable this property, set the Visualization
property to 'Impulse response', 'Frequency
response', or 'Impulse and frequency
responses'.
Data Types: char | string
Usage
Syntax
Description
filters the input signal Y = rayleighchan(X)X through a multipath Rayleigh
fading channel and returns the result in Y.
To enable this syntax, set the ChannelFiltering
property to true.
specifies a start time for the fading process.Y = rayleighchan(X,inittime)
To enable this syntax, set the FadingTechnique
property to 'Sum of sinusoids' and the InitialTimeSource
property to 'Input port'.
[
also returns the channel path gains of the underlying multipath Rayleigh fading
process in Y,pathgains] = rayleighchan(___)pathgains using any of the input argument
combinations in the previous syntaxes.
To enable this syntax, set the PathGainsOutputPort property set to true.
returns
the channel path gains of the underlying fading process. In this case, the channel
requires no input signal and acts as a source of path gains.pathgains = rayleighchan()
To enable this syntax, set the ChannelFiltering
property to false.
returns the channel path gains of the underlying fading process beginning at the
specified initial time. In this case, the channel requires no input signal and
acts as a source of path gains.pathgains = rayleighchan(inittime)
To enable this syntax, set the FadingTechnique
property to 'Sum of sinusoids', the InitialTimeSource
property to 'Input port', and the ChannelFiltering
property to false.
Input Arguments
Input signal, specified as an NS-by-1 vector, where NS is the number of samples.
This object accepts variable-size inputs. After the object is locked, you can change the frame size (number of rows) of the signal during simulation but the number of channels (columns) must remain constant. For more information, see Variable-Size Signals in Code.
Dependencies
This input is accepted only when you set ChannelFiltering to true.
Data Types: single | double
Complex Number Support: Yes
Initial time offset in seconds, specified as a nonnegative scalar.
When mod(inittime/SampleRate) is nonzero, the initial time offset is rounded up to the
nearest sample position.
Data Types: single | double
Output Arguments
Output signal, returned as an
NS-by-1 vector of complex values with
the same dimension and data precision as the input signal X.
Dependencies
This output is returned only when you set ChannelFiltering to true.
Output path gains, returned as complex values in an
NS-by-NP
matrix. NP is the number of discrete
delay paths determined by length(PathDelays).
When you set the
ChannelFilteringproperty tofalse:NS =
NumSamples.Set the data type of this output by using the
OutputDataTypeproperty.
When you set the
ChannelFilteringproperty totrue:When
PathGainSampleRateis'signal', NS=length(X).When
PathGainSampleRateis'auto', NS = max(1, ceil(length(X)×PathGainSampleRate/SampleRate)).The data type of this output is specified by the
OutputDataTypeproperty.
Dependencies
This output is returned only when you set PathGainsOutputPort to true.
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)
Examples
Produce the same multipath Rayleigh fading channel response by using two different methods for random number generation. The multipath Rayleigh 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 these two methods.
Apply 8-PSK modulation to randomly generated data.
M = 8; phaseOffset = pi/M; insig = randi([0,M-1],1024,1); channelInput = pskmod(insig,M,phaseOffset);
Create a multipath Rayleigh fading channel System object, specifying the random number generation method as the my19937ar algorithm and the random number seed as 22.
rayleighchan = comm.RayleighChannel( ... SampleRate=10e3, ... PathDelays=[0 1.5e-4], ... AveragePathGains=[2 3], ... NormalizePathGains=true, ... MaximumDopplerShift=30, ... DopplerSpectrum={doppler('Gaussian',0.6),doppler('Flat')}, ... RandomStream='mt19937ar with seed', ... Seed=22, ... PathGainsOutputPort=true);
Filter the modulated data by using the multipath Rayleigh fading channel System object.
[chanOut1,pathGains1] = rayleighchan(channelInput);
Set the System object to use the global stream for random number generation.
release(rayleighchan);
rayleighchan.RandomStream = 'Global stream';Set the global stream to have the same seed that you specified when creating the multipath Rayleigh fading channel System object.
rng(22)
Filter the modulated data by using the multipath Rayleigh fading channel System object again.
[chanOut2,pathGains2] = rayleighchan(channelInput);
Verify that the channel and path gain outputs are the same for each of the two methods.
isequal(chanOut1,chanOut2)
ans = logical
1
isequal(pathGains1,pathGains2)
ans = logical
1
Produce the multipath Rayleigh fading channel response by using two different path gain sampling rates. The multipath Rayleigh fading channel System object allows you to set the path gain sampling rate equal to the signal sampling rate or a lower rate computed based on the configuration of the object.
Apply 32-QAM modulation to randomly generated data.
M = 32; spf = 2^12; insig = randi([0,M-1],spf,1); channelInput = qammod(insig,M); numFrames = 2e4;
Create a multipath Rayleigh fading channel System object with three paths. Before comparing the execution times, run once to load the object.
rayleighchan = comm.RayleighChannel( ... SampleRate=20e6, ... PathDelays=[0 1.5e-7 1.5e-7], ... AveragePathGains=[2 3 5], ... NormalizePathGains=true, ... MaximumDopplerShift=30, ... DopplerSpectrum= ... {doppler('Jakes'),doppler('Flat'),doppler('Bell')}, ... RandomStream='mt19937ar with seed', ... Seed=22, ... PathGainsOutputPort=true)
rayleighchan =
comm.RayleighChannel with properties:
SampleRate: 20000000
PathGainSampleRate: 'signal'
PathDelays: [0 1.5000e-07 1.5000e-07]
AveragePathGains: [2 3 5]
NormalizePathGains: true
MaximumDopplerShift: 30
DopplerSpectrum: {[1×1 struct] [1×1 struct] [1×1 struct]}
ChannelFiltering: true
PathGainsOutputPort: true
Show all properties
rayleighchan(channelInput);
Use the info object function to show the configuration. Filter the modulated data by using the multipath Rayleigh fading channel System object. Show the time required to filter a number of frames data with the path gain sampling rate equal to the signal sampling rate.
info(rayleighchan)
ans = struct with fields:
ChannelFilterCoefficients: [3×4 double]
ChannelFilterDelay: 0
NumSamplesProcessed: 4096
PathGainSampleRate: 20000000
tic for ii=1:numFrames [chanOut1,pathGains1] = rayleighchan(channelInput); end toc
Elapsed time is 7.276676 seconds.
Release the object and change the PathGainSampleRate to 'auto'. Use the info object function to show the configuration. Repeat the Rayleigh channel filtering of the modulated data and show the time required to filter the same number of frames data with the lower path gain sampling rate computed by the object.
release(rayleighchan);
rayleighchan.PathGainSampleRate = 'auto';
rayleighchan(channelInput);
info(rayleighchan)ans = struct with fields:
ChannelFilterCoefficients: [3×4 double]
ChannelFilterDelay: 0
NumSamplesProcessed: 4096
PathGainSampleRate: 300.0030
tic for ii=1:numFrames [chanOut2,pathGains2] = rayleighchan(channelInput); end toc
Elapsed time is 3.796910 seconds.
Display the impulse and frequency responses of a frequency-selective multipath Rayleigh fading channel that is configured to disable channel filtering.
Define simulation variables. Specify path delays and gains by using the ITU pedestrian B channel configuration.
fs = 3.84e6; % Sample rate in Hz pathDelays = [0 200 800 1200 2300 3700]*1e-9; % in seconds avgPathGains = [0 -0.9 -4.9 -8 -7.8 -23.9]; % dB fD = 50; % Max Doppler shift in Hz
Create a multipath Rayleigh fading channel System object to visualize the impulse response and frequency response plots.
rayleighchan = comm.RayleighChannel('SampleRate',fs, ... 'PathDelays',pathDelays, ... 'AveragePathGains',avgPathGains, ... 'MaximumDopplerShift',fD, ... 'ChannelFiltering',false, ... 'Visualization','Impulse and frequency responses');
Visualize the channel response by running the multipath Rayleigh fading channel System object with no input signal. 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.
rayleighchan();


Show that the channel state is maintained for discontinuous transmissions by using multipath Rayleigh fading channel System objects that use the sum-of-sinusoids technique. Observe discontinuous channel response segments overlaid on a continuous channel response.
Set the channel properties.
fs = 1000; % Sample rate (Hz) pathDelays = [0 2.5e-3]; % In seconds pathPower = [0 -6]; % In dB fD = 5; % Maximum Doppler shift (Hz) ns = 1000; % Number of samples nsdel = 100; % Number of samples for delayed paths
Define a continuous time span and three discontinuous time segments over which to plot and view the channel response. View a 1000-sample continuous channel response that starts at time 0 and three 100-sample channel responses that start at times 0.1, 0.4, and 0.7 seconds, respectively.
to0 = 0.0; to1 = 0.1; to2 = 0.4; to3 = 0.7; 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
Create a frequency-flat multipath Rayleigh fading System object, specifying a 1000 Hz sampling rate, the sum-of-sinusoids fading technique, disabled channel filtering, and the number of samples to view. Specify a seed value so that results can be repeated. Use the default InitialTime property setting so that the fading channel is simulated from time 0.
rayleighchan1 = comm.RayleighChannel('SampleRate',fs, ... 'MaximumDopplerShift',fD, ... 'RandomStream','mt19937ar with seed', ... 'Seed',17, ... 'FadingTechnique','Sum of sinusoids', ... 'ChannelFiltering',false, ... 'NumSamples',ns);
Create a clone of the multipath Rayleigh fading channel System object. In the cloned object, set the number of samples to view for the delayed paths. Also configure the initial time source as an input so that you can specify the fading channel offset time as an input argument when using the System object.
rayleighchan2 = clone(rayleighchan1);
rayleighchan2.NumSamples = nsdel;
rayleighchan2.InitialTimeSource = 'Input port';Save the path gain output for the continuous channel response by using the rayleighchan1 object and for the discontinuous delayed channel responses by using the rayleighchan2 object with initial time offsets are provided as input arguments.
pg0 = rayleighchan1(); pg1 = rayleighchan2(to1); pg2 = rayleighchan2(to2); pg3 = rayleighchan2(to3);
Compare the number of samples processed by the two channels by using the info object function. The rayleighchan1 object processed 1000 samples, while the rayleighchan2 object processed only 300 samples.
G = info(rayleighchan1); H = info(rayleighchan2); [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. Because the channel characteristics are maintained even when data is not transmitted, the alignment of the two plots shows that the sum-of-sinusoids technique is suited to the simulation of packetized data.
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')

Reproduce the multipath Rayleigh fading channel output across multiple frames by using the ChannelFilterCoefficients property returned by the info object function of the comm.RayleighChannel System object.
Create a multipath Rayleigh fading channel System object, defining two paths. Generate data to pass through the channel.
rayleighchan = comm.RayleighChannel( ... 'SampleRate',1000, ... 'PathDelays',[0 1.5e-3], ... 'AveragePathGains',[0 -3], ... 'PathGainsOutputPort',true)
rayleighchan =
comm.RayleighChannel with properties:
SampleRate: 1000
PathGainSampleRate: 'signal'
PathDelays: [0 0.0015]
AveragePathGains: [0 -3]
NormalizePathGains: true
MaximumDopplerShift: 1.0000e-03
DopplerSpectrum: [1×1 struct]
ChannelFiltering: true
PathGainsOutputPort: true
Show all properties
data = randi([0 1],600,1);
Pass data through the channel. Assign the ChannelFilterCoefficients property value to the variable coeff. Within a for loop, calculate the fractional delayed input signal at the path delay locations stored in coeff, apply the path gains, and sum the results for all of the paths. Compare the output of the multipath Rayleigh fading channel System object (chanout1) to the output reproduced using the path gains and the ChannelFilterCoefficients property of the multipath Rayleigh fading channel System object (chanout2).
chaninfo = info(rayleighchan); coeff = chaninfo.ChannelFilterCoefficients; Np = length(rayleighchan.PathDelays); state = zeros(size(coeff,2)-1,size(coeff,1)); nFrames = 10; chkChan = zeros(nFrames,1); for jj = 1 : nFrames data = randi([0 1],600,1); [chanout1,pg] = rayleighchan(data); fracdelaydata = zeros(size(data,1),Np); % Calculate the fractional delayed input signal. for ii = 1:Np [fracdelaydata(:,ii),state(:,ii)] = ... filter(coeff(ii,:),1,data,state(:,ii)); end % Apply the path gains and sum the results for all of the paths. % Compare the channel outputs. chanout2 = sum(pg .* fracdelaydata,2); chkChan(jj) = isequal(chanout1,chanout2); end chkChan'
ans = 1×10
1 1 1 1 1 1 1 1 1 1
Verify that the autocorrelation of the path gain output from the Rayleigh channel System object is a Bessel function. The results in [ 1 ] and Appendix A of [ 2 ], show that when the autocorrelation of the path gain outputs is a Bessel function, the Doppler spectrum is Jakes-shaped.
Initialize simulation parameters.
Rsym = 9600; % Input symbol rate (symbols/s) sps = 10; % Number of samples per input symbol Fs = sps*Rsym; % Input sampling frequency (samples/s) Ts = 1/Fs; % Input sampling period (s) numsym = 1e6; % Number of input symbols to simulate numsamp = numsym*sps; % Number of channel samples to simulate fd = 100; % Maximum Doppler frequency shift (Hz) num_acsamp = 5000; % Number of samples of autocovariance % of complex fading process calculated numtx = 1; % Number of transmit antennas numrx = 1; % Number of receive antennas numsin = 48; % Number of sinusoids frmLen = 10000; numFrames = numsamp/frmLen;
Configure a Rayleigh channel System object.
chan = comm.RayleighChannel( ... 'FadingTechnique','Sum of sinusoids', ... 'NumSinusoids',numsin, ... 'RandomStream','mt19937ar with seed', ... 'PathDelays',0, ... 'AveragePathGains',0, ... 'SampleRate',Fs, ... 'MaximumDopplerShift',fd, ... 'PathGainsOutputPort',true);
Apply DPSK modulation to a random bit stream.
tx = randi([0 1],numsamp,numtx); % Random bit stream dpskSig = dpskmod(tx,2); % DPSK signal
Pass the modulated signal through the channel.
outsig = zeros(numsamp,numrx); pg_rx = zeros(numsamp,numrx,numtx); for frmNum = 1:numFrames [outsig((1:frmLen)+(frmNum-1)*frmLen,:),pathGains] = ... chan(dpskSig((1:frmLen)+(frmNum-1)*frmLen,:)); for i = 1:numrx pg_rx((1:frmLen)+(frmNum-1)*frmLen,i,:) = ... pathGains(:,:,:,i); end end
Using the channel path gains received per antenna, compute the autocovariance of the fading process for each transmit-receive path.
autocov = zeros(frmLen+1,numrx,numtx); autocov_normalized_real = zeros(num_acsamp+1,numrx,numtx); autocov_normalized_imag = zeros(num_acsamp+1,numrx,numtx); for i = 1:numrx % Compute autocovariance of simulated complex fading process for j = 1:numtx autocov(:,i,j) = xcov(pg_rx(:,i,j),num_acsamp); % Real part of normalized autocovariance autocov_normalized_real(:,i,j) = ... real(autocov(num_acsamp+1:end,i,j) ... / autocov(num_acsamp+1,i,j)); % Imaginary part of normalized autocovariance autocov_normalized_imag(:,i,j) = ... imag(autocov(num_acsamp+1:end,i,j) ... / autocov(num_acsamp+1,i,j)); end end
Compute the theoretical autocovariance of the complex fading process by using the besselj function.
Rrr = zeros(1,num_acsamp+1); for n = 1:1:num_acsamp+1 Rrr(n) = besselj(0,2*pi*fd*(n-1)*Ts); end Rrr_normalized = Rrr/Rrr(1);
Display the autocovariance to compare the results from the Rayleigh channel System object and the besselj function.
subplot(2,1,1) plot(autocov_normalized_real,'b-') hold on plot(Rrr_normalized,'r-') hold off legend('comm.RayleighChannel', ... 'Bessel function of the first kind') title('Autocovariance of Real Part of Rayleigh Process') subplot(2,1,2) plot(autocov_normalized_imag) legend('comm.RayleighChannel') title('Autocovariance of Imaginary Part of Rayleigh Process')

As computed below, the mean square error comparing the results from the Rayleigh channel object versus the Bessel function is insignificant.
act_mse_real = ... sum((autocov_normalized_real-repmat(Rrr_normalized.',1,numrx,numtx)).^2,1) ... / size(autocov_normalized_real,1)
act_mse_real = 7.0043e-08
act_mse_imag = sum((autocov_normalized_imag-0).^2,1) ...
/ size(autocov_normalized_imag,1)act_mse_imag = 4.1064e-07
References
1. Dent, P., G.E. Bottomley, and T. Croft. “Jakes Fading Model Revisited.” Electronics Letters 29, no. 13 (1993): 1162. https://doi.org/10.1049/el:19930777.
2. Pätzold, Matthias. Mobile Fading Channels. Chichester, UK: John Wiley & Sons, Ltd, 2002. https://doi.org/10.1002/0470847808.
Compute and plot the empirical and theoretical probability density function (PDF) for a Rayleigh channel with one path.
Initialize parameters and create a Rayleigh channel System object that does not apply channel filtering.
Ns = 1.92e6; Rs = 1.92e6; dopplerShift = 2000; chan = comm.RayleighChannel( ... 'SampleRate',Rs, ... 'PathDelays',0, ... 'AveragePathGains',0, ... 'MaximumDopplerShift',dopplerShift, ... 'ChannelFiltering',false, ... 'NumSamples',Ns, ... 'FadingTechnique','Sum of sinusoids');
Compute and plot the empirical and theoretical PDF for the Rayleigh channel, by using the fitdist (Statistics and Machine Learning Toolbox) and pdf (Statistics and Machine Learning Toolbox) functions.
figure; hold on; % Empirical PDF plot gain = chan(); pd = fitdist(abs(gain),'Kernel','BandWidth',.01); r = 0:.1:3; y = pdf(pd,r); plot(r,y) % Theoretical PDF plot exp_pdf_amplitude = raylpdf(r,0.7); plot(r,exp_pdf_amplitude') legend('Empirical','Theoretical') title('Empirical and Theoretical PDF Curves')

More About
The cutoff frequency factor, fc, is dependent on the type of Doppler spectrum.
For any Doppler spectrum type other than Gaussian and bi-Gaussian, fc equals 1.
For a
doppler('Gaussian')spectrum type, fc equalsNormalizedStandardDeviation.For a
doppler('BiGaussian')spectrum type:If the
PowerGains(1)andNormalizedCenterFrequencies(2)field values are both0, then fc equalsNormalizedStandardDeviation(1).If the
PowerGains(2)andNormalizedCenterFrequencies(1)field values are both0, then fc equalsNormalizedStandardDeviation(2).If the
NormalizedCenterFrequenciesfield value is[0,0]and theNormalizedStandardDeviationfield has two identical elements, then fc equalsNormalizedStandardDeviation(1).In all other cases, fc equals 1.
References
[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.
Extended Capabilities
Usage notes and limitations:
To generate C code, set the
DopplerSpectrumproperty to a single Doppler spectrum structure.Code generation is available only when you set the
Visualizationproperty to'Off'.See System Objects in MATLAB Code Generation (MATLAB Coder).
Version History
Introduced in R2013bThe object adds the PathGainSampleRate property. When you set
PathGainSampleRate to 'auto', the object uses
a path gain sampling rate such that SampleRate/PathGainSampleRate is an integer and
PathGainSampleRate is at least 10 times higher than the
MaximumDopplerShift
property value. A lower path gain sampling rate reduces object processing time.
The channel visualization feature now presents:
Configuration settings in the bottom toolbar on the plot window.
Plots side-by-side in one window when you select the
Impulse and frequency responsechannel visualization option.
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)