No BSD License  

Highlights from
UWB channel model revised

UWB channel model revised

by

 

12 Sep 2007 (Updated )

UWB channel model implementation

multipath_sim2a(t,x,u,flag,T,nT,LAMBDA,lambda,GAMMA,gamma,sigma1_dB,sigma2_dB,std_shadow,LOSflag)
% File: multipath_sim2a.m
% Matlab Simulink IEEE 802.15.3a compliant channel model 
% Author: Tim Becker (MSEE Degree, December 2004)
% Advisor: Robert Morelos-Zaragoza. San Jose State University

function [sys,x0,str,ts] = multipath_sim2a(t,x,u,flag,T,nT,LAMBDA,lambda,GAMMA,gamma,sigma1_dB,sigma2_dB,std_shadow,LOSflag)
% Differs from multipath_sim2.m in that h begins at t=0 for NLOS channels.

v = 10000;
switch flag,

  % Initialization
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes(T,nT,v);

  % Outputs
  case 3,
    sys=mdlOutputs(t,x,u,T,LAMBDA,lambda,GAMMA,gamma,sigma1_dB,sigma2_dB,std_shadow,LOSflag,v);
    
  % Unhandled flags
  case {1, 2, 4, 9}
      sys = [];

  % Unexpected flags
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end

% end multipath_sim



%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================

function [sys,x0,str,ts]=mdlInitializeSizes(T,nT,v)

sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = v;
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);

% initialize the initial conditions
x0  = [];

% str is always an empty matrix
str = [];

% initialize the array of sample times
ts  = [T*nT*1e-9 0];

% end mdlInitializeSizes



%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================

function sys=mdlOutputs(t,x,u,T,LAMBDA,lambda,GAMMA,gamma,sigma1_dB,sigma2_dB,std_shadow,LOSflag,v)

%   returns the real impulse response of the
%   indoor multipath channel as modeled by Intel in
%   IEEE 802.15-02/279r0-SG3a and is based on the
%   Saleh-Valenzuela model with lognormal fading.
%   T is the time resolution (nsec).

sigma1 = 10^(sigma1_dB/20);
sigma2 = 10^(sigma2_dB/20);
Omega0 = 1;

if (strcmp(LOSflag,'on'))
    T1 = [0];
else
    T1 = [randn^2/(2*LAMBDA)+randn^2/(2*LAMBDA)];
end

while T1(end) <= 10*GAMMA
    dT = randn^2/(2*LAMBDA)+randn^2/(2*LAMBDA);
    T1 = [T1 T1(end)+dT];
end

for n = 1:length(T1)
    tau(n) = {[T1(n)]};
    while tau{n}(end) <= tau{n}(1)+10*gamma
        dt = randn^2/(2*lambda)+randn^2/(2*lambda);
        tau(n) = {[tau{n} tau{n}(end)+dt]};
    end
    
    mu(n) = {(10*log(Omega0)-10*T1(n)/GAMMA-10*(tau{n}-T1(n))/gamma)/log(10)-(sigma1^2+sigma2^2)*log(10)/20};
    beta(n) = {10.^((sigma1*randn(size(mu{n}))+sigma2*randn(size(mu{n}))+mu{n})/20)};
    alpha(n) = {beta{n}.*sign(rand(size(beta{n}))-0.5)};  % Intel version, +/-1
    %alpha(n) = {beta{n}.*exp(-j*2*pi*rand(size(beta{n})))};  % cell array of channel coefficients
end

maxtime = max(tau{1});  % find maximum arrival time index in cell array tau
for n = 2:length(T1)
    if max(tau{n}) > maxtime
        maxtime = max(tau{n});
    end
end

N = 32;  % oversampling factor
Nfs = N/T;
h = zeros(1,floor(maxtime*Nfs)+1);  % initialize impulse response vector
for n = 1:length(T1)
    tauN{n} = floor(tau{n}*Nfs);  % quantized time indices
end

for n = 1:length(T1)
    for m = 1:length(tau{n})
        h(tauN{n}(m)+1-tauN{1}(1)) = h(tauN{n}(m)+1-tauN{1}(1))+alpha{n}(m);  % only line different from multipath_sim2.m
    end
end

h = N*resample(h,1,N);
maxtime = ceil((10*GAMMA+10*gamma)/T);  % maximum arrival time for channel
h = h(1:maxtime);  % concatenate h to maximum channel length

E = sum(h.*conj(h));  % compute total channel energy
h = h./sqrt(E);  % normalize total energy to 1

fac = 10^(std_shadow*randn/20);
h = h.*fac;

if(length(h)<v)
    h = [h zeros(1,v-length(h))];
elseif(length(h)>v)
    h = h(1:v);
end
%length(h)
sys = real(h);

% end mdlOutputs

Contact us