diff --git a/ofdm/ofdm_rx.m b/ofdm/ofdm_rx.m index 3f2ae86..e93d745 100644 --- a/ofdm/ofdm_rx.m +++ b/ofdm/ofdm_rx.m @@ -225,7 +225,6 @@ symbols_per_frame = ofdm_drm_params.nspf; 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); carriers = ofdm_spec_occ.kmin:ofdm_spec_occ.kmax; carrier_indexes = c2i(N, carriers); @@ -269,17 +268,24 @@ for k=start:length(Z_) H_raw(carrier_gain_bins) = (H_); H_gain_cell{m+1} = (H_); - H_gain_carriers_cell{m+1} = carrier_gain; 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}; - ZZ = Z_(carrier_indexes, k-symbols_to_delay).'; - hhh = H_gain_cell{mod(m-1, frames_per_window)+1}; - df_track = 12000/(2*pi*N)*angle( (H_pilots) * hhh' + MIN_ABS_H); + + % Get the correctly delayed symbols + sym = Z_(carrier_indexes, k-symbols_to_delay).'; + + % Get the correctly delayed raw channel estimate + Hr = H_gain_cell{mod(m-1, frames_per_window)+1}; + + % get frequency error + % correlate wiener filtered channel with raw estimate + df_track = 12000/(2*pi*N)*angle(H_pilots * Hr' + MIN_ABS_H); df_track_ = [df_track_ df_track]; % check for too small values @@ -288,13 +294,14 @@ for k=start:length(Z_) H_too_small_index = find( abs(H_syms)