- plot raw H
- plot FAC syms

[CalcWiener]
- added sigma to PHI
- fixed fd_max and tau_max


git-svn-id: http://moon:8086/svn/matlab/trunk@47 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
2015-05-01 09:57:24 +00:00
parent b6e651271f
commit 248acd843e
2 changed files with 57 additions and 31 deletions
+15 -3
View File
@@ -5,6 +5,11 @@ function W_syms = calcWiener(drm_mode, drm_bw)
N = params.nu
sigm = 10^(-14/10);
Ns = (params.nu+params.ng);
Nu = (params.nu);
Ng = (params.ng);
frames_per_window = 2*params.y
window_delay = params.y
num_symbols_per_frame = params.nspf
@@ -12,18 +17,23 @@ 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/window_delay; % two-sided maximum doppler frequency (normalized w.r.t symbol duration Ts)
f_cut_k = 1.75*params.ng/params.nu; % two-sided maximum echo delay (normalized w.r.t useful symbol duration Tu)
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));
@@ -34,7 +44,9 @@ for d=0:window_delay-1
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_inv = inv(PHI + eye(length(PHI))*sigm);
PHI = PHI + sigm*diag(2./(ref_gain_a.^2));
PHI_inv = inv(PHI);
THETA = zeros(1, length(k2_pos));
% THETA
+42 -28
View File
@@ -224,6 +224,27 @@ symbols_to_delay = ofdm_drm_params.y;
frames_per_window = 2*ofdm_drm_params.y
H_gain_cell = cell (frames_per_window, 1);
H_gain_carriers_cell = cell (frames_per_window, 1);
H_raw = zeros(length(ofdm_spec_occ.kmin:ofdm_spec_occ.kmax),1);
fac_cell_list = ...
{
[],
[],
[13, 25, 43, 55, 67],
[15, 27, 45, 57, 69],
[17, 29, 47, 59, 71],
[19, 31, 49, 61, 73],
[9, 21, 33, 51, 63, 75],
[11, 23, 35, 53, 65, 77],
[13, 25, 37, 55, 67, 79],
[15, 27, 39, 57, 69, 81],
[17, 29, 41, 59, 71, 83],
[19, 31, 43, 61, 73],
[21, 33, 45, 63, 75],
[23, 35, 47, 65, 77],
[]
};
carriers = ofdm_spec_occ.kmin:ofdm_spec_occ.kmax;
carrier_indexes = c2i(N, carriers);
for k=start:length(Z_)
%shifted symbol index
@@ -234,7 +255,7 @@ for k=start:length(Z_)
[carrier_gain, phi_gain, mag_gain] = getRefGain(ofdm_drm_params, ofdm_spec_occ, symbol_counter);
carrier_gain_bins = c2i(N, carrier_gain);
Hp = Z_(carrier_gain_bins, k)./(mag_gain.*exp(j*2*pi*phi_gain/1024)).';
H_raw(carrier_gain_bins) = Hp;
H_gain_cell{win_count+1} = transpose(Z_(carrier_gain_bins, k)./(mag_gain.*exp(j*2*pi*phi_gain/1024)).');
ii = 1+mod(n+(0:frames_per_window-1), frames_per_window);
H_gain = [H_gain_cell{ii}];
@@ -242,41 +263,34 @@ for k=start:length(Z_)
str = sprintf('Frame %d, SymCount %d, winCount %d, n=%d', k, symbol_counter, win_count, n);
if length(H_gain) == 208
H = H_gain*W{n+1};
ZZ = Z_(carrier_indexes, k).';
sym_eq = ZZ ./ H;
sym_out(:, kk) = sym_eq;
if 1
H = H_gain*W{n+1};
ZZ = Z_(c2i(N, ofdm_spec_occ.kmin:ofdm_spec_occ.kmax), k).';
sym_out(:, kk) = ZZ ./ H;
if 1
subplot(2, 1, 1)
plot(ofdm_spec_occ.kmin:ofdm_spec_occ.kmax, abs(H)); grid; title('abs(H)'); axis([ofdm_spec_occ.kmin ofdm_spec_occ.kmax 0 15+0*max(abs(H))]); title(str);
subplot(2, 1, 2)
plot(ofdm_spec_occ.kmin:ofdm_spec_occ.kmax, angle(H)); grid; title('phi(H)'); axis([ofdm_spec_occ.kmin ofdm_spec_occ.kmax -4 4]); title(str);
else
hold on;
plot(sym_out(:, kk), '+');
hold off;
grid; title('Sym');
end
pause(0.01);
else
ii = [H_gain_carriers_cell{1:6}]
H = H_gain;
sym_out(:, kk) = 0;
subplot(2, 1, 1)
plot(abs(H)); grid; title('abs(H)');
subplot(2, 1, 2)
plot(angle(H)); grid; title('phi(H)');
H_raw(1:2:N) = H_raw(2:2:N);
subplot(2, 1, 1)
plot(carriers, abs(H_raw(carrier_indexes)), 'b-', carriers, abs(H), 'r-'); grid; title('abs(H)'); axis([ofdm_spec_occ.kmin ofdm_spec_occ.kmax 0 15+0*max(abs(H))]); title(str);
subplot(2, 1, 2)
plot(carriers, angle(H_raw(carrier_indexes)), 'b-', carriers, angle(H), 'r-'); grid; title('phi(H)'); axis([ofdm_spec_occ.kmin ofdm_spec_occ.kmax -4 4]); title(str);
pause(0.01);
else
fac_c = fac_cell_list{symbol_counter+1};
if (~isempty(fac_c))
fac_i = fac_c - ofdm_spec_occ.kmin + 1;
hold on;
plot(sym_eq(fac_i), '.', 'MarkerSize', 4);
pause(0.01);
hold off;
grid; title('FAC'); axis([-1.5 1.5 -1.5 1.5]);
end
end
end
kk = kk + 1;
win_count = mod(win_count+1, frames_per_window);
symbol_counter = symbol_counter + 1;
symbol_counter = mod(symbol_counter + 1, symbols_per_frame);
end
figure;
plot(real(sym_H'), imag(sym_H'), '+'); grid; title('Sym_{H}'); axis([-1.5 1.5 -1.5 1.5]);
function Y = spec_order(N, X)
Y = [X(N/2+1:N)' X(1:N/2)']';