bitmap(位图)

博客介绍了位图的概念,它是通过使用位来标记元素价值的一种数据结构。内容包括位图的存储方式,如何创建映射表,位移转换的计算方法,并提供了C++的代码实现示例。

1.什么是位图?

来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

比如:
申请一个int型的空间,则有4Byte,32bit。输入1,2 , 3 ,4
0000 0000 0000 0000 0000 0000 0000 0000
输入1
0000 0000 0000 0000 0000 0000 0000 0010
输入2
0000 0000 0000 0000 0000 0000 0000 0110
输入3
0000 0000 0000 0000 0000 0000 0000 1110
输入4
0000 0000 0000 0000 0000 0000 0001 1110

2.map映射表

假设需要排序或者查找的范围0~1000,那么我们需要申请的内存空间为 int a[N/32 + 1].其中a[0]在内存中占32位,依此类推:
bitmap表为:
a[0] 0~31
a[1] 32~63
a[2] 64~95
a[3] 96~127

3.位移转换

(1) 求十进制数0-N对应的在数组a中的下标
index= N / 32即可,index即为n对应的数组下标。

(2)求十进制数0-N对应的bit位
pos = N % 32即可

(3)利用移位0-31使得对应的32bit位为1

4.代码实现(c++)

#pragma once
#include &
### DCI Bitmap位图的作用 DCI bitmap位图用于指示物理下行共享信道(PDSCH)所占用的资源块组(RBG)[^4]。通过这种方式,基站可以灵活地向用户设备(UE)传达具体的频域资源分配信息。 对于Type0类型的PDSCH资源分配,DCI-RIV字段携带了一个bitmap来表示哪些RBG被分配给了特定的传输。每个bit代表一个RBG的状态:如果该位置上的值为1,则对应的RBG被分配;反之,若为0,则未分配此RBG。 ### 原理 在5G NR标准下,为了适应不同带宽需求和服务质量(QoS),引入了两种主要的PDSCH资源分配模式——Type0和Type1。其中: - **Type0** 是一种非连续性的资源分配方案; - **Type1** 则适用于连续性资源分配场景。 针对Type0而言,其采用了一种基于位图(bitmap)的方法来进行更细粒度的资源配置管理。具体来说,就是利用一系列二进制数(bits),每一个都映射到某个预定义大小的RBGs上,以此决定这些RBGs是否参与当前的数据发送过程。 此外,在计算所需bitmap长度时,会考虑到整个BWP尺寸以及起始位置等因素的影响,确保能够覆盖所有潜在可用的RBGs,并据此调整最终形成的bitmap规模\[N_{RBG}=\lceil\frac{(N_{BWP\_size}\%+\text{mod}(N_{BWP\_start},P))}{P}\rceil\]。 这里\(N_{RBG}\)指的是总的RBG数量,而\(P\)则是由协议规定的单个RBG内含有的虚拟资源块(VRBs)数目。 ### 实现方式 实际应用中,当网络侧准备下发调度指令给终端时,会在Downlink Control Information(DCI)消息里嵌入上述提到过的bitmap数据结构。接收端解析这条命令后就能获知确切应该监听哪个部分的无线频率范围内的信号。 下面给出一段简化版C++伪代码片段展示如何创建并解释这样一个bitmap: ```cpp // 计算所需的bitmap长度 int calculateBitmapLength(int bwpSize, int bwpStart, int rbgSize){ return ceil((bwpSize + fmod(bwpStart,rbgSize))/(float)rbgSize); } void generateAndParseBitmap(std::vector<bool>& bitmap, const std::string& dciPayload){ // 解析来自高层传来的dci payload获得bitmap... // 示例模拟填充bitmap逻辑 for(size_t i = 0 ;i<calculateBitmapLength(/* 参数 */); ++i){ bool isAllocated = /* ... */; bitmap.push_back(isAllocated); } } ``` 这段代码展示了基本框架,但在真实环境中还需要考虑更多细节如错误检测机制等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值