diff --git a/ofdm/fdet_eval.m b/ofdm/fdet_eval.m index e3ee03f..280b424 100644 --- a/ofdm/fdet_eval.m +++ b/ofdm/fdet_eval.m @@ -1,36 +1,46 @@ -function fdet_eval(f_true, knoise_dB) +function fdet_eval(f_true, knoise_dB, numFrames) fs = 48000; N = 1024; - +K = numFrames; phi_true = 1; -x_true = exp(j*(2*pi*f_true/fs*(0:N-1)'+phi_true)) + sqrt(10^(knoise_dB/10))*randn(N,1); +% Adaption rate +mu = 20.0; + +% Generate signal +x_true = exp(j*(2*pi*f_true/fs*(0:K*N-1)'+phi_true)) + sqrt(10^(knoise_dB/10))*randn(K*N,1); % Initial guess X = fft(x_true, N); [v maxk] = max(abs(X)); -f_est = (maxk-1)*fs/N -phi_est = angle(x_true(1)); -mu = 1.0; +f_est = (maxk-1)*fs/N; % * (1+angle(X(maxk))) -for k=1:500 +for k=1:K + xp = x_true((k-1)*N+1:k*N); + phi_est = angle(xp(1)); x_est = exp(-j*(2*pi*f_est/fs*(0:N-1)'+phi_est)); - dmod(k) = sum(x_true.*x_est); + dmod(k) = sum(xp.*x_est); err(k) = sign(imag(dmod(k)))*(1-real(dmod(k)/abs(dmod(k))))^.5; f_est = f_est + mu*err(k); f(k) = f_est; + phi(k) = phi_est; end; f_true = f_true f_est = f_est +mean_fest = mean(f(K/2+1:K)) +error_ppm = 1E6*(1-mean_fest/f_true) close all; -subplot(3,1,1) -plot(1:lge(f), 1-real(dmod)./abs(dmod), 1:lge(f), imag(dmod)./abs(dmod)); grid; +subplot(4,1,1) +plot(1:lge(f), 1-real(dmod)./abs(dmod), 1:lge(f), imag(dmod)./abs(dmod), 1:lge(f), real(dmod)./abs(dmod)); grid; -subplot(3,1,2) +subplot(4,1,2) plot(1:lge(f), err, '-*'); grid; -subplot(3,1,3) +subplot(4,1,3) plot(1:lge(f), f); grid; + +subplot(4,1,4) +plot(1:lge(f), angle(dmod)); grid;