function cfo_fine_eval(f, kn) Kdown = 4; fs = 48000/Kdown; N = 1024/Kdown; K = 100; n = (0:K*N-1)'; phi = pi/2; x = cos(f/fs*2*pi.*n + phi) + kn*randn(K*N, 1); Xlast = []; phi_x_ = []; phi_z_ = []; Zm = ones(N, 1); for k=1:K-1, xp = x((k-1)*N+1:k*N); X = fft(xp); if (~isempty(Xlast)) Z = Xlast .* conj(X); [v, bin] = max(abs(Z(1:N/2))); phi_x_ = [phi_x_ 0.5*angle(X(bin))/pi/N*fs]; phi_z_ = [phi_z_ 0.5*angle(Z(bin))/pi/N*fs]; end Xlast = X; end df = -mean(phi_z_) f_est = (bin-1)/N*fs + df figure(1) plot(abs(Z)); grid; figure(2) plot(phi_x_); grid; ylabel('phi_x'); figure(3) plot((bin-1)/N*fs - phi_z_); grid; ylabel('d_f');