[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_', []);
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user