NRRG tool update to R17(2022-12)
2023/4/1: aotSsb, aotPdcchSib1 and exportNrrg重构完成
exportNrrg使用Excelize包将NR resource grid导出为excel,以下片段为FDD部分:
var keys []int
for sfn := range rgd.gridFddDl {
keys = append(keys, sfn)
}
sort.Ints(keys)
shn := "FDD_DL"
if wb.GetSheetName(wb.GetActiveSheetIndex()) == "Sheet1" {
wb.SetSheetName("Sheet1", shn)
} else {
wb.NewSheet(shn)
}
row := 1
col := 1
for isc := 0; isc < rgd.scPerSymb; isc++ {
// write vertical header
if isc == 0 {
wb.SetCellValue(shn, fmt.Sprintf("%v%v", int2Col(col), row), "k/l")
}
wb.SetCellValue(shn, fmt.Sprintf("%v%v", int2Col(col), row+1+isc), fmt.Sprintf("%v-%v", isc/rgd.scPerRb, isc%rgd.scPerRb))
}
for _, sfn := range keys {
for isymb := 0; isymb < rgd.symbPerRf; isymb++ {
// skip empty slot
if rgd.gridFddDl[sfn].tags[isymb/rgd.symbPerSlot] == nil || rgd.gridFddDl[sfn].tags[isymb/rgd.symbPerSlot].Cardinality() == 0 {
continue
} else {
col++
}
// write horizontal header
wb.SetCellValue(shn, fmt.Sprintf("%v%v", int2Col(col), row), fmt.Sprintf("%v-%v-%v", sfn, isymb/rgd.symbPerSlot, isymb%rgd.symbPerSlot))
for isc := 0; isc < rgd.scPerSymb; isc++ {
tag := rgd.resMap[rgd.gridFddDl[sfn].res[isymb*rgd.scPerSymb+isc]].Tag
style := rgd.resMap[rgd.gridFddDl[sfn].res[isymb*rgd.scPerSymb+isc]].Style
axis := fmt.Sprintf("%v%v", int2Col(col), row+1+isc)
wb.SetCellValue(shn, axis, fmt.Sprintf("%v", tag))
wb.SetCellStyle(shn, axis, axis, style)
}
}
}
wb.SetPanes(shn, `{"freeze":true,"split":false,"x_split":1,"y_split":1}`)
wb.AutoFilter(shn, "A1", fmt.Sprintf("%v%v", int2Col(col), rgd.scPerSymb+1), "")
excel渲染效果如下:
*列表头为:sfn-slot-symbol三元组;行表头为: rb-subcarrier二元组;
*自动跳过empty时隙(即不发送Physical Signal/Channel的slot);
*PDCCHx用下标x标记PDCCH candidate;