













调用nr_search_ssb_common,包括PSS检测
1)调用pss_synchro_nr
const int sync_pos = pss_synchro_nr((const c16_t **)params->rxdata,
fp,
pssTime,
params->search_frame_id,
params->fo_flag,
params->target_nid_cell,
&nid2,
&freq_offset_pss,
&pss_peak,
&pss_avg);
计算出的sync_pos(符号起点)比较重要
2)=> 调用pss_search_time_nr
长度:
if (is == 0)
length = frame_parms->samples_per_frame + (2 * frame_parms->ofdm_symbol_size); //618496
else
length = frame_parms->samples_per_frame; //614400
相关:逐4点平移点乘,Search pss in the received buffer each 4 samples which ensures a memory alignment on 128 bits (32 bits x 4 )
for (n = start; n < start + length; n += 4) { //
……
const c32_t result = dot_product(pssTime[pss_index],
&(rxdata[ar][n + is * frame_parms->samples_per_frame]),
frame_parms->ofdm_symbol_size,
shift);
const c64_t r64 = {.r = result.r, .i = result.i};
pss_corr_ue += squaredMod(r64); //相关值的能量
3)=> 调用dot_product
但是这个限制会导致“点乘”并没有真正执行(比如用mac电脑就是arm架构,会跳过):
#if defined(__x86_64__) || defined(__i386__)
if (__builtin_cpu_supports("avx2")) {
4)注意:
a) 一个奇怪的问题,随意的写printf,居然会导致Segmentation fault (core dumped)的错误(程序崩掉),哎,c好脆弱的
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。