Files
2026-05-24 21:10:00 +02:00

44 lines
1.2 KiB
Matlab

function result = analyzeTrace(trace_file, channel, window, overlap, fft_precision, sample_rate)
trace = load(trace_file, "iq");
% 1
duration = length(trace.iq) / sample_rate;
% 2
[S, F, T] = spectrogram(trace.iq, window, overlap, fft_precision, sample_rate, "centered");
% 3
mag = abs(S).^2;
P_dB = linearTodB(mag);
% Sum all frequency bins per time slot to obtain total channel power.
channel_power_linear = sum(mag, 1);
channel_power_dB = linearTodB(channel_power_linear);
noise_floor_linear = prctile(channel_power_linear, 10);
noise_floor = linearTodB(noise_floor_linear);
% 4
occupancy = sum(channel_power_dB > noise_floor + 10) / numel(channel_power_dB) * 100;
result.trace_file = trace_file;
result.iq = trace.iq;
result.channel = channel;
result.duration = duration;
result.S = S;
result.F = F;
result.T = T;
result.mag = mag;
result.P_dB = P_dB;
result.channel_power_linear = channel_power_linear;
result.channel_power_dB = channel_power_dB;
result.noise_floor_linear = noise_floor_linear;
result.noise_floor = noise_floor;
result.occupancy = occupancy;
end