












1)初始同步,需要加-I
2)调用nr_initial_sync:
nr_initial_sync_t nr_initial_sync(UE_nr_rxtx_proc_t *proc,
PHY_VARS_NR_UE *ue,
int n_frames,
int sa,
nr_gscn_info_t gscnInfo[MAX_GSCN_BAND],
int numGscn)
逐个GSCN扫描:
for (int s = 0; s < numGscn; s++) {
nr_ue_ssb_scan_t *ssbInfo = &ssb_info[s];
但因为是仿真,仅有一个GSCN
每次扫描,需要初始化ssbInfo结构,其会被装填上被搜索的数据(即“接收数据”):
ssbInfo->rxdata[ant] = malloc16(sizeof(c16_t) * (fp->samples_per_frame * 2 + fp->ofdm_symbol_size));
其中,fp->samples_per_frame为614400(应该是10毫秒,共20个slot@30kHz,每个slot有30720个采样点),fp->ofdm_symbol_size为2048
memcpy(ssbInfo->rxdata[ant], ue->common_vars.rxdata[ant], sizeof(c16_t) * fp->samples_per_frame * 2);
ssbInfo->rxdata的前面数据来自ue->common_vars.rxdata,长度为sizeof(c16_t) * fp->samples_per_frame * 2
memset(ssbInfo->rxdata[ant] + fp->samples_per_frame * 2, 0, fp->ofdm_symbol_size * sizeof(c16_t));
ssbInfo->rxdata后面数据设置为0,长度为fp->ofdm_symbol_size * sizeof(c16_t)
这里感觉有点问题,怎么就要fp->samples_per_frame * 2个采样点了,不应该是fp->samples_per_frame个采样点吗?
而且扩展的fp->ofdm_symbol_size个点,应该要重复开头的ofdm_symbol_size个点吧,不应该是取0吧?当然,程序也没有仿真接收机从SSB当中采样的情形(虽然实际中是很可能发生的)
3)=>单个GSCN的ssb搜索
用函数指针的方式来调用:
task_t t = {.func = nr_scan_ssb, .args = ssbInfo}
其中:
typedef struct {
void* args;
void (*func)(void* args);
} task_t;
指向的函数是:
void nr_scan_ssb(void *arg)
{
/* Initial synchronisation
*
* 1 radio frame = 10 ms
* <--------------------------------------------------------------------------->
* -----------------------------------------------------------------------------
* | Received UE data buffer |
* ----------------------------------------------------------------------------
* --------------------------
* <-------------->| pss | pbch | sss | pbch |
* --------------------------
* sync_pos SS/PBCH block
*/
4)=> 调用nr_search_ssb_common,搜索PSS/SSS
5)对于PBCH,不走nr_initial_sync,直接走nr_pbch_detection,检测PBCH
注:非初始同步,也是直接走nr_pbch_detection,检测PBCH,即假设已经时频同步好了
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。