www.gusucode.com > wlan 源码程序 matlab案例代码 > wlan/WLANChannelModelsExample.m

    %% WLAN Channel Models
% This example demonstrates passing WLAN VHT, HT, and non-HT format
% waveforms through appropriate fading channel models. When simulating a
% WLAN communications link, viable options for channel modeling include the
% TGn and TGac models from WLAN System Toolbox(TM) and the AWGN and 802.11g
% models from Communications System Toolbox(TM). In this example, it is
% sufficient to set the channel model sampling frequency to match the
% channel bandwidth because no front-end filtering is applied to the signal
% and the oversampling rate is 1.
%%
% In each section, you create a waveform and transmit it through a fading
% channel with noise added. Then you use a spectrum analyzer to display the
% waveform before and after it passes through the noisy fading channel.

%% Pass VHT Waveform Through TGac SISO Channel
% Create a  bit stream to use when generating the WLAN VHT format waveform.
bits = randi([0 1],1000,1);
%%
% Create a VHT configuration object, and generate an 80 MHz VHT waveform.
% Calculate the signal power.
vht = wlanVHTConfig;
preChVHT = wlanWaveformGenerator(bits,vht);

%%
% Pass the signal through a TGac SISO channel with AWGN noise (SNR=10 dB)
% and a receiver with a 9 dB noise figure. Recall that the channel model
% sampling frequency is equal to the bandwidth in this example. Set
% parameters using |Name,Value| pairs.
%%
% Create a TGac channel object. Set the channel model sampling frequency
% and channel bandwidth, enable path loss and shadowing, and use the
% Model-D delay profile.
cbw = vht.ChannelBandwidth;
fs = 80e6; % Channel model sampling frequency equals the channel bandwidth
tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',cbw, ...
    'LargeScaleFadingEffect','Pathloss and shadowing', ...
    'DelayProfile','Model-D');

%%
% Create an |<docid:comm_ref.fp292537 AWGNChannel>| object with SNR = 10
% dB. Determine the signal power in Watts, accounting for the TGac large
% scale fading pathloss.
preChSigPwr_dB = 10*log10(mean(abs(preChVHT)));
sigPwr = 10^((preChSigPwr_dB-tgacChan.info.Pathloss)/10);

chNoise = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)',...
    'SNR',10,'SignalPower', sigPwr);
%%
% Pass the VHT waveform through a 2x2 TGac channel and add the AWGN channel
% noise.
postChVHT = chNoise(tgacChan(preChVHT));
%%
% Create another |<docid:comm_ref.fp292537 AWGNChannel>| object to add
% receiver noise.
rxNoise = comm.AWGNChannel('NoiseMethod','Variance', ...
    'VarianceSource','Input port');
%%
% Pass the VHT waveform through the receiver. Choose an appropriate noise
% variance, nVar, to set the receiver noise level. Here, the receiver noise
% level is based on the noise variance for a receiver with a 9 dB noise
% figure. |nVar| = _kTBF_, where _k_ is Boltzmann's constant, _T_ is the
% ambient temperature of 290 K, _B_ is the bandwidth, and _F_ is the
% receiver noise figure.
nVar = 10^((-228.6 + 10*log10(290) + 10*log10(fs) + 9)/10);

rxVHT = rxNoise(postChVHT,nVar);
%%
% Display a spectrum analyzer with before-channel and after-channel
% waveforms. Use |SpectralAverages| = 10 to reduce noise in the plotted
% signals.
title = '80 MHz VHT Waveform Before and After TGac Channel';
saScope = dsp.SpectrumAnalyzer('SampleRate',fs,'ShowLegend',true,...
    'SpectralAverages',10,'Title',title,'ChannelNames',{'Before','After'});
saScope([preChVHT,rxVHT])
%%
% Path loss accounts for the roughly 50 to 60 dB of separation between the
% waveform before and after it passes through the TGac channel. The path
% loss results from the default transmitter-to-receiver distance of 3
% meters, and from shadowing effects. The signal level variation shows the
% frequency selectivity of the delay profile across the frequency spectrum.

%% Pass HT Waveform Through TGn SISO Channel
% Create a  bit stream to use when generating the WLAN HT format waveform.
bits = randi([0 1],1000,1);
%%
% Create an HT configuration object, and generate an HT waveform.
ht = wlanHTConfig;
preChHT = wlanWaveformGenerator(bits,ht);
%%
% Pass the signal through a TGn SISO channel with AWGN noise (SNR=10 dB)
% and a receiver with a 9 dB noise figure. Recall that the channel model
% sampling frequency is equal to the bandwidth in this example. Set
% parameters using |Name,Value| pairs.
%%
% Create a TGn channel object. Set the channel model sampling frequency and
% channel bandwidth, enable path loss and shadowing, and use the Model-F
% delay profile.
fs = 20e6; % Channel model sampling frequency equals the channel bandwidth
tgnChan = wlanTGnChannel('SampleRate',fs,'LargeScaleFadingEffect', ...
    'Pathloss and shadowing','DelayProfile','Model-F');
%%
% Pass the HT waveform through a TGn channel. Use the
% |<docid:comm_ref.fp1221678 awgn>| function to add channel noise at an SNR
% level of 10 dB.
postChHT = awgn(tgnChan(preChHT),10,'measured');

%%
% Create an |<docid:comm_ref.fp292537 AWGNChannel>| object to add receiver
% noise.
rxNoise = comm.AWGNChannel('NoiseMethod','Variance', ...
    'VarianceSource','Input port');
%%
% Pass the HT waveform through the  receiver. Choose an appropriate noise
% variance, nVar, for setting the receiver noise level. Here, the receiver
% noise is based on the noise variance for a receiver with a 9 dB noise
% figure. |nVar| = _kTBF_, where _k_ is Boltzmann's constant, _T_ is the
% ambient temperature of 290 K, _B_ is the bandwidth, and _F_ is the
% receiver noise figure.
nVar = 10^((-228.6 + 10*log10(290) + 10*log10(fs) + 9)/10);

rxHT = rxNoise(postChHT, nVar);
%%
% Display a spectrum analyzer with before-channel and after-channel
% waveforms. Use |SpectralAverages| = 10 to reduce noise in the plotted
% signals.
title = '20 MHz HT Waveform Before and After TGn Channel';
saScope = dsp.SpectrumAnalyzer('SampleRate',fs,'ShowLegend',true,...
    'SpectralAverages',10,'Title',title,'ChannelNames',{'Before','After'});
saScope([preChHT,postChHT])
%%
% Path loss accounts for the roughly 50 to 60 dB of separation between the
% waveform before and after it passes through the TGn channel. The path
% loss results from the default transmitter-to-receiver distance of 3
% meters, and from shadowing effects. The signal level variation shows the
% frequency selectivity of the delay profile across the frequency spectrum.

%% Pass Non-HT Waveform Through 802.11g Channel
% Create a  bit stream to use when generating the WLAN Non-HT format
% waveform.
bits = randi([0 1],1000,1);
%%
% Create a non-HT configuration object, and generate a non-HT waveform.
nht = wlanNonHTConfig;
preChNonHT = wlanWaveformGenerator(bits,nht);
%%
% Calculate free-space path loss for a transmitter-to-receiver separation
% distance of 3 meters. Create an 802.11g channel object with a 3 Hz
% maximum Doppler shift and an RMS path delay equal to two times the sample
% time. Recall that the channel model sampling frequency is equal to the
% bandwidth in this example. Create an AWGN channel object.
dist = 3;
fc = 2.4e9;
pathLoss = 10^(-log10(4*pi*dist*(fc/3e8)));
fs = 20e6; % Channel model sampling frequency equals the channel bandwidth
trms = 2/fs;
ch802 = stdchan(1/fs,dist,'802.11g',trms);
%%
% Pass the non-HT waveform through an 802.11g channel. Use the
% |<docid:comm_ref.fp1221678 awgn>| function to add channel noise at an SNR
% level of 10 dB.
postChNonHT = awgn(filter(ch802,preChNonHT),10,'measured');
%%
% Create an |<docid:comm_ref.fp292537 AWGNChannel>| object to add receiver
% noise.
rxNoise = comm.AWGNChannel('NoiseMethod','Variance', ...
    'VarianceSource','Input port');
%%
% Pass the non-HT waveform through the  receiver. Choose an appropriate
% noise variance, |nVar|, for setting the receiver noise level. Here, the
% receiver noise is based on the noise variance for a receiver with a 9 dB
% noise figure. |nVar| = _kTBF_, where _k_ is Boltzmann's constant, _T_ is
% the ambient temperature of 290 K, _B_ is the bandwidth, and _F_ is the
% receiver noise figure.
nVar = 10^((-228.6 + 10*log10(290) + 10*log10(fs) + 9)/10);

rxNonHT = rxNoise(postChNonHT, nVar)* pathLoss;
%%
% Display a spectrum analyzer with before-channel and after-channel
% waveforms. Use |SpectralAverages| = 10 to reduce noise in the plotted
% signals.
title = '20 MHz Non-HT Waveform Before and After 802.11g Channel';
saScope = dsp.SpectrumAnalyzer('SampleRate',fs,'ShowLegend',true,...
    'SpectralAverages',10,'Title',title,'ChannelNames',{'Before','After'});
saScope([preChNonHT,rxNonHT])
%%
% Free-space path loss accounts for the roughly 50 to 60 dB of separation
% between the waveform before and after it passes through the 802.11g
% channel. The path loss results from the specified transmitter-to-receiver
% distance of 3 meters, and from shadowing effects. The signal level
% variation shows the frequency selectivity of the delay profile across the
% frequency spectrum.

%% Pass VHT Waveform Through TGac MIMO Channel
% Create a  bit stream to use when generating the WLAN VHT format waveform.
bits = randi([0 1],1000,1);
%%
% Create a multi-user VHT configuration object, and generate a VHT
% waveform. Set the number of transmit antennas to four. Set the number of
% space-time streams and the number of receive antennas to 3. Because the
% number of transmit antennas is not equal to the number of space-time
% streams, the spatial mapping is not direct. Set the spatial mapping to
% Hadamard.
ntx = 4;
nsts = 3;
nrx = 3;
vht = wlanVHTConfig('NumTransmitAntennas',ntx, ...
    'NumSpaceTimeStreams',nsts,'SpatialMapping','Hadamard');
preChVHT = wlanWaveformGenerator(bits,vht);
%%
% Create TGac MIMO channel and AWGN channel objects. Recall that the
% channel model sampling frequency is equal to the bandwidth in this
% example. Disable large-scale fading effects.
cbw = vht.ChannelBandwidth;
fs = 80e6; % Channel model sampling frequency equals the channel bandwidth
tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',cbw,...
    'NumTransmitAntennas',ntx,'NumReceiveAntennas',nrx);
tgacChan.LargeScaleFadingEffect = 'None';
%%
% Pass the VHT waveform through a TGac channel. Use the
% |<docid:comm_ref.fp1221678 awgn>| function to add channel noise at an SNR
% level of 10 dB.
postChVHT = awgn(tgacChan(preChVHT),10,'measured');
%%
% Create an |<docid:comm_ref.fp292537 AWGNChannel>| object to add
% receiver noise.
rxNoise = comm.AWGNChannel('NoiseMethod','Variance', ...
    'VarianceSource','Input port');
%%
% Pass the multi-user VHT waveform through a noisy TGac channel. Choose an
% appropriate noise variance, nVar, for setting the AWGN level. Here, the
% AWGN level is based on the noise variance for a receiver with a 9 dB
% noise figure. |nVar| = _kTBF_, where _k_ is Boltzmann's constant, _T_ is
% the ambient temperature of 290 K, _B_ is the bandwidth, and _F_ is the
% receiver noise figure.
nVar = 10^((-228.6 + 10*log10(290) + 10*log10(fs) + 9)/10);

rxVHT = rxNoise(postChVHT,nVar);
%%
% Display a spectrum analyzer showing the multiple streams after the
% channel effects have been added. Use |SpectralAverages| = 10 to reduce
% noise in the plotted signals.
title = '80 MHz VHT 4x3 MIMO Waveform After TGac Channel';
saScope = dsp.SpectrumAnalyzer('SampleRate',fs,'ShowLegend',true,...
    'SpectralAverages',10,'Title',title,'ChannelNames', ...
    {'RX1','RX2','RX3'});
saScope(rxVHT)
%%
% The overlaid signals show the TGac channel variation between the received
% streams.

%% References
%%
% [1] Erceg, V., L. Schumacher, P. Kyritsi, et al. _TGn Channel Models_.
% Version 4. IEEE 802.11-03/940r4, May 2004.
%%
% [2] Breit, G., H. Sampath, S. Vermani, et al. _TGac Channel Model
% Addendum_. Version 12. IEEE 802.11-09/0308r12, March 2010.