function [W_syms, W_pilots] = calcWiener(drm_mode, drm_bw) % calcWiener('B', '10k'); [params, spec_occ] = drm_params(drm_mode, drm_bw); sigm = 10^(-14/10); Ns = (params.nu+params.ng); Nu = (params.nu); Ng = (params.ng); N = Nu; frames_per_window = 2*params.y; window_delay = params.y; num_symbols_per_frame = params.nspf; num_carrier_per_symbol = spec_occ.kmax - spec_occ.kmin; num_symbols_per_frame = num_symbols_per_frame * num_carrier_per_symbol; % PHI = auto-covariance-matrix f_cut_t = 0.0675*1/params.y; % two-sided maximum doppler frequency (normalized w.r.t symbol duration Ts) f_cut_k = 1.75*Ng/Nu; % two-sided maximum echo delay (normalized w.r.t useful symbol duration Tu) f_D_max = f_cut_t*12000/Ns/2 tau_max = f_cut_k*Nu/12000/2 W_syms = cell( params.y, 1 ); W_pilots = cell( params.y, 1 ); for d=0:window_delay-1 k2_pos = []; t2_pos = []; ref_gain_a = []; for s=0:frames_per_window-1 [c, p, a] = getRefGain(params, spec_occ, s+d); k2_pos = [k2_pos c]; % length = window_delay*frames_per_window t2_pos = [t2_pos ones(1, length(c))*(s)]; % length = window_delay*frames_per_window ref_gain_a = [ref_gain_a a]; end num_gain_ref_per_window = length(k2_pos); carriers = spec_occ.kmin:spec_occ.kmax; PHI = zeros(num_gain_ref_per_window); % PHI for k1=1:num_gain_ref_per_window k2 = [1:num_gain_ref_per_window]; k1_pos = k2_pos(k1); t1_pos = t2_pos(k1); PHI(k1,k2) = sinc(f_cut_k*(k1_pos-k2_pos)) .* sinc(f_cut_t*(t1_pos-t2_pos)); end PHI = PHI + sigm*diag(2./(ref_gain_a.^2)); PHI_inv = inv(PHI); % W_Syms THETA = zeros(1, num_gain_ref_per_window); % THETA for k1=1:length(carriers) k2 = [1:num_gain_ref_per_window]; k1_pos = carriers(k1); t1_pos = window_delay; THETA(k2) = sinc(f_cut_k*(k1_pos-k2_pos)) .* sinc(f_cut_t*(t1_pos-t2_pos)); W_syms{d+1}(:, k1) = transpose( THETA*PHI_inv ); end % W_Pilots [c, p, a] = getRefGain(params, spec_occ, d); THETA = zeros(1, num_gain_ref_per_window); % THETA for k1=1:length(c) k2 = [1:length(k2_pos)]; k1_pos = c(k1); t1_pos = frames_per_window-1; THETA(k2) = sinc(f_cut_k*(k1_pos-k2_pos)) .* sinc(f_cut_t*(t1_pos-t2_pos)); W_pilots{d+1}(:, k1) = transpose( THETA*PHI_inv ); end end W_syms W_pilots