- renamed variables
git-svn-id: http://moon:8086/svn/matlab/trunk@54 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
+40
-42
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user