www.gusucode.com > LTE仿真Matlab源码 > LTE_winner_channel_model.m
function [channel_out, delays, out] = LTE_winner_channel_model(N_subframes,Arrays,varargin) % LTE winner channel model - to generate channel realization using Winner % Model II [1] % % Author: Michal Simko, msimko@nt.tuwien.ac.at % (c) by INTHFT % www.nt.tuwien.ac.at % % [1] IST-WINNER D1.1.2 P. Ky鰏ti, et al., "WINNER II Channel Models", ver 1.1, Sept. 2007. % Available: https://www.ist-winner.org/WINNER2-Deliverables/D1.1.2v1.1.pdf % % input : N_subframes ... [1x1] number of channel realization % Arrays ... struct -> antenna specification % out ... struct -> state of previous channel generation using winner model % output: channel ... [ x ] channel matrix % delays ... [ x ] delays matrix % out ... struct -> output state of the winner model % % date of creation: 2009/10/12 % last changes: 2008/12/12 Simko global LTE_params; % add Winner Model code path path(path,'.\Winner Channel Model'); %% winner II channel model % set parameters {default option} wimpar=wimparset; wimpar.Scenario = ScenarioMapping(LTE_params.ChanMod_config.winner_settings.Scenario); wimpar.PropagCondition = LTE_params.ChanMod_config.winner_settings.PropagCondition; % [LOS,{NLOS}] switch LTE_params.ChanMod_config.filtering case 'BlockFading' Channel_Sampling_Time = LTE_params.Tsubframe; case 'FastFading' Channel_Sampling_Time = LTE_params.SamplingTime; end wimpar.SampleDensity = LTE_params.speed_of_light/(2*LTE_params.carrier_freq*Channel_Sampling_Time*LTE_params.UE_config.user_speed); % number of time samples per half wavelength [ {2} ] wimpar.NumTimeSamples = N_subframes; % number of time samples [ {100} ] wimpar.UniformTimeSampling = LTE_params.ChanMod_config.winner_settings.UniformTimeSampling; % Use same time sampling grid for all links [ yes | {no} ] wimpar.FixedPdpUsed = LTE_params.ChanMod_config.winner_settings.FixedPdpUsed; % nonrandom path delays and powers [ yes | {no}] wimpar.FixedAnglesUsed = LTE_params.ChanMod_config.winner_settings.FixedAnglesUsed; % nonrandom AoD/AoAs [ yes | {no} ] wimpar.PolarisedArrays = LTE_params.ChanMod_config.winner_settings.PolarisedArrays; % usage of dual polarised arrays [ {yes} | no ] wimpar.TimeEvolution = LTE_params.ChanMod_config.winner_settings.TimeEvolution; % usage of time evolution [ yes | {no} ] wimpar.CenterFrequency = LTE_params.carrier_freq; % carrier frequency in Herz [ {5.25e9} ] wimpar.DelaySamplingInterval = LTE_params.SamplingTime; % delay sampling grid [ {5e-9} ]LTE_params.SamplingTime wimpar.PathLossModelUsed = LTE_params.ChanMod_config.winner_settings.PathLossModelUsed; % usage of path loss model [ yes | {no} ] wimpar.ShadowingModelUsed = LTE_params.ChanMod_config.winner_settings.ShadowingModelUsed; % usage of shadow fading model [ yes | {no} ] wimpar.PathLossModel = LTE_params.ChanMod_config.winner_settings.PathLossModel; % path loss model function name [ {pathloss} ] wimpar.PathLossOption = LTE_params.ChanMod_config.winner_settings.PathLossOption; % ['{CR_light}' or 'CR_heavy' or 'RR_light' or 'RR_heavy', CR = Corridor-Room, RR = Room-Room nlos} wimpar.RandomSeed = LTE_params.ChanMod_config.winner_settings.RandomSeed; % sets random seed [ {[empty]} ] wimpar.UseManualPropCondition = LTE_params.ChanMod_config.winner_settings.UseManualPropCondition; % whether to use manual propagation condition (los/nlos) setting or not. If not, the propagation condition is drawn from probabilities. [ {yes} | no] % MsAAIdx = LTE_params.UE_config.nRX * ones(1,LTE_params.nUE); % BsAAIdxCell = {[LTE_params.BS_config.nTx + 4]}; MsAAIdx = ones(1,LTE_params.nUE); %every user is using antenna defined Arrays(1) BsAAIdxCell = {[2]}; % base station is using antenna defined Arrays(2) layoutpar=layoutparset(MsAAIdx,BsAAIdxCell,LTE_params.nUE,Arrays); layoutpar.ScenarioVector = LTE_params.ChanMod_config.winner_settings.Scenario*ones(1,LTE_params.nUE); % 1=A1, 2=A2, 3=B1, 4=B2, 5=B3, 6=B4, 7=B5a, 8=B5c, 9=B5f, 10=C1, % 11=C2, 12=C3, 13=C4, 14=D1 and 15=D2a % for more details look in ScenarioMapping.mat switch LTE_params.ChanMod_config.winner_settings.PropagCondition case 'LOS' layoutpar.PropagConditionVector =1*ones(1,LTE_params.nUE); % (NLOS=0/LOS=1) case 'NLOS' layoutpar.PropagConditionVector =0*ones(1,LTE_params.nUE); % (NLOS=0/LOS=1) end for uu = 1:LTE_params.nUE layoutpar.Stations(1,uu+1).Velocity = [LTE_params.UE_config.user_speed;0;0]; end optargin = size(varargin,2); if optargin==1 out = varargin{1}; [channel, delays, out] = wim(wimpar,layoutpar,out); elseif optargin==0 [channel, delays, out] = wim(wimpar,layoutpar); else error('Wrong number of input variables'); end delays = round(delays/LTE_params.SamplingTime); % correct sampling in the delay domain for user_i = 1:LTE_params.nUE channel{user_i}(isnan(channel{user_i})) = 0; channel_matrix_size = size(channel{user_i}); channel_matrix_size(3) = max(delays(user_i,:))+1; channel_out{user_i} = zeros(channel_matrix_size); for tap_i = 1:channel_matrix_size(3) tap_positions = find(delays(user_i,:) == tap_i-1); if sum(tap_positions)>0 channel_out{user_i}(:,:,tap_i,:) = sum(channel{user_i}(:,:,tap_positions,:),3); end end % channel normalization channel_energy = mean(sum(sum(sum(abs(channel_out{user_i}).^2,3),2),1),4); % mean channel energy = sum over transmit and receive antennas and over taps energies averaged over all realizations channel_out{user_i} = sqrt(LTE_params.UE_config.nRX * LTE_params.BS_config.nTx) * channel_out{user_i} / sqrt(channel_energy); % channel is normalized to have mean energy Nt*Nr end