- fixed chunksize dependent performance
- removed plot time marker

git-svn-id: http://moon:8086/svn/matlab/trunk@81 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
2015-05-05 05:07:32 +00:00
parent c5decb5490
commit 2b7abc9902
+18 -31
View File
@@ -90,22 +90,22 @@ cfoCoarseInteger = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, '
cfoCoarseFractional = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'f_err', 0, 'f_err_', [], 'df', 0, 'df_', []); cfoCoarseFractional = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'f_err', 0, 'f_err_', [], 'df', 0, 'df_', []);
% CFO Fine stuff % CFO Fine stuff
cfoFine = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'f_err', 0, 'f_err_', [], 'df', 0, 'df_', [], 'Xlast', [], 'phi', 0, 'bin_track', 1); cfoFine = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'f_err', 0, 'f_err_', [], 'df', 0, 'df_', [], 'Xlast', [], 'bin_track', 1);
% Frame timing stuff % Frame timing stuff
frameTiming = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'kc_max', -1000, 'n', 0, 'n_max', 0); frameTiming = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'kc_max', -1000, 'n', 0, 'symbol_start', 0, 'sample_start', 0);
% Equalization stuff % Equalization stuff
equalizer = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'sync_frame_num', 0, 'f_err', 1000, 'f_err_', [], 's', 0, 'm', 0, 'kk', 1, 'eps_abs_h', MIN_ABS_H); equalizer = struct('Z', 0, 'started', 0, 'sync_counter', 20, 'sync', 0, 'sync_symbol_num', 0, 'f_err', 1000, 'f_err_', [], 's', 0, 'm', 0, 'symbol_count', 1, 'eps_abs_h', MIN_ABS_H);
fileChunkSize = N; fileChunkSize = 16*N;
fileCunkCounter = 0; fileCunkCounter = 0;
phi_mix = 0; phi_mix = 0;
phi_foff = 0; phi_foff = 0;
phi_track = 0;
df_track = 0; df_track = 0;
df_track_ = []; df_track_ = [];
max_H_plot = 0; max_H_plot = 0;
symbol_count = -1;
fileRemain = wav_size; fileRemain = wav_size;
@@ -115,7 +115,7 @@ buf_Z = buffer();
% -------------------------------------------------------------- % --------------------------------------------------------------
% Main loop % Main loop
% -------------------------------------------------------------- % --------------------------------------------------------------
while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop, if file has been consumed. There may be samples left in buf_recv to process while((fileRemain > fileChunkSize) | (buf_recv.len() > N)) % ToDo: don't leave loop, until file has been consumed.
if (fileRemain > fileChunkSize) if (fileRemain > fileChunkSize)
n0 = fileCunkCounter*fileChunkSize+1; n0 = fileCunkCounter*fileChunkSize+1;
@@ -251,12 +251,10 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
end end
df_track_ = [df_track_ df_track]; df_track_ = [df_track_ df_track];
x = x.*exp(j*(2*pi*df_track/fs*(0:N+Ng-1)' + cfoFine.phi)); x = x.*exp(j*(2*pi*df_track/fs*(0:N+Ng-1)' + phi_track));
cfoFine.phi = mod(cfoFine.phi + 2*pi*df_track/fs*(N+Ng), 2*pi); phi_track = mod(phi_track + 2*pi*df_track/fs*(N+Ng), 2*pi);
X = fft(x(Ng+1:N+Ng)); X = fft(x(Ng+1:N+Ng));
buf_Z.write(X); buf_Z.write(X);
symbol_count = symbol_count + 1;
% CFO Fine acquisition % CFO Fine acquisition
if ~equalizer.sync if ~equalizer.sync
if (~isempty(cfoFine.Xlast)) if (~isempty(cfoFine.Xlast))
@@ -285,7 +283,7 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
kc = abs(Z1(bins)' * Z2(bins)); kc = abs(Z1(bins)' * Z2(bins));
if valid if valid
if kc > frameTiming.kc_max if kc > frameTiming.kc_max
frameTiming.n_max = frameTiming.n; frameTiming.symbol_start = frameTiming.n;
frameTiming.kc_max = kc; frameTiming.kc_max = kc;
end end
end end
@@ -293,10 +291,11 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
buf_Z.read(N); buf_Z.read(N);
else else
frameTiming.sync = 1; frameTiming.sync = 1;
frameTiming.sample_start = timingCoarse.cp_off + (N+Ng)*frameTiming.symbol_start;
% Reset Buffer to frame start % Reset Buffer to frame start
buf_Z.setReadIndex(N*(frameTiming.n_max)); buf_Z = buffer();
fprintf(' (frame_start=%d)\n', frameTiming.n_max); buf_recv.setReadIndex(frameTiming.sample_start);
fprintf(' (symbol_start=%d, sample_start=%d)\n', frameTiming.symbol_start, frameTiming.sample_start);
end end
end end
@@ -313,7 +312,6 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
Z = transpose(buf_Z.read(N)); Z = transpose(buf_Z.read(N));
if ~isempty(Z) if ~isempty(Z)
equalizer.n = rem(equalizer.m + symbols_to_delay-1, ofdm_drm_params.y); equalizer.n = rem(equalizer.m + symbols_to_delay-1, ofdm_drm_params.y);
[carrier_gain, phi_gain, mag_gain] = getRefGain(ofdm_drm_params, ofdm_spec_occ, equalizer.s); [carrier_gain, phi_gain, mag_gain] = getRefGain(ofdm_drm_params, ofdm_spec_occ, equalizer.s);
@@ -323,9 +321,9 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
H_raw(carrier_gain_bins) = (H_); H_raw(carrier_gain_bins) = (H_);
H_gain_cell{equalizer.m+1} = (H_); H_gain_cell{equalizer.m+1} = (H_);
str = sprintf('Symbol %d, s=%d, m=%d, n=%d', symbol_count, equalizer.s, equalizer.m, equalizer.n); str = sprintf('Symbol %d, s=%d, m=%d, n=%d', equalizer.symbol_count, equalizer.s, equalizer.m, equalizer.n);
if equalizer.kk > frames_per_window if equalizer.symbol_count >= frames_per_window
ii = 1+mod(equalizer.m+symbols_to_delay-1+(0:frames_per_window-1), frames_per_window); ii = 1+mod(equalizer.m+symbols_to_delay-1+(0:frames_per_window-1), frames_per_window);
@@ -351,8 +349,8 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
equalizer.sync_counter = equalizer.sync_counter - 1; equalizer.sync_counter = equalizer.sync_counter - 1;
else else
equalizer.sync = 1; equalizer.sync = 1;
equalizer.sync_frame_num = symbol_count; equalizer.sync_symbol_num = equalizer.symbol_count;
fprintf('Enter fine tracking mode at frame %d\n', equalizer.sync_frame_num); fprintf('Enter fine tracking mode at symbol %d\n', equalizer.sync_symbol_num);
end end
end end
@@ -403,7 +401,7 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
end end
end end
end end
equalizer.kk = equalizer.kk + 1; equalizer.symbol_count = equalizer.symbol_count + 1;
equalizer.m = mod(equalizer.m + 1, frames_per_window); equalizer.m = mod(equalizer.m + 1, frames_per_window);
equalizer.s = mod(equalizer.s + 1, symbols_per_frame); equalizer.s = mod(equalizer.s + 1, symbols_per_frame);
end end
@@ -428,21 +426,10 @@ plot(0:length(cfoFine.f_err_.')-1, cfoFine.f_err_.'); grid; title('Error(df_{fin
subplot(4, 1, 3) subplot(4, 1, 3)
plot(0:length(equalizer.f_err_)-1, equalizer.f_err_); grid; title('Error(df_{Eq}) (Track)') plot(0:length(equalizer.f_err_)-1, equalizer.f_err_); grid; title('Error(df_{Eq}) (Track)')
hold on;
x = [equalizer.sync_frame_num equalizer.sync_frame_num];
a = axis();
y = [a(3) a(4)];
plot(x-1,y, 'r-');
hold off;
subplot(4, 1, 4) subplot(4, 1, 4)
plot(0:length(df_track_)-1, df_track_); grid; title('df_{track}') plot(0:length(df_track_)-1, df_track_); grid; title('df_{track}')
hold on; hold on;
x = [equalizer.sync_frame_num equalizer.sync_frame_num];
a = axis();
y = [a(3) a(4)];
plot(x-1,y, 'r-');
hold off;
% -------------------------------------------------------------- % --------------------------------------------------------------
% Write wave files % Write wave files