From fc703d1011552afdc444dbe33f8ae6db1a8c9458 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Thu, 31 Jul 2014 07:02:33 +0000 Subject: [PATCH] - multi frame processing - running phi estimation git-svn-id: http://moon:8086/svn/matlab/trunk@12 801c6759-fa7c-4059-a304-17956f83a07c --- ofdm/fdet_eval.m | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) 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;