diff --git a/ofdm/fdet.m b/ofdm/fdet.m index 43afe06..29a3eee 100644 --- a/ofdm/fdet.m +++ b/ofdm/fdet.m @@ -1,10 +1,10 @@ -function [omega, err, dmod, omega_coarse, omega_est] = fdet(x, N, Ng, off, omega_min, omega_step, omega_max) +function [omega, err, dmod, omega_coarse, omega_est, Xm] = fdet(x, N, Ng, off, omega_min, omega_step, omega_max) % K = fix((length(x)-Ng)/(N+Ng)); % Initial guess -omega_coarse = fdet_coarse(x, N, omega_min, omega_step, omega_max); +[omega_coarse, Xm] = fdet_coarse(x, N, Ng, omega_min, omega_step, omega_max); phi_est = 0; omega_est = omega_coarse; diff --git a/ofdm/fdet_coarse.m b/ofdm/fdet_coarse.m index 68e86f7..c783af2 100644 --- a/ofdm/fdet_coarse.m +++ b/ofdm/fdet_coarse.m @@ -1,5 +1,23 @@ -function omega_coarse = fdet_coarse(x, N, omega_min, omega_step, omega_max) +function [omega_coarse, Xm] = fdet_coarse(x, N, Ng, omega_min, omega_step, omega_max) +Xm = zeros(N,1); + +if 0 + +K = fix((length(x))/(N+Ng)); + +for k=1:K, + xp = x((k-1)*(N+Ng)+1:k*(N+Ng)); + Xm = 0.5*Xm + fft(xp(Ng+1:N+Ng), N); +end + +Nmax = ceil(omega_max*N)+1 +[v, ii] = max(abs(Xm(1:Nmax))) + +omega_coarse = (ii-1)/N; + +else + omega_range = (omega_min:omega_step:omega_max); for k=1:lge(omega_range) @@ -9,3 +27,4 @@ end; [v maxk] = max(abs(dmod)); omega_coarse = omega_range(maxk); +end diff --git a/ofdm/fdet_wav.m b/ofdm/fdet_wav.m index 38b38d5..853c1be 100644 --- a/ofdm/fdet_wav.m +++ b/ofdm/fdet_wav.m @@ -42,16 +42,30 @@ cp_off = mod(ii, Ng+N) % Detect CFO fprintf('Perform frequency detection\n'); -[omega, err, dmod, omega_coarse, omega_est] = fdet(x, N, Ng, cp_off, omega_min, omega_step, omega_max); +[omega, err, dmod, omega_coarse, omega_est, Xm] = fdet(x, N, Ng, cp_off, omega_min, omega_step, omega_max); f_coarse = omega_coarse*fs f_est = omega_est*fs +fprintf('Receive Symbols\n'); +K = fix((length(x)-Ng)/(N+Ng)); +for k=10:30 + xp = x((k-1)*(N+Ng)+cp_off+1:k*(N+Ng)+cp_off); + Xp(:,k) = fft(xp(Ng+1:N+Ng), N); +end; + close all; plot(abs(c)); grid; figure; +bin = fix(N*750/48000)+1 +plot(real(Xp(bin, :)), imag(Xp(bin, :)), '+'); grid; + +figure; +plot(0:N-1, abs(Xm)); grid; + +figure; subplot(5,1,1) plot(1:lge(omega), real(dmod)/N, 1:lge(omega), imag(dmod)/N, 1:lge(omega), abs(dmod)/N); grid; legend('Re', 'Im', 'abs()'); @@ -65,4 +79,5 @@ subplot(5,1,4) plot(1:lge(omega), angle(dmod), '-', 1:lge(omega), diff(angle([0 dmod])), 'r-'); grid; legend('phi', 'dphi'); subplot(5,1,5) -plot(1:lge(omega), abs(dmod)/N - real(dmod)/N, '-'); grid; legend('diff'); +plot(1:lge(omega), log10(abs(dmod) ./ (1E-6+abs(real(dmod)))), '-'); grid; legend('diff'); +