gusucode.com > UWB_matlab源码程序 > CP0802/cp0802_IEEEuwb.m
% % FUNCTION 8.8 : "cp0802_IEEEuwb" % % Generates the channel impulse response for a multipath % channel according to the statistical model proposed by % the IEEE 802.15.SG3a. % % 'fc' is the sampling frequency % 'TMG' is the total multipath gain % % The function returns: % 1) the channel impulse response 'h0' % 2) the equivalent discrete-time impulse response 'hf' % 3) the value of the Observation Time 'OT' % 4) the value of the resolution time 'ts' % 5) the value of the total multipath gain 'X' % % Programmed by Guerino Giancola % function [h0,hf,OT,ts,X] = cp0802_IEEEuwb(fc,TMG); % ---------------------------- % Step Zero - Input parameters % ---------------------------- OT = 300e-9; % Observation Time [s] ts = 2e-9; % time resolution [s] % i.e. the 'bin' duration LAMBDA = 0.0667*1e9; % Cluster Arrival Rate (1/s) lambda = 2.1e9; % Ray Arrival Rate (1/s) GAMMA = 24e-9; % Cluster decay factor gamma = 12e-9; % Ray decay factor sigma1 = 10^(3.3941/10); % Stdev of the cluster fading sigma2 = 10^(3.3941/10); % Stdev of the ray fading sigmax = 10^(3/10); % Stdev of lognormal shadowing % ray decay threshold rdt = 0.001; % rays are neglected when exp(-t/gamma)<rdt % peak treshold [dB] PT = 50; % rays are considered if their amplitude is % whithin the -PT range with respect to the peak G = 1; % G = 1 graphical output % G = 0 no graphical output % ----------------------------------- % Step One - Cluster characterization % ----------------------------------- dt = 1 / fc; % sampling time T = 1 / LAMBDA; % Average cluster inter-arrival time % [s] t = 1 / lambda; % Average ray inter-arrival time [s] i = 1; CAT(i)=0; % First Cluster Arrival Time next = 0; while next < OT i = i + 1; next = next + expinv(rand,T); if next < OT CAT(i)= next; end end % while remaining > 0 % -------------------------------- % Step Two - Path characterization % -------------------------------- NC = length(CAT); % Number of observed clusters logvar = (1/20)*((sigma1^2)+(sigma2^2))*log(10); omega = 1; pc = 0; % path-counter for i = 1 : NC pc = pc + 1; CT = CAT(i); % cluster time HT(pc) = CT; next = 0; mx = 10*log(omega)-(10*CT/GAMMA); mu = (mx/log(10))-logvar; a = 10^((mu+(sigma1*randn)+(sigma2*randn))/20); HA(pc) = ((rand>0.5)*2-1).*a; ccoeff = sigma1*randn; % fast fading on the cluster while exp(-next/gamma)>rdt pc = pc + 1; next = next + expinv(rand,t); HT(pc) = CT + next; mx = 10*log(omega)-(10*CT/GAMMA)-(10*next/GAMMA); mu = (mx/log(10))-logvar; a = 10^((mu+ccoeff+(sigma2*randn))/20); HA(pc) = ((rand>0.5)*2-1).*a; end end % for i = 1 : NC % Weak peak filtering peak = abs(max(HA)); limit = peak/10^(PT/10); HA = HA .* (abs(HA)>(limit.*ones(1,length(HA)))); for i = 1 : pc itk = floor(HT(i)/dt); h(itk+1) = HA(i); end % ------------------------------------------- % Step Three - Discrete time impulse response % ------------------------------------------- N = floor(ts/dt); L = N*ceil(length(h)/N); h0 = zeros(1,L); hf = h0; h0(1:length(h)) = h; for i = 1 : (length(h0)/N) tmp = 0; for j = 1 : N tmp = tmp + h0(j+(i-1)*N); end hf(1+(i-1)*N) = tmp; end % Energy normalization E_tot=sum(h.^2); h0 = h0 / sqrt(E_tot); E_tot=sum(hf.^2); hf = hf / sqrt(E_tot); % Log-normal shadowing mux = ((10*log(TMG))/log(10)) - (((sigmax^2)*log(10))/20); X = 10^((mux+(sigmax*randn))/20); h0 = X.*h0; hf = X.*hf; % ----------------------------- % Step Four - Graphical Output % ----------------------------- if G Tmax = dt*length(h0); time = (0:dt:Tmax-dt); figure(1) S1=stem(time,h0); AX=gca; set(AX,'FontSize',14); T=title('Channel Impulse Response'); set(T,'FontSize',14); x=xlabel('Time [s]'); set(x,'FontSize',14); y=ylabel('Amplitude Gain'); set(y,'FontSize',14); figure(2) S2=stairs(time,hf); AX=gca; set(AX,'FontSize',14); T=title('Discrete Time Impulse Response'); set(T,'FontSize',14); x=xlabel('Time [s]'); set(x,'FontSize',14); y=ylabel('Amplitude Gain'); set(y,'FontSize',14); end