116 lines
3.4 KiB
Matlab
116 lines
3.4 KiB
Matlab
%% =========================================================
|
|
% Data
|
|
% =========================================================
|
|
clc;
|
|
X = raw_DPW.Data; % [512 x nFrames x nTime]
|
|
|
|
% Remove first DPW if needed (initialization artifact)
|
|
X = X(:,:,2:end);
|
|
|
|
[nSamples, nFrames_cfg, nTime] = size(X);
|
|
|
|
%% =========================================================
|
|
% PARAMETERS
|
|
% =========================================================
|
|
COUNTER_MAX = 511; % counter: 0..511
|
|
|
|
%% =========================================================
|
|
% VALIDATION
|
|
% =========================================================
|
|
for t = 1:nTime
|
|
|
|
fprintf('\n=== Checking DPW %d ===\n', t);
|
|
|
|
X_dpw = X(:,:,t);
|
|
|
|
% Flatten stream
|
|
x_seq = reshape(X_dpw, [], 1);
|
|
|
|
% Extract stored integers
|
|
real_seq = double(storedInteger(real(x_seq))); % sample counter
|
|
frame_seq = double(storedInteger(imag(x_seq))); % frame index
|
|
|
|
%% -----------------------------------------------------
|
|
% 1. Sample progression
|
|
% -----------------------------------------------------
|
|
d_real = diff(real_seq);
|
|
|
|
valid_steps = (d_real == 1) | (d_real == -COUNTER_MAX);
|
|
|
|
if all(valid_steps)
|
|
fprintf('✔ Sample progression OK\n');
|
|
else
|
|
idx = find(~valid_steps, 1);
|
|
fprintf('❌ Sample progression ERROR at index %d\n', idx);
|
|
end
|
|
|
|
%% -----------------------------------------------------
|
|
% 2. Detect counter wraps (511 → 0)
|
|
% -----------------------------------------------------
|
|
wrap_idx = find(real_seq(1:end-1) == COUNTER_MAX & real_seq(2:end) == 0);
|
|
|
|
fprintf('Detected wraps: %d (configured: %d)\n', ...
|
|
length(wrap_idx), nFrames_cfg);
|
|
|
|
if length(wrap_idx) == nFrames_cfg
|
|
fprintf('✔ Wrap count matches configuration\n');
|
|
else
|
|
fprintf('❌ Wrap count mismatch\n');
|
|
end
|
|
|
|
%% -----------------------------------------------------
|
|
% 3. Check frame increment at wraps (no wrap logic)
|
|
% -----------------------------------------------------
|
|
ok_wrap = true;
|
|
|
|
for k = 1:length(wrap_idx)
|
|
|
|
i = wrap_idx(k);
|
|
|
|
f_before = frame_seq(i);
|
|
f_after = frame_seq(i+1);
|
|
|
|
if f_after ~= f_before + 1
|
|
fprintf('❌ Frame increment error at idx %d (%d → %d)\n', ...
|
|
i, f_before, f_after);
|
|
ok_wrap = false;
|
|
break;
|
|
end
|
|
|
|
end
|
|
|
|
if ok_wrap
|
|
fprintf('✔ Frame increments correctly at all wraps\n');
|
|
end
|
|
|
|
%% -----------------------------------------------------
|
|
% 4. Informative: frame regions (+1 effect)
|
|
% -----------------------------------------------------
|
|
d_frame = diff(frame_seq);
|
|
nFrames_detected = sum(d_frame == 1) + 1;
|
|
|
|
fprintf('Frame regions (including partial): %d (expected: %d + 1)\n', ...
|
|
nFrames_detected, nFrames_cfg);
|
|
|
|
%% -----------------------------------------------------
|
|
% 5. Optional: per-frame sanity (≤2 indices)
|
|
% -----------------------------------------------------
|
|
frame_idx_matrix = storedInteger(imag(X_dpw));
|
|
|
|
frame_ok = true;
|
|
|
|
for f = 1:nFrames_cfg
|
|
u = unique(frame_idx_matrix(:,f));
|
|
|
|
if length(u) > 2
|
|
fprintf('❌ Frame %d has >2 frame indices\n', f);
|
|
frame_ok = false;
|
|
break;
|
|
end
|
|
end
|
|
|
|
if frame_ok
|
|
fprintf('✔ Frame structure OK (≤2 indices per frame)\n');
|
|
end
|
|
|
|
end |