44 lines
1.2 KiB
Matlab
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
|