- renamed variables

git-svn-id: http://moon:8086/svn/matlab/trunk@54 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
2015-05-02 09:43:13 +00:00
parent 1992026489
commit 97f5e83720
+40 -42
View File
@@ -54,69 +54,64 @@ x = awgn(x, SNR, 'measured');
K = fix((length(x))/(N+Ng))-1; K = fix((length(x))/(N+Ng))-1;
% Timing coarse % Timing coarse
fprintf('Coarse timing acquisition\n');
cp_off = 0; cp_off = 0;
cp_off_ = []; cp_off_ = [];
if 1 Z = 0;
fprintf('Coarse timing estimation\n'); for k=1:20
Z = 0; xp = x((k-1)*(N+Ng)+1:k*(N+Ng));
for k=1:20 [cp_off, Nd, valid, Z] = timing_coarse(xp, N, Ng, Ng, Z);
xp = x((k-1)*(N+Ng)+1:k*(N+Ng)); if (valid)
[cp_off, Nd, valid, Z] = timing_coarse(xp, N, Ng, Ng, Z); cp_off_ = [cp_off_ cp_off];
if (valid) end
cp_off_ = [cp_off_ cp_off]; end;
end cp_off = round(median(cp_off_))
end; Nd = Nd
cp_off = round(median(cp_off_))
Nd = Nd
end
% Integer CFO coarse
fprintf('Coarse integer CFO acquisition\n');
fdet_coarse_Z = 0; fdet_coarse_Z = 0;
Z_cfa_pre = 0; Z_cfa_pre = 0;
df_i_ = []; df_acq_coarse_int_ = [];
valid_latency_count = 20; valid_latency_count = 20;
if 1
fprintf('Coarse integer CFO estimation\n');
% Integer CFO coarse
for k=1:200 for k=1:200
xp = x((k-1)*(N+Ng)+cp_off+1:k*(N+Ng)+cp_off); 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); [d_bin, valid, fdet_coarse_Z] = cfo_coarse_int(xp(Ng+1:N+Ng), N, carrier_pilot, 11, fdet_coarse_Z);
if valid if valid
df_i = -d_bin(1)/N*fs; df_acq_coarse_int = -d_bin(1)/N*fs;
if valid_latency_count > 0 if valid_latency_count > 0
valid_latency_count = valid_latency_count - 1; valid_latency_count = valid_latency_count - 1;
else else
break; break;
end end
end end
end;
end end
fprintf('Coarse fractional CFO estimation\n'); fprintf('Coarse fractional CFO acquisition\n');
% CFO coarse % CFO coarse
df_f_ = []; df_acq_coarse_fract_ = [];
for k=1:200 for k=1:200
xp = x((k-1)*(N+Ng)+cp_off+1:k*(N+Ng)+cp_off); 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); [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; end;
df_coarse = df_i + mean(df_f_(10:200)) df_acq_c = df_acq_coarse_int + mean(df_acq_coarse_fract_(10:200))
df_coarse_ = df_i + df_f_; df_acq_c_ = df_acq_coarse_int + df_acq_coarse_fract_;
if pre_mix if pre_mix
x1 = x.*exp(j*(2*pi*df_coarse/fs.*(0:length(x)-1)')); x1 = x.*exp(j*(2*pi*df_acq_c/fs.*(0:length(x)-1)'));
df_track = 0; df_acq_fine = 0;
else else
x1 = x; x1 = x;
df_track = df_coarse; df_acq_fine = df_acq_c;
end end
% CFO Fine % CFO Fine
fprintf('Fine CFO estimation\n'); fprintf('Fine fractional CFO acquisition\n');
fprintf('Receive Symbols\n');
Xlast = []; Xlast = [];
df_fine = 0; df_acq_fine_err = 0;
df_fine_ = []; df_acq_fine_err_ = [];
df_track_ = []; df_acq_fine_ = [];
kn = fs/(2*pi*(1+Ng/N))/N; kn = fs/(2*pi*(1+Ng/N))/N;
x_ = []; x_ = [];
Hp_ = []; Hp_ = [];
@@ -128,19 +123,19 @@ sym_pilot = exp(j*2*pi*phi_pilot'/1024);
bin_pilot = c2i(N, carrier_pilot); bin_pilot = c2i(N, carrier_pilot);
for k=1:K, for k=1:K,
xp = x1((k-1)*(N+Ng)+cp_off+1:k*(N+Ng)+cp_off); 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)); xp = xp.*exp(j*(2*pi*df_acq_fine/fs*(0:N+Ng-1)' + phi));
phi = phi + 2*pi*df_track/fs*(N+Ng); phi = phi + 2*pi*df_acq_fine/fs*(N+Ng);
xp = xp(Ng+1:N+Ng); xp = xp(Ng+1:N+Ng);
x_ = [x_' xp']'; x_ = [x_' xp']';
X = fft(xp); X = fft(xp);
if (~isempty(Xlast)) if (~isempty(Xlast))
Z = Xlast .* conj(X); Z = Xlast .* conj(X);
df_fine = kn*angle(Z(bin_pilot)); df_acq_fine_err = kn*angle(Z(bin_pilot));
df_fine_ = [df_fine_ df_fine]; df_acq_fine_err_ = [df_acq_fine_err_ df_acq_fine_err];
phi_p = angle(X(bin_pilot)); phi_p = angle(X(bin_pilot));
mag_p = abs(X(bin_pilot)); mag_p = abs(X(bin_pilot));
df_track = df_track + 0.1*mean(df_fine(bin_track)); df_acq_fine = df_acq_fine + 0.1*mean(df_acq_fine_err(bin_track));
df_track_ = [df_track_ df_track]; df_acq_fine_ = [df_acq_fine_ df_acq_fine];
Hp = X(bin_pilot)./conj(sym_pilot); Hp = X(bin_pilot)./conj(sym_pilot);
Hp_ = [Hp_ Hp]; Hp_ = [Hp_ Hp];
Z_ = [Z_ X]; 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}') 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 end
df_track_ = df_track_'; df_acq_fine_ = df_acq_fine_';
figure; figure;
subplot(3, 1, 1) 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) 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) 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; figure;
Z_pilot = Z_(bin_pilot, 200:length(Z_))'; Z_pilot = Z_(bin_pilot, 200:length(Z_))';
@@ -175,6 +170,7 @@ else
axis([-maxZ maxZ -maxZ maxZ]); axis([-maxZ maxZ -maxZ maxZ]);
end end
fprintf('Frame timing acquisition\n');
%% Detect start of DRM frame %% Detect start of DRM frame
bins = c2i(N, carrier_time); bins = c2i(N, carrier_time);
kc_max = -1000; kc_max = -1000;
@@ -207,6 +203,8 @@ else
axis([-maxZ maxZ -maxZ maxZ]); axis([-maxZ maxZ -maxZ maxZ]);
end end
fprintf('Channel estimation and symbol reception\n');
[W_syms, W_pilots] = calcWiener(drm_mode, drm_bw); [W_syms, W_pilots] = calcWiener(drm_mode, drm_bw);
figure; figure;