git-svn-id: http://moon:8086/svn/matlab/trunk@48 801c6759-fa7c-4059-a304-17956f83a07c
61 lines
1.9 KiB
Matlab
61 lines
1.9 KiB
Matlab
function W_syms = 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 );
|
|
|
|
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
|
|
|
|
PHI = zeros(length(k2_pos));
|
|
% PHI
|
|
for k1=1:length(k2_pos)
|
|
k2 = [1:length(k2_pos)];
|
|
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);
|
|
|
|
THETA = zeros(1, length(k2_pos));
|
|
% THETA
|
|
carriers = spec_occ.kmin:spec_occ.kmax;
|
|
for k1=1:length(carriers)
|
|
k2 = [1:length(k2_pos)];
|
|
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
|
|
end
|