1*daf7040cSXianjun Jiao% Author: Xianjun Jiao ([email protected]; [email protected]) 2*daf7040cSXianjun Jiao% SPDX-FileCopyrightText: 2023 UGent 3*daf7040cSXianjun Jiao% SPDX-License-Identifier: AGPL-3.0-or-later 4*daf7040cSXianjun Jiao 5*daf7040cSXianjun Jiaofunction fast_reg_log_analyzer(filename_bin, start_idx, end_idx) 6*daf7040cSXianjun Jiaoclose all; 7*daf7040cSXianjun Jiao 8*daf7040cSXianjun Jiao% if exist('start_idx', 'var')==0 || isempty(start_idx) 9*daf7040cSXianjun Jiao% start_idx = 1; 10*daf7040cSXianjun Jiao% end 11*daf7040cSXianjun Jiao% 12*daf7040cSXianjun Jiao% if exist('end_idx', 'var')==0 || isempty(end_idx) 13*daf7040cSXianjun Jiao% end_idx = 65536; 14*daf7040cSXianjun Jiao% end 15*daf7040cSXianjun Jiao 16*daf7040cSXianjun Jiaofilename_csv = [filename_bin(1:(end-3)) 'csv']; 17*daf7040cSXianjun Jiaodisp(['Human readable fast reg log will be in ' filename_csv]); 18*daf7040cSXianjun Jiao 19*daf7040cSXianjun Jiaofid = fopen(filename_bin); 20*daf7040cSXianjun Jiaoif fid == -1 21*daf7040cSXianjun Jiao disp('fopen failed!'); 22*daf7040cSXianjun Jiao return; 23*daf7040cSXianjun Jiaoend 24*daf7040cSXianjun Jiao 25*daf7040cSXianjun Jiaoa = fread(fid, inf, 'uint32'); 26*daf7040cSXianjun Jiaofclose(fid); 27*daf7040cSXianjun Jiao% a = bitand(uint32(a), uint32(268435455)); 28*daf7040cSXianjun Jiao% plot(a(1:2:end)); hold on; 29*daf7040cSXianjun Jiao% plot(a(2:2:end)); 30*daf7040cSXianjun Jiao% legend('1', '2'); 31*daf7040cSXianjun Jiao 32*daf7040cSXianjun Jiaoa = uint32(a); 33*daf7040cSXianjun Jiaotsf = a(2:2:end); 34*daf7040cSXianjun Jiao% plot(tsf); 35*daf7040cSXianjun Jiaostate = a(1:2:end); 36*daf7040cSXianjun Jiao 37*daf7040cSXianjun Jiao% find out overflow idx 38*daf7040cSXianjun Jiaooverflow_idx = find(diff([0; double(tsf)])<0, 1, 'first'); 39*daf7040cSXianjun Jiao% overflow_idx 40*daf7040cSXianjun Jiaoif ~isempty(overflow_idx) 41*daf7040cSXianjun Jiao tsf(overflow_idx:end) = tsf(overflow_idx:end) + (2^32); 42*daf7040cSXianjun Jiao disp(num2str(overflow_idx)); 43*daf7040cSXianjun Jiaoend 44*daf7040cSXianjun Jiao 45*daf7040cSXianjun Jiaorssi_correction = 145; 46*daf7040cSXianjun Jiaorssi_half_db = double(bitand(bitshift(state, 0), uint32((2^11)-1))); 47*daf7040cSXianjun Jiaoagc_lock = 1 - double(bitand(bitshift(state, -11), uint32(1))); 48*daf7040cSXianjun Jiaodemod_is_ongoing = double(bitand(bitshift(state, -12), uint32(1))); 49*daf7040cSXianjun Jiaotx_is_ongoing = double(bitand(bitshift(state, -13), uint32(1))); 50*daf7040cSXianjun Jiaoch_idle = 1 - double(bitand(bitshift(state, -14), uint32(1))); 51*daf7040cSXianjun Jiaoiq_rssi_half_db = double(bitand(bitshift(state, -16), uint32((2^9)-1))); 52*daf7040cSXianjun Jiaoagc_gain = double(bitand(bitshift(state, -25), uint32((2^7)-1))); 53*daf7040cSXianjun Jiao 54*daf7040cSXianjun Jiaorssi_dbm = (rssi_half_db./2) - rssi_correction; 55*daf7040cSXianjun Jiao 56*daf7040cSXianjun Jiaofigure; 57*daf7040cSXianjun Jiaosubplot(2,1,1); 58*daf7040cSXianjun Jiaoplot(tsf, -rssi_dbm, 'r+-'); hold on; 59*daf7040cSXianjun Jiaoplot(tsf, iq_rssi_half_db, 'bo-'); 60*daf7040cSXianjun Jiaoplot(tsf, agc_gain, 'ks-'); 61*daf7040cSXianjun Jiaolegend('rssi dbm', 'iq rssi half db', 'agc gain'); 62*daf7040cSXianjun Jiaosubplot(2,1,2); 63*daf7040cSXianjun Jiaoplot(tsf, agc_lock+0); hold on; 64*daf7040cSXianjun Jiaoplot(tsf, demod_is_ongoing+2); 65*daf7040cSXianjun Jiaoplot(tsf, tx_is_ongoing+4); 66*daf7040cSXianjun Jiaoplot(tsf, ch_idle+6); 67*daf7040cSXianjun Jiao 68*daf7040cSXianjun Jiaolegend('agc lock', 'demod is ongoing', 'tx is ongoing', 'ch idle'); 69*daf7040cSXianjun Jiao 70*daf7040cSXianjun Jiaoa=table(tsf, rssi_half_db, rssi_dbm, iq_rssi_half_db, agc_gain, agc_lock, demod_is_ongoing, tx_is_ongoing, ch_idle); 71*daf7040cSXianjun Jiaowritetable(a, filename_csv); 72