From 97f5e837208d91be3d5a66f0a9b45c53e433da4b Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 2 May 2015 09:43:13 +0000 Subject: [PATCH] - renamed variables git-svn-id: http://moon:8086/svn/matlab/trunk@54 801c6759-fa7c-4059-a304-17956f83a07c --- ofdm/ofdm_rx.m | 82 ++++++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/ofdm/ofdm_rx.m b/ofdm/ofdm_rx.m index 925c8df..c2fd3ae 100644 --- a/ofdm/ofdm_rx.m +++ b/ofdm/ofdm_rx.m @@ -54,69 +54,64 @@ x = awgn(x, SNR, 'measured'); K = fix((length(x))/(N+Ng))-1; % Timing coarse +fprintf('Coarse timing acquisition\n'); cp_off = 0; cp_off_ = []; -if 1 - fprintf('Coarse timing estimation\n'); - Z = 0; - for k=1:20 - xp = x((k-1)*(N+Ng)+1:k*(N+Ng)); - [cp_off, Nd, valid, Z] = timing_coarse(xp, N, Ng, Ng, Z); - if (valid) - cp_off_ = [cp_off_ cp_off]; - end - end; - cp_off = round(median(cp_off_)) - Nd = Nd -end +Z = 0; +for k=1:20 + xp = x((k-1)*(N+Ng)+1:k*(N+Ng)); + [cp_off, Nd, valid, Z] = timing_coarse(xp, N, Ng, Ng, Z); + if (valid) + cp_off_ = [cp_off_ cp_off]; + end +end; +cp_off = round(median(cp_off_)) +Nd = Nd +% Integer CFO coarse +fprintf('Coarse integer CFO acquisition\n'); fdet_coarse_Z = 0; Z_cfa_pre = 0; -df_i_ = []; +df_acq_coarse_int_ = []; valid_latency_count = 20; -if 1 -fprintf('Coarse integer CFO estimation\n'); -% Integer CFO coarse for k=1:200 xp = x((k-1)*(N+Ng)+cp_off+1:k*(N+Ng)+cp_off); [d_bin, valid, fdet_coarse_Z] = cfo_coarse_int(xp(Ng+1:N+Ng), N, carrier_pilot, 11, fdet_coarse_Z); if valid - df_i = -d_bin(1)/N*fs; + df_acq_coarse_int = -d_bin(1)/N*fs; if valid_latency_count > 0 valid_latency_count = valid_latency_count - 1; else break; end end -end; end -fprintf('Coarse fractional CFO estimation\n'); +fprintf('Coarse fractional CFO acquisition\n'); % CFO coarse -df_f_ = []; +df_acq_coarse_fract_ = []; for k=1:200 xp = x((k-1)*(N+Ng)+cp_off+1:k*(N+Ng)+cp_off); [domega_f, Z_cfa_pre] = cfo_coarse_fract(xp, N, Ng, Ng, Nd, Z_cfa_pre); - df_f_ = [df_f_ domega_f*fs]; + df_acq_coarse_fract_ = [df_acq_coarse_fract_ domega_f*fs]; end; -df_coarse = df_i + mean(df_f_(10:200)) -df_coarse_ = df_i + df_f_; +df_acq_c = df_acq_coarse_int + mean(df_acq_coarse_fract_(10:200)) +df_acq_c_ = df_acq_coarse_int + df_acq_coarse_fract_; if pre_mix - x1 = x.*exp(j*(2*pi*df_coarse/fs.*(0:length(x)-1)')); - df_track = 0; + x1 = x.*exp(j*(2*pi*df_acq_c/fs.*(0:length(x)-1)')); + df_acq_fine = 0; else x1 = x; - df_track = df_coarse; + df_acq_fine = df_acq_c; end % CFO Fine -fprintf('Fine CFO estimation\n'); -fprintf('Receive Symbols\n'); +fprintf('Fine fractional CFO acquisition\n'); Xlast = []; -df_fine = 0; -df_fine_ = []; -df_track_ = []; +df_acq_fine_err = 0; +df_acq_fine_err_ = []; +df_acq_fine_ = []; kn = fs/(2*pi*(1+Ng/N))/N; x_ = []; Hp_ = []; @@ -128,19 +123,19 @@ sym_pilot = exp(j*2*pi*phi_pilot'/1024); bin_pilot = c2i(N, carrier_pilot); for k=1:K, xp = x1((k-1)*(N+Ng)+cp_off+1:k*(N+Ng)+cp_off); - xp = xp.*exp(j*(2*pi*df_track/fs*(0:N+Ng-1)' + phi)); - phi = phi + 2*pi*df_track/fs*(N+Ng); + xp = xp.*exp(j*(2*pi*df_acq_fine/fs*(0:N+Ng-1)' + phi)); + phi = phi + 2*pi*df_acq_fine/fs*(N+Ng); xp = xp(Ng+1:N+Ng); x_ = [x_' xp']'; X = fft(xp); if (~isempty(Xlast)) Z = Xlast .* conj(X); - df_fine = kn*angle(Z(bin_pilot)); - df_fine_ = [df_fine_ df_fine]; + df_acq_fine_err = kn*angle(Z(bin_pilot)); + df_acq_fine_err_ = [df_acq_fine_err_ df_acq_fine_err]; phi_p = angle(X(bin_pilot)); mag_p = abs(X(bin_pilot)); - df_track = df_track + 0.1*mean(df_fine(bin_track)); - df_track_ = [df_track_ df_track]; + df_acq_fine = df_acq_fine + 0.1*mean(df_acq_fine_err(bin_track)); + df_acq_fine_ = [df_acq_fine_ df_acq_fine]; Hp = X(bin_pilot)./conj(sym_pilot); Hp_ = [Hp_ Hp]; Z_ = [Z_ X]; @@ -153,17 +148,17 @@ if ~isempty(cp_off_) plot(0:length(cp_off_)-1, cp_off_, 0:length(cp_off_)-1, cp_off*ones(size(cp_off_)), 'r-'); grid; title('cp_{off}') end -df_track_ = df_track_'; +df_acq_fine_ = df_acq_fine_'; figure; subplot(3, 1, 1) -plot(0:length(df_coarse_)-1, df_coarse_); grid; title('df_{coarse}') +plot(0:length(df_acq_c_)-1, df_acq_c_); grid; title('df_{coarse} (Acquisition)') subplot(3, 1, 2) -plot(0:length(df_track_)-1, df_track_); grid; title('df_{track}') +plot(0:length(df_acq_fine_)-1, df_acq_fine_); grid; title('df_{fine} (Acquisition)') subplot(3, 1, 3) -plot(0:length(df_fine_)-1, df_fine_); grid; title('df_{fine}') +plot(0:length(df_acq_fine_err_)-1, df_acq_fine_err_); grid; title('Error(df_{fine}) (Acquisition)') figure; Z_pilot = Z_(bin_pilot, 200:length(Z_))'; @@ -175,6 +170,7 @@ else axis([-maxZ maxZ -maxZ maxZ]); end +fprintf('Frame timing acquisition\n'); %% Detect start of DRM frame bins = c2i(N, carrier_time); kc_max = -1000; @@ -207,6 +203,8 @@ else axis([-maxZ maxZ -maxZ maxZ]); end +fprintf('Channel estimation and symbol reception\n'); + [W_syms, W_pilots] = calcWiener(drm_mode, drm_bw); figure;