function [ltmps, alpha, w] = channel (ps, pf_d, pSNR) global model; lfd_s=5000; ltaps = 1; lpow = 1; llags = 1; if (strcmp(model.multipath, 'none') ~= 1) ltaps = gen_multipath(model.multipath); llags = find (ltaps ~= 0); lpow = ltaps (llags); end lnpaths = size(llags, 2); alpha = ones(lnpaths, model.n_t); w = zeros(lnpaths, model.n_t); if (model.fading == 1) alpha = gen_rayleigh(max(pf_d), lfd_s, model.n_t, lnpaths); P_alpha = sum(alpha.^2, 2) / model.n_t, alpha = alpha ./ repmat(sqrt(P_alpha), [1 model.n_t]); end if (model.noise == 1) w = wgn(lnpaths, model.n_t, 1, 'complex'); end N_f = 10^(-pSNR / 20) w = w * N_f; ltmps = repmat(ps, [lnpaths 1]) .* alpha + w; ltmp = zeros(lnpaths, model.n_t + size(ltaps, 2)); for lp = 1:lnpaths ltmp(lp,llags(lp):model.n_t + llags(lp) - 1) = ltmps(lp,:) * lpow(lp); end ltmps = sum(ltmp(:,1:model.n_t), 1); end