- fixed dF tracking
git-svn-id: http://moon:8086/svn/matlab/trunk@57 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
+45
-31
@@ -157,10 +157,8 @@ for k=1:K,
|
|||||||
Xlast = X;
|
Xlast = X;
|
||||||
end
|
end
|
||||||
|
|
||||||
if ~isempty(cp_off_)
|
figure;
|
||||||
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}')
|
||||||
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
|
|
||||||
|
|
||||||
df_acq_fine_ = df_acq_fine_';
|
df_acq_fine_ = df_acq_fine_';
|
||||||
|
|
||||||
@@ -249,43 +247,58 @@ fac_cell_list = ...
|
|||||||
[23, 35, 47, 65, 77],
|
[23, 35, 47, 65, 77],
|
||||||
[]
|
[]
|
||||||
};
|
};
|
||||||
symbol_counter = 0;
|
s = 0;
|
||||||
win_count = 0;
|
m = 0;
|
||||||
|
|
||||||
H_syms = [];
|
H_syms = [];
|
||||||
H_pilots = [];
|
H_pilots = [];
|
||||||
sym_out = [];
|
sym_out = [];
|
||||||
kk = 1;
|
kk = 1;
|
||||||
H_ = [];
|
H_ = [];
|
||||||
df_track_ = [];
|
dw_track_ = [];
|
||||||
|
MIN_ABS_H = 1e-10;
|
||||||
|
|
||||||
for k=start:length(Z_)
|
for k=start:length(Z_)
|
||||||
|
|
||||||
%shifted symbol index
|
%shifted symbol index
|
||||||
nn = rem(k-start-1-symbols_to_delay + symbols_per_frame, symbols_per_frame);
|
n = rem(m+symbols_to_delay-1, ofdm_drm_params.y);
|
||||||
m = floor(nn/ofdm_drm_params.y);
|
|
||||||
n = rem(nn, 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);
|
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)
|
H_raw(carrier_gain_bins) = (H_);
|
||||||
df_track = fs/(2*pi*N)*angle( H_pilots * conj(H2_));
|
H_gain_cell{m+1} = (H_);
|
||||||
df_track_ = [df_track_ df_track];
|
H_gain_carriers_cell{m+1} = carrier_gain;
|
||||||
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;
|
|
||||||
|
|
||||||
str = sprintf('Frame %d, SymCount %d, winCount %d, n=%d', k, symbol_counter, win_count, n);
|
str = sprintf('Frame %d, s=%d, m=%d, n=%d', k, s, m, n);
|
||||||
if length(H_gain) == 208
|
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_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).';
|
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;
|
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
|
if show_H
|
||||||
H_raw(1:2:N) = H_raw(2:2:N);
|
H_raw(1:2:N) = H_raw(2:2:N);
|
||||||
subplot(3, 1, 1)
|
subplot(3, 1, 1)
|
||||||
@@ -304,7 +317,7 @@ for k=start:length(Z_)
|
|||||||
|
|
||||||
pause(0.01);
|
pause(0.01);
|
||||||
else
|
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))
|
if (~isempty(fac_c))
|
||||||
fac_i = fac_c - ofdm_spec_occ.kmin + 1;
|
fac_i = fac_c - ofdm_spec_occ.kmin + 1;
|
||||||
hold on;
|
hold on;
|
||||||
@@ -313,16 +326,17 @@ for k=start:length(Z_)
|
|||||||
grid; title('FAC'); axis([-1 1 -1 1]);
|
grid; title('FAC'); axis([-1 1 -1 1]);
|
||||||
hold off;
|
hold off;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
kk = kk + 1;
|
kk = kk + 1;
|
||||||
win_count = mod(win_count+1, frames_per_window);
|
m = mod(m+1, frames_per_window);
|
||||||
symbol_counter = mod(symbol_counter + 1, symbols_per_frame);
|
s = mod(s + 1, symbols_per_frame);
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
figure;
|
figure;
|
||||||
plot(df_track_); grid; title('df_{track}');
|
plot(dw_track_); grid; title('dw_{track}');
|
||||||
|
|
||||||
function Y = spec_order(N, X)
|
function Y = spec_order(N, X)
|
||||||
Y = [X(N/2+1:N)' X(1:N/2)']';
|
Y = [X(N/2+1:N)' X(1:N/2)']';
|
||||||
|
|||||||
Reference in New Issue
Block a user