- fixed dF tracking

git-svn-id: http://moon:8086/svn/matlab/trunk@57 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
2015-05-02 16:53:32 +00:00
parent 7dc26d6d0b
commit f4428bb0e6
+45 -31
View File
@@ -157,10 +157,8 @@ for k=1:K,
Xlast = X;
end
if ~isempty(cp_off_)
figure;
plot(0:length(cp_off_)-1, cp_off_, 0:length(cp_off_)-1, cp_off*ones(size(cp_off_)), 'r-'); grid; title('cp_{off}')
end
figure;
plot(0:length(cp_off_)-1, cp_off_, 0:length(cp_off_)-1, cp_off*ones(size(cp_off_)), 'r-'); grid; title('cp_{off}')
df_acq_fine_ = df_acq_fine_';
@@ -249,43 +247,58 @@ fac_cell_list = ...
[23, 35, 47, 65, 77],
[]
};
symbol_counter = 0;
win_count = 0;
s = 0;
m = 0;
H_syms = [];
H_pilots = [];
sym_out = [];
kk = 1;
H_ = [];
df_track_ = [];
dw_track_ = [];
MIN_ABS_H = 1e-10;
for k=start:length(Z_)
%shifted symbol index
nn = rem(k-start-1-symbols_to_delay + symbols_per_frame, symbols_per_frame);
m = floor(nn/ofdm_drm_params.y);
n = rem(nn, ofdm_drm_params.y);
n = rem(m+symbols_to_delay-1, ofdm_drm_params.y);
[carrier_gain, phi_gain, mag_gain] = getRefGain(ofdm_drm_params, ofdm_spec_occ, symbol_counter);
[carrier_gain, phi_gain, mag_gain] = getRefGain(ofdm_drm_params, ofdm_spec_occ, s);
carrier_gain_bins = c2i(N, carrier_gain);
H_ = transpose(Z_(carrier_gain_bins, k))./(mag_gain.*exp(j*2*pi*phi_gain/1024));
if ~isempty(H_pilots)
df_track = fs/(2*pi*N)*angle( H_pilots * conj(H2_));
df_track_ = [df_track_ df_track];
end
H2_ = H_;
H_= Z_(carrier_gain_bins, k)./(mag_gain.*exp(j*2*pi*phi_gain/1024)).';
H_raw(carrier_gain_bins) = H_;
H_gain_cell{win_count+1} = transpose(H_);
ii = 1+mod(n+(0:frames_per_window-1), frames_per_window);
H_gain = [H_gain_cell{ii}];
H_gain_carriers_cell{win_count+1} = carrier_gain;
H_raw(carrier_gain_bins) = (H_);
H_gain_cell{m+1} = (H_);
H_gain_carriers_cell{m+1} = carrier_gain;
str = sprintf('Frame %d, SymCount %d, winCount %d, n=%d', k, symbol_counter, win_count, n);
if length(H_gain) == 208
str = sprintf('Frame %d, s=%d, m=%d, n=%d', k, s, m, n);
if kk > 6
ii = 1+mod(m+symbols_to_delay-1+(0:frames_per_window-1), frames_per_window);
H_gain = [H_gain_cell{ii}];
H_syms = H_gain*W_syms{n+1};
H_pilots = H_gain*W_pilots{n+1};
H_pilots = (H_gain)*W_pilots{n+1};
ZZ = Z_(carrier_indexes, k-symbols_to_delay).';
sym_eq = ZZ ./ H_syms;
hhh = H_gain_cell{mod(m-1, frames_per_window)+1};
dw_track = angle( (H_pilots) * hhh' + MIN_ABS_H);
dw_track_ = [dw_track_ dw_track];
% check for too small values
rms_H = sqrt( abs( H_syms*H_syms' )/length(H_syms) );
MIN_ABS_H = max( rms_H/20, 1e-10 ); %quick and dirty fixed settings
H_too_small_index = find( abs(H_syms)<MIN_ABS_H );
H_syms( H_too_small_index ) = MIN_ABS_H;
sym_eq = ZZ ./ H_syms;
sym_out(:, kk) = sym_eq;
if 0
subplot(2, 1, 1)
plot(1:length(hhh), abs(hhh), 'b-', 1:length(H_pilots), abs(H_pilots), 'r-'); grid;
subplot(2, 1, 2)
plot(1:length(hhh), angle(hhh), 'b-', 1:length(H_pilots), angle(H_pilots), 'r-'); grid;
title(str);
pause(0.01);
end
if 1
if show_H
H_raw(1:2:N) = H_raw(2:2:N);
subplot(3, 1, 1)
@@ -304,7 +317,7 @@ for k=start:length(Z_)
pause(0.01);
else
fac_c = fac_cell_list{mod(symbol_counter-symbols_to_delay, symbols_per_frame)+1};
fac_c = fac_cell_list{mod(s-symbols_to_delay, symbols_per_frame)+1};
if (~isempty(fac_c))
fac_i = fac_c - ofdm_spec_occ.kmin + 1;
hold on;
@@ -313,16 +326,17 @@ for k=start:length(Z_)
grid; title('FAC'); axis([-1 1 -1 1]);
hold off;
end
end
end
end
end
kk = kk + 1;
win_count = mod(win_count+1, frames_per_window);
symbol_counter = mod(symbol_counter + 1, symbols_per_frame);
m = mod(m+1, frames_per_window);
s = mod(s + 1, symbols_per_frame);
end
figure;
plot(df_track_); grid; title('df_{track}');
plot(dw_track_); grid; title('dw_{track}');
function Y = spec_order(N, X)
Y = [X(N/2+1:N)' X(1:N/2)']';