惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Recent Announcements
Recent Announcements
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
U
Unit 42
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
腾讯CDC
I
InfoQ
GbyAI
GbyAI
博客园_首页

博客园 - 普罗大众

debug的一个问题 phy_simulators之nr_dlsim之4层接收的优化 phy_simulators之nr_dlsim之一个bug phy_simulators之nr_dlsim开始 phy_simulators之nr_pbchsim之PBCH解码 phy_simulators之nr_pbchsim之PBCH-DMRS检测 phy_simulators之nr_pbchsim之仿真的局限 phy_simulators之nr_pbchsim之一些结构 phy_simulators之nr_pbchsim之SSS检测 phy_simulators之nr_pbchsim之信道 phy_simulators之nr_pbchsim之发送端 phy_simulators之nr_pbchsim之PSS检测 phy_simulators之dlsim.c debug方法三:printf debug方法二:用vs code debug方法一:直接用gdb命令 phy_simulators的编译生成方法三:CMakePresets.json phy_simulators的编译生成方法二:手动写cmake脚本 phy_simulators的编译生成方法一:build_oai --phy_simulators open air interface的phy_simultors编译过了 AI App的使用感觉 从“图像视频编码”到“通信物理层” MAC pc + Ubuntu + OAI 原来Fourier是法国的,怪不得法国小波分析这么牛 整理心情
phy_simulators之nr_pbchsim之初始同步
普罗大众 · 2026-03-12 · via 博客园 - 普罗大众

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,即假设已经时频同步好了