[RX]
- 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:
+18
-31
@@ -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_', []);
|
||||
|
||||
% 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
|
||||
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
|
||||
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;
|
||||
phi_mix = 0;
|
||||
phi_foff = 0;
|
||||
phi_track = 0;
|
||||
df_track = 0;
|
||||
df_track_ = [];
|
||||
max_H_plot = 0;
|
||||
symbol_count = -1;
|
||||
|
||||
fileRemain = wav_size;
|
||||
|
||||
@@ -115,7 +115,7 @@ buf_Z = buffer();
|
||||
% --------------------------------------------------------------
|
||||
% 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)
|
||||
n0 = fileCunkCounter*fileChunkSize+1;
|
||||
@@ -251,12 +251,10 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
|
||||
end
|
||||
df_track_ = [df_track_ df_track];
|
||||
|
||||
x = x.*exp(j*(2*pi*df_track/fs*(0:N+Ng-1)' + cfoFine.phi));
|
||||
cfoFine.phi = mod(cfoFine.phi + 2*pi*df_track/fs*(N+Ng), 2*pi);
|
||||
x = x.*exp(j*(2*pi*df_track/fs*(0:N+Ng-1)' + phi_track));
|
||||
phi_track = mod(phi_track + 2*pi*df_track/fs*(N+Ng), 2*pi);
|
||||
X = fft(x(Ng+1:N+Ng));
|
||||
buf_Z.write(X);
|
||||
symbol_count = symbol_count + 1;
|
||||
|
||||
% CFO Fine acquisition
|
||||
if ~equalizer.sync
|
||||
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));
|
||||
if valid
|
||||
if kc > frameTiming.kc_max
|
||||
frameTiming.n_max = frameTiming.n;
|
||||
frameTiming.symbol_start = frameTiming.n;
|
||||
frameTiming.kc_max = kc;
|
||||
end
|
||||
end
|
||||
@@ -293,10 +291,11 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
|
||||
buf_Z.read(N);
|
||||
else
|
||||
frameTiming.sync = 1;
|
||||
|
||||
frameTiming.sample_start = timingCoarse.cp_off + (N+Ng)*frameTiming.symbol_start;
|
||||
% Reset Buffer to frame start
|
||||
buf_Z.setReadIndex(N*(frameTiming.n_max));
|
||||
fprintf(' (frame_start=%d)\n', frameTiming.n_max);
|
||||
buf_Z = buffer();
|
||||
buf_recv.setReadIndex(frameTiming.sample_start);
|
||||
fprintf(' (symbol_start=%d, sample_start=%d)\n', frameTiming.symbol_start, frameTiming.sample_start);
|
||||
end
|
||||
end
|
||||
|
||||
@@ -313,7 +312,6 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
|
||||
|
||||
Z = transpose(buf_Z.read(N));
|
||||
if ~isempty(Z)
|
||||
|
||||
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);
|
||||
@@ -323,9 +321,9 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
|
||||
H_raw(carrier_gain_bins) = (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);
|
||||
|
||||
@@ -351,8 +349,8 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
|
||||
equalizer.sync_counter = equalizer.sync_counter - 1;
|
||||
else
|
||||
equalizer.sync = 1;
|
||||
equalizer.sync_frame_num = symbol_count;
|
||||
fprintf('Enter fine tracking mode at frame %d\n', equalizer.sync_frame_num);
|
||||
equalizer.sync_symbol_num = equalizer.symbol_count;
|
||||
fprintf('Enter fine tracking mode at symbol %d\n', equalizer.sync_symbol_num);
|
||||
end
|
||||
end
|
||||
|
||||
@@ -403,7 +401,7 @@ while((fileRemain > fileChunkSize) | (buf_Z.len() > N)) % ToDo: don't leave loop
|
||||
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.s = mod(equalizer.s + 1, symbols_per_frame);
|
||||
end
|
||||
@@ -428,21 +426,10 @@ plot(0:length(cfoFine.f_err_.')-1, cfoFine.f_err_.'); grid; title('Error(df_{fin
|
||||
|
||||
subplot(4, 1, 3)
|
||||
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)
|
||||
plot(0:length(df_track_)-1, df_track_); grid; title('df_{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;
|
||||
|
||||
% --------------------------------------------------------------
|
||||
% Write wave files
|
||||
|
||||
Reference in New Issue
Block a user