Add time-domain scope to gNB imscope.
This commit is contained in:
@@ -622,6 +622,7 @@ static void rx_rf(RU_t *ru, int *frame, int *slot)
|
|||||||
rxp,
|
rxp,
|
||||||
samples_per_slot,
|
samples_per_slot,
|
||||||
ru->nb_rx);
|
ru->nb_rx);
|
||||||
|
gNBscopeCopy(ru, gNbTimeDomainSamples, rxp[0], sizeof(c16_t), 1, samples_per_slot, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
|
||||||
|
|||||||
@@ -581,6 +581,16 @@ void ShowGnbScope(PHY_VARS_gNB *gNB, float t)
|
|||||||
pusch_llr_plot->Draw(t, gNBPuschLlr, "PUSCH LLR");
|
pusch_llr_plot->Draw(t, gNBPuschLlr, "PUSCH LLR");
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
if (ImGui::TreeNode("Time domain samples")) {
|
||||||
|
static auto iq_data = new IQData();
|
||||||
|
static auto time_domain_iq = new IQHist("Time domain samples");
|
||||||
|
bool new_data = false;
|
||||||
|
if (time_domain_iq->ShouldReadData()) {
|
||||||
|
new_data = iq_data->TryCollect(&scope_array[gNbTimeDomainSamples], t, time_domain_iq->GetEpsilon());
|
||||||
|
}
|
||||||
|
time_domain_iq->Draw(iq_data, t, new_data);
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void *imscope_thread(void *data_void_ptr)
|
void *imscope_thread(void *data_void_ptr)
|
||||||
@@ -751,6 +761,7 @@ extern "C" void imscope_autoinit(void *dataptr)
|
|||||||
scope->copyDataUnsafeWithOffset = copyDataUnsafeWithOffset;
|
scope->copyDataUnsafeWithOffset = copyDataUnsafeWithOffset;
|
||||||
scope->unlockScopeData = unlockScopeData;
|
scope->unlockScopeData = unlockScopeData;
|
||||||
scope_params->gNB->scopeData = scope;
|
scope_params->gNB->scopeData = scope;
|
||||||
|
scope_params->ru->scopeData = scope;
|
||||||
} else {
|
} else {
|
||||||
PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)dataptr;
|
PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)dataptr;
|
||||||
scopeData_t *scope = (scopeData_t *)calloc(1, sizeof(scopeData_t));
|
scopeData_t *scope = (scopeData_t *)calloc(1, sizeof(scopeData_t));
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ enum scopeDataType {
|
|||||||
gNBPuschLlr,
|
gNBPuschLlr,
|
||||||
ueTimeDomainSamples,
|
ueTimeDomainSamples,
|
||||||
ueTimeDomainSamplesBeforeSync,
|
ueTimeDomainSamplesBeforeSync,
|
||||||
|
gNbTimeDomainSamples,
|
||||||
EXTRA_SCOPE_TYPES
|
EXTRA_SCOPE_TYPES
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -129,12 +130,12 @@ void copyData(void *, enum scopeDataType type, void *dataIn, int elementSz, int
|
|||||||
}
|
}
|
||||||
#define gNBscopeCopyWithMetadata(gnb, type, ...) \
|
#define gNBscopeCopyWithMetadata(gnb, type, ...) \
|
||||||
if (gnb->scopeData) { \
|
if (gnb->scopeData) { \
|
||||||
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gNB->scopeData, type, ##__VA_ARGS__); \
|
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gnb->scopeData, type, ##__VA_ARGS__); \
|
||||||
}
|
}
|
||||||
#define gNBscopeCopy(gnb, type, ...) \
|
#define gNBscopeCopy(gnb, type, ...) \
|
||||||
if (gnb->scopeData) { \
|
if (gnb->scopeData) { \
|
||||||
metadata mt = {.slot = -1, .frame = -1}; \
|
metadata mt = {.slot = -1, .frame = -1}; \
|
||||||
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gNB->scopeData, type, ##__VA_ARGS__, &mt); \
|
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gnb->scopeData, type, ##__VA_ARGS__, &mt); \
|
||||||
}
|
}
|
||||||
#define GnbScopeUpdate(gnb, type, numElt) \
|
#define GnbScopeUpdate(gnb, type, numElt) \
|
||||||
if (gnb->scopeData) \
|
if (gnb->scopeData) \
|
||||||
|
|||||||
@@ -661,7 +661,8 @@ typedef struct RU_t_s {
|
|||||||
/// number of cores for RU ThreadPool
|
/// number of cores for RU ThreadPool
|
||||||
int num_tpcores;
|
int num_tpcores;
|
||||||
/// structure for analyzing high-level RT measurements
|
/// structure for analyzing high-level RT measurements
|
||||||
rt_ru_profiling_t rt_ru_profiling;
|
rt_ru_profiling_t rt_ru_profiling;
|
||||||
|
void* scopeData;
|
||||||
} RU_t;
|
} RU_t;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user