diff --git a/ofdm/cfo_coarse_int.m b/ofdm/cfo_coarse_int.m index 4a64849..6ee89b3 100644 --- a/ofdm/cfo_coarse_int.m +++ b/ofdm/cfo_coarse_int.m @@ -6,8 +6,10 @@ end alpha = 0.01; rho = 0.999; -k_boost = 4; +k_boost = 4.0; noise_eps = 1e-3; +max_window = 3; +noise_floor_k = 0.75*k_boost; if 1 bin_pilots = c2i(N, carrier_pilot)-1; @@ -25,8 +27,8 @@ if 1 Zi.Xv = max(Zi.Xm, Zi.Xv); Xt = abs(Zi.Xv(bin_min+1:bin_max+1)); - xnoise = noiseFloor(Xt, k_boost/2)+noise_eps; - bins = bin_min+find_bins(Xt, xnoise, k_boost, bins_search); + xnoise = noiseFloor(Xt, noise_floor_k) + noise_eps; + bins = bin_min+find_bins(Xt, xnoise, k_boost, max_window); if (~isempty(bins)) k = 1; @@ -72,20 +74,19 @@ if 1 end Zf = Zi; -function bins = find_bins(x, xnoise, kboost, bins_search) +function bins = find_bins(x, xnoise, kboost, max_window) bins = []; -xn = x - xnoise; for n=1:length(x) - if (xn(n) > (kboost*xnoise(n))) - smin = max(1, n-bins_search); - smax = min(length(xn), n+bins_search); - [v, nn] = max(xn(smin:smax)); + if (x(n) >= (kboost*xnoise(n))) + smin = max(1, n-max_window); + smax = min(length(x), n+max_window); + [v, nn] = max(x(smin:smax)); winner = nn + smin-2; if isempty(find(bins == winner)) bins = [bins winner]; end - n = min(length(xn), n + bins_search); + n = min(length(x), n + max_window); end end bins = bins';