From f4428bb0e6e9fa7e145aabcf614e046692b00584 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 2 May 2015 16:53:32 +0000 Subject: [PATCH] - fixed dF tracking git-svn-id: http://moon:8086/svn/matlab/trunk@57 801c6759-fa7c-4059-a304-17956f83a07c --- ofdm/ofdm_rx.m | 76 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/ofdm/ofdm_rx.m b/ofdm/ofdm_rx.m index 22ff919..d10bcc2 100644 --- a/ofdm/ofdm_rx.m +++ b/ofdm/ofdm_rx.m @@ -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)