Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
nearlink-sdr 1.0.9 文档
nearlink-sdr 1.0.9 文档
  • 快速入门
  • 操作指南
    • 运行链路仿真
    • 添加新的调制方式
    • QoS 服务质量管理
    • 使用 SLE 节点实体
    • Rust 加速模块
    • SDR E310 部署规划
    • 构建文档
  • 技术参考
    • nearlink_sdr
      • nearlink_sdr.mac
        • nearlink_sdr.mac.access
        • nearlink_sdr.mac.broadcast
        • nearlink_sdr.mac.crypto
        • nearlink_sdr.mac.frame
        • nearlink_sdr.mac.link_control
        • nearlink_sdr.mac.link_manager
        • nearlink_sdr.mac.power_control
        • nearlink_sdr.mac.qos
        • nearlink_sdr.mac.scheduler
        • nearlink_sdr.mac.security
        • nearlink_sdr.mac.security_manager
        • nearlink_sdr.mac.signaling
        • nearlink_sdr.mac.smf
        • nearlink_sdr.mac.smf_scheduler
      • nearlink_sdr.sim
        • nearlink_sdr.sim.link_sim
        • nearlink_sdr.sim.usrp_sim
      • nearlink_sdr.common
        • nearlink_sdr.common.bch
        • nearlink_sdr.common.code_block_seg
        • nearlink_sdr.common.crc
        • nearlink_sdr.common.m_sequence
        • nearlink_sdr.common.mcs
        • nearlink_sdr.common.polar
        • nearlink_sdr.common.prbs
        • nearlink_sdr.common.scrambler
      • nearlink_sdr.phy
        • nearlink_sdr.phy.channel
        • nearlink_sdr.phy.control_info
        • nearlink_sdr.phy.data_link
        • nearlink_sdr.phy.equalizer
        • nearlink_sdr.phy.frame
        • nearlink_sdr.phy.freq_hopping
        • nearlink_sdr.phy.gfsk
        • nearlink_sdr.phy.mac_interface
        • nearlink_sdr.phy.measurement
        • nearlink_sdr.phy.measurement_frame
        • nearlink_sdr.phy.measurement_tx
        • nearlink_sdr.phy.mock_backend
        • nearlink_sdr.phy.multitone
        • nearlink_sdr.phy.pilot
        • nearlink_sdr.phy.pluto_backend
        • nearlink_sdr.phy.preamble
        • nearlink_sdr.phy.psk
        • nearlink_sdr.phy.rf_compliance
        • nearlink_sdr.phy.rx_pipeline
        • nearlink_sdr.phy.sdr_backend
        • nearlink_sdr.phy.sync_sequence
        • nearlink_sdr.phy.tx_pipeline
        • nearlink_sdr.phy.uhd_backend
        • nearlink_sdr.phy.usrp
        • nearlink_sdr.phy.uwb_measurement_security
        • nearlink_sdr.phy.uwb_pulse
      • nearlink_sdr.node
  • 设计说明
    • SparkLink SLE 协议总览
    • 物理层原理
    • 物理层详解
    • MAC 层详解
    • 安全子系统详解
    • 端到端数据流
    • 系统架构
    • 标准条款映射
  • 更新日志
  • API Reference
    • nearlink_sdr
      • nearlink_sdr.mac
        • nearlink_sdr.mac.access
        • nearlink_sdr.mac.broadcast
        • nearlink_sdr.mac.crypto
        • nearlink_sdr.mac.frame
        • nearlink_sdr.mac.link_control
        • nearlink_sdr.mac.link_manager
        • nearlink_sdr.mac.power_control
        • nearlink_sdr.mac.qos
        • nearlink_sdr.mac.scheduler
        • nearlink_sdr.mac.security
        • nearlink_sdr.mac.security_manager
        • nearlink_sdr.mac.signaling
        • nearlink_sdr.mac.smf
        • nearlink_sdr.mac.smf_scheduler
      • nearlink_sdr.sim
        • nearlink_sdr.sim.link_sim
        • nearlink_sdr.sim.usrp_sim
      • nearlink_sdr.common
        • nearlink_sdr.common.bch
        • nearlink_sdr.common.code_block_seg
        • nearlink_sdr.common.crc
        • nearlink_sdr.common.m_sequence
        • nearlink_sdr.common.mcs
        • nearlink_sdr.common.polar
        • nearlink_sdr.common.prbs
        • nearlink_sdr.common.scrambler
      • nearlink_sdr.phy
        • nearlink_sdr.phy.channel
        • nearlink_sdr.phy.control_info
        • nearlink_sdr.phy.data_link
        • nearlink_sdr.phy.equalizer
        • nearlink_sdr.phy.frame
        • nearlink_sdr.phy.freq_hopping
        • nearlink_sdr.phy.gfsk
        • nearlink_sdr.phy.mac_interface
        • nearlink_sdr.phy.measurement
        • nearlink_sdr.phy.measurement_frame
        • nearlink_sdr.phy.measurement_tx
        • nearlink_sdr.phy.mock_backend
        • nearlink_sdr.phy.multitone
        • nearlink_sdr.phy.pilot
        • nearlink_sdr.phy.pluto_backend
        • nearlink_sdr.phy.preamble
        • nearlink_sdr.phy.psk
        • nearlink_sdr.phy.rf_compliance
        • nearlink_sdr.phy.rx_pipeline
        • nearlink_sdr.phy.sdr_backend
        • nearlink_sdr.phy.sync_sequence
        • nearlink_sdr.phy.tx_pipeline
        • nearlink_sdr.phy.uhd_backend
        • nearlink_sdr.phy.usrp
        • nearlink_sdr.phy.uwb_measurement_security
        • nearlink_sdr.phy.uwb_pulse
      • nearlink_sdr.node
Back to top
View this page

nearlink_sdr.mac.scheduler¶

时序调度器 -- TXS-10002-2025 标准 6.3/6.6/7.2。

管理 SLE 系统的基础时隙、调度时隙、超帧结构和事件组调度:

  • 系统基础时隙 (Tsys = 125 μs, 30 bit 计数器)

  • 系统调度时隙 (Tschedule = k × 25 μs, k ∈ {1,2,3,4,5})

  • 超帧: 两个相邻 SMF 之间的时间资源

  • 事件组: 多个事件的容器, 以事件组周期重复

  • 时间片: 超帧内的调度时间块 (偏移量 + 持续长度 + 周期 + 重复次数)

Module Contents¶

Classes¶

EventGroupScheduler

事件组调度器。

EventTimingParams

事件组计时参数 (标准 7.1.4.3 表29/30)。

LinkScheduleEntry

链路信令: 链路在超帧内的时间资源配置 (标准 6.6.2.2)。

MultiLevelInterval

31 级多级收发间隔 (标准 7.2.2)。

ScheduleManager

综合调度管理器。

ScheduleSlotType

系统调度时隙类型枚举 (3 bit, 标准 6.3.1)。

SleepClockAccuracy

睡眠时钟精度枚举 (3 bit)。

SlotCounter

30 bit 系统时隙计数器。

SmfScheduleConfig

SMF 调度信令参数 (标准 6.6.2.1)。

Superframe

超帧: 两个相邻 SMF 之间的时间资源。

TimeSlice

超帧内时间片配置 (标准 6.6.2.2)。

TxRxIntervalType

收发间隔类型枚举 (4 bit, 标准 7.2.1)。

Functions¶

schedule_slot_us

将调度时隙类型枚举转为微秒值。

tx_rx_interval_us

收发间隔类型转微秒值。

API¶

class nearlink_sdr.mac.scheduler.EventGroupScheduler[源代码]¶

事件组调度器。

管理一个链路上事件组的时间计算, 根据事件组参数 生成事件的调度时间表。

变量:
  • timing -- 事件计时参数。

  • anchor_slot -- 锚点时隙 (基础时隙顺序号)。

  • anchor_offset_us -- 事件组起始偏移 (μs)。

timing: nearlink_sdr.mac.scheduler.EventTimingParams¶

'field(...)'

anchor_slot: int¶

0

anchor_offset_us: int¶

0

anchor_time_us() → int[源代码]¶

锚点绝对时间 (μs)。

event_start_times(group_index: int = 0) → list[int][源代码]¶

计算指定事件组内每个事件的起始时间。

参数:

group_index -- 第几个事件组 (从 0 开始)。

返回:

事件起始时间列表 (μs, 绝对时间)。

tx_window(event_start_us: int) → tuple[int, int][源代码]¶

计算一个事件中先发窗口的时间区间。

参数:

event_start_us -- 事件起始时间 (μs)。

返回:

(start_us, end_us) 先发窗口区间。

rx_window(event_start_us: int) → tuple[int, int][源代码]¶

计算一个事件中后发窗口的时间区间。

参数:

event_start_us -- 事件起始时间 (μs)。

返回:

(start_us, end_us) 后发窗口区间。

event_schedule(group_index: int = 0) → list[dict[str, int | tuple[int, int]]][源代码]¶

生成完整的事件调度表。

返回每个事件的起始时间、先发窗口和后发窗口。

参数:

group_index -- 事件组索引。

返回:

[{"event_start": int, "tx_window": (s, e), "rx_window": (s, e)}, ...]

next_event_group_start(current_us: int) → int[源代码]¶

计算下一个事件组的起始时间。

参数:

current_us -- 当前时间 (μs)。

返回:

下一个事件组起始时间 (μs)。

class nearlink_sdr.mac.scheduler.EventTimingParams[源代码]¶

事件组计时参数 (标准 7.1.4.3 表29/30)。

所有周期以调度时隙为单位, 间隔以 μs 为单位。

event_group_period: int¶

0

event_period: int¶

0

intra_event_interval: int¶

0

inter_event_interval: int¶

0

event_count: int¶

0

schedule_slot_type: int¶

None

first_tx: bool¶

True

tx_max_offset: int¶

0

rx_max_offset: int¶

0

tx_max_pdu: int¶

251

rx_max_pdu: int¶

251

delay_period: int¶

0

supervision_timeout: int¶

100

property schedule_slot_us: int¶

当前调度时隙的微秒值。

property event_group_period_us: int¶

事件组周期 (μs)。

property event_period_us: int¶

事件周期 (μs), 为 0 时由事件间间隔决定。

property supervision_timeout_us: int¶

超时时间 (μs)。

property max_event_duration_us: int¶

单个事件的最大持续时间 (μs)。

class nearlink_sdr.mac.scheduler.LinkScheduleEntry[源代码]¶

链路信令: 链路在超帧内的时间资源配置 (标准 6.6.2.2)。

变量:
  • link_id -- 逻辑链路标识 (24 bit)。

  • effective_slot -- 信令生效时隙 (32 bit, 基础时隙)。

  • period_factor -- 链路周期因子 (8 bit)。

  • schedule_slot_type -- 调度时隙长度 (3 bit)。

  • time_slices -- 时间片配置列表。

link_id: int¶

0

effective_slot: int¶

0

period_factor: int¶

1

schedule_slot_type: int¶

None

time_slices: list[nearlink_sdr.mac.scheduler.TimeSlice]¶

'field(...)'

class nearlink_sdr.mac.scheduler.MultiLevelInterval[源代码]¶

31 级多级收发间隔 (标准 7.2.2)。

Polar 编码分段 [00001]~[11111] 各对应一个 8 bit 间隔值 (μs)。

变量:

levels -- 31 个间隔值 (μs), 索引 0-30 对应级别 1-31。

levels: list[int]¶

'field(...)'

get(level: int) → int[源代码]¶

获取指定级别的间隔 (μs)。level 从 1 开始。

set(level: int, value_us: int) → None[源代码]¶

设置指定级别的间隔。

pack() → bytes[源代码]¶

序列化为 31 字节。

classmethod unpack(data: bytes) → nearlink_sdr.mac.scheduler.MultiLevelInterval[源代码]¶

从 31 字节反序列化。

class nearlink_sdr.mac.scheduler.ScheduleManager[源代码]¶

综合调度管理器。

整合超帧管理、事件组调度和收发间隔控制, 提供链路时间资源的统一管理接口。

变量:
  • superframe -- 超帧结构。

  • event_schedulers -- 按 link_id 索引的事件组调度器。

  • slot_counter -- 全局时隙计数器。

  • tx_rx_interval -- 当前收发间隔类型。

  • multi_interval -- 多级收发间隔配置。

superframe: nearlink_sdr.mac.scheduler.Superframe¶

'field(...)'

event_schedulers: dict[int, nearlink_sdr.mac.scheduler.EventGroupScheduler]¶

'field(...)'

slot_counter: nearlink_sdr.mac.scheduler.SlotCounter¶

'field(...)'

tx_rx_interval: int¶

None

multi_interval: nearlink_sdr.mac.scheduler.MultiLevelInterval¶

'field(...)'

configure_smf(config: nearlink_sdr.mac.scheduler.SmfScheduleConfig) → None[源代码]¶

配置 SMF 调度参数。

register_link(link_id: int, timing: nearlink_sdr.mac.scheduler.EventTimingParams, time_slices: list[nearlink_sdr.mac.scheduler.TimeSlice] | None = None, anchor_slot: int = 0, anchor_offset_us: int = 0) → None[源代码]¶

注册链路并配置事件组调度。

参数:
  • link_id -- 逻辑链路标识。

  • timing -- 事件计时参数。

  • time_slices -- 超帧内时间片列表 (可选)。

  • anchor_slot -- 事件组锚点时隙。

  • anchor_offset_us -- 事件组起始偏移 (μs)。

unregister_link(link_id: int) → None[源代码]¶

注销链路调度。

get_event_schedule(link_id: int, group_index: int = 0) → list[dict[str, int | tuple[int, int]]] | None[源代码]¶

获取指定链路的事件调度表。

next_smf_slot() → int[源代码]¶

计算下一个 SMF 时隙号。

advance_time(slots: int) → int[源代码]¶

推进全局时钟。

update_tx_rx_interval(interval_type: int) → int[源代码]¶

更新收发间隔类型。

返回:

更新后的间隔值 (μs)。

check_supervision_timeout(link_id: int) → bool[源代码]¶

检查链路是否超时。

基于事件组调度器的超时参数判断当前时间 是否超过了锚点 + 超时时限。

返回:

True 表示已超时。

class nearlink_sdr.mac.scheduler.ScheduleSlotType[源代码]¶

Bases: enum.IntEnum

系统调度时隙类型枚举 (3 bit, 标准 6.3.1)。

Initialization

Initialize self. See help(type(self)) for accurate signature.

T_25US¶

0

T_50US¶

1

T_75US¶

2

T_100US¶

3

T_125US¶

4

class nearlink_sdr.mac.scheduler.SleepClockAccuracy[源代码]¶

Bases: enum.IntEnum

睡眠时钟精度枚举 (3 bit)。

Initialization

Initialize self. See help(type(self)) for accurate signature.

PPM_251_500¶

0

PPM_151_250¶

1

PPM_101_150¶

2

PPM_76_100¶

3

PPM_51_75¶

4

PPM_31_50¶

5

PPM_21_30¶

6

PPM_0_20¶

7

class nearlink_sdr.mac.scheduler.SlotCounter[源代码]¶

30 bit 系统时隙计数器。

以 Tsys = 125 μs 为最小递增单位, 30 bit 可表示约 37.3 小时。

变量:

value -- 当前计数值 (0 ~ 2^30 - 1)。

value: int¶

0

advance(slots: int = 1) → int[源代码]¶

前进指定时隙数, 自动回绕。

time_us() → int[源代码]¶

当前计数值对应的绝对时间 (μs)。

set_from_us(us: int) → None[源代码]¶

从微秒值设置计数器 (向下取整到时隙边界)。

distance_to(target: int) → int[源代码]¶

计算到目标时隙的距离 (考虑回绕)。

class nearlink_sdr.mac.scheduler.SmfScheduleConfig[源代码]¶

SMF 调度信令参数 (标准 6.6.2.1)。

变量:
  • effective_slot -- 信令生效时隙 (32 bit, 基础时隙)。

  • smf_interval -- 两个 SMF 之间的间隔 (16 bit, 基础时隙)。

  • frame_type -- 无线帧类型指示 (4 bit)。

  • bandwidth -- 带宽指示 (2 bit, 0=1M/1=2M/2=4M)。

  • pilot_density -- 导频密度指示 (2 bit)。

  • channel_count -- 可用频点个数 (8 bit)。

  • channel_table -- 频点表。

effective_slot: int¶

0

smf_interval: int¶

800

frame_type: int¶

2

bandwidth: int¶

0

pilot_density: int¶

0

channel_count: int¶

0

channel_table: bytes¶

b''

property smf_interval_us: int¶

SMF 间隔 (μs)。

class nearlink_sdr.mac.scheduler.Superframe[源代码]¶

超帧: 两个相邻 SMF 之间的时间资源。

管理 SMF 周期内的链路调度, 活动区间和低功耗区间的划分。

变量:
  • smf_config -- SMF 调度参数。

  • link_entries -- 已注册的链路调度条目。

smf_config: nearlink_sdr.mac.scheduler.SmfScheduleConfig¶

'field(...)'

link_entries: list[nearlink_sdr.mac.scheduler.LinkScheduleEntry]¶

'field(...)'

property duration_us: int¶

超帧持续时间 (μs)。

property duration_slots: int¶

超帧持续时间 (基础时隙数)。

add_link(entry: nearlink_sdr.mac.scheduler.LinkScheduleEntry) → None[源代码]¶

注册一个链路的时间资源配置。

remove_link(link_id: int) → bool[源代码]¶

移除一个链路的调度配置。

get_link(link_id: int) → nearlink_sdr.mac.scheduler.LinkScheduleEntry | None[源代码]¶

按链路标识查找调度条目。

active_region_us() → tuple[int, int][源代码]¶

计算活动区间 (从 SMF 到最后一个时间片结束)。

返回:

(start_us, end_us) 活动区间。start_us 始终为 0 (SMF 起始)。

check_conflicts() → list[tuple[int, int, int, int]][源代码]¶

检测时间片冲突。

返回:

冲突列表 [(link_id_a, link_id_b, overlap_start, overlap_end), ...]。

class nearlink_sdr.mac.scheduler.TimeSlice[源代码]¶

超帧内时间片配置 (标准 6.6.2.2)。

描述一个链路在超帧内的时间资源分配。

变量:
  • offset -- 相对 SMF 起始点的偏移 (调度时隙)。

  • duration -- 时间片持续长度 (调度时隙)。

  • period -- 时间片重复周期 (调度时隙)。

  • repeat_count -- 时间片重复次数。

offset: int¶

0

duration: int¶

0

period: int¶

0

repeat_count: int¶

1

absolute_intervals(slot_us: int) → list[tuple[int, int]][源代码]¶

计算此时间片展开后的所有绝对时间区间。

参数:

slot_us -- 调度时隙的微秒值。

返回:

[(start_us, end_us), ...] 时间区间列表。

class nearlink_sdr.mac.scheduler.TxRxIntervalType[源代码]¶

Bases: enum.IntEnum

收发间隔类型枚举 (4 bit, 标准 7.2.1)。

Initialization

Initialize self. See help(type(self)) for accurate signature.

INTERVAL_125US¶

0

INTERVAL_100US¶

1

INTERVAL_75US¶

2

INTERVAL_50US¶

3

INTERVAL_25US¶

4

nearlink_sdr.mac.scheduler.schedule_slot_us(slot_type: int) → int[源代码]¶

将调度时隙类型枚举转为微秒值。

nearlink_sdr.mac.scheduler.tx_rx_interval_us(interval_type: int) → int[源代码]¶

收发间隔类型转微秒值。

Next
nearlink_sdr.mac.security
Previous
nearlink_sdr.mac.qos
Copyright ©
Made with Sphinx and @pradyunsg's Furo
On this page
  • nearlink_sdr.mac.scheduler
    • Module Contents
      • Classes
      • Functions
      • API
        • EventGroupScheduler
          • EventGroupScheduler.timing
          • EventGroupScheduler.anchor_slot
          • EventGroupScheduler.anchor_offset_us
          • EventGroupScheduler.anchor_time_us()
          • EventGroupScheduler.event_start_times()
          • EventGroupScheduler.tx_window()
          • EventGroupScheduler.rx_window()
          • EventGroupScheduler.event_schedule()
          • EventGroupScheduler.next_event_group_start()
        • EventTimingParams
          • EventTimingParams.event_group_period
          • EventTimingParams.event_period
          • EventTimingParams.intra_event_interval
          • EventTimingParams.inter_event_interval
          • EventTimingParams.event_count
          • EventTimingParams.schedule_slot_type
          • EventTimingParams.first_tx
          • EventTimingParams.tx_max_offset
          • EventTimingParams.rx_max_offset
          • EventTimingParams.tx_max_pdu
          • EventTimingParams.rx_max_pdu
          • EventTimingParams.delay_period
          • EventTimingParams.supervision_timeout
          • EventTimingParams.schedule_slot_us
          • EventTimingParams.event_group_period_us
          • EventTimingParams.event_period_us
          • EventTimingParams.supervision_timeout_us
          • EventTimingParams.max_event_duration_us
        • LinkScheduleEntry
          • LinkScheduleEntry.link_id
          • LinkScheduleEntry.effective_slot
          • LinkScheduleEntry.period_factor
          • LinkScheduleEntry.schedule_slot_type
          • LinkScheduleEntry.time_slices
        • MultiLevelInterval
          • MultiLevelInterval.levels
          • MultiLevelInterval.get()
          • MultiLevelInterval.set()
          • MultiLevelInterval.pack()
          • MultiLevelInterval.unpack()
        • ScheduleManager
          • ScheduleManager.superframe
          • ScheduleManager.event_schedulers
          • ScheduleManager.slot_counter
          • ScheduleManager.tx_rx_interval
          • ScheduleManager.multi_interval
          • ScheduleManager.configure_smf()
          • ScheduleManager.register_link()
          • ScheduleManager.unregister_link()
          • ScheduleManager.get_event_schedule()
          • ScheduleManager.next_smf_slot()
          • ScheduleManager.advance_time()
          • ScheduleManager.update_tx_rx_interval()
          • ScheduleManager.check_supervision_timeout()
        • ScheduleSlotType
          • ScheduleSlotType.T_25US
          • ScheduleSlotType.T_50US
          • ScheduleSlotType.T_75US
          • ScheduleSlotType.T_100US
          • ScheduleSlotType.T_125US
        • SleepClockAccuracy
          • SleepClockAccuracy.PPM_251_500
          • SleepClockAccuracy.PPM_151_250
          • SleepClockAccuracy.PPM_101_150
          • SleepClockAccuracy.PPM_76_100
          • SleepClockAccuracy.PPM_51_75
          • SleepClockAccuracy.PPM_31_50
          • SleepClockAccuracy.PPM_21_30
          • SleepClockAccuracy.PPM_0_20
        • SlotCounter
          • SlotCounter.value
          • SlotCounter.advance()
          • SlotCounter.time_us()
          • SlotCounter.set_from_us()
          • SlotCounter.distance_to()
        • SmfScheduleConfig
          • SmfScheduleConfig.effective_slot
          • SmfScheduleConfig.smf_interval
          • SmfScheduleConfig.frame_type
          • SmfScheduleConfig.bandwidth
          • SmfScheduleConfig.pilot_density
          • SmfScheduleConfig.channel_count
          • SmfScheduleConfig.channel_table
          • SmfScheduleConfig.smf_interval_us
        • Superframe
          • Superframe.smf_config
          • Superframe.link_entries
          • Superframe.duration_us
          • Superframe.duration_slots
          • Superframe.add_link()
          • Superframe.remove_link()
          • Superframe.get_link()
          • Superframe.active_region_us()
          • Superframe.check_conflicts()
        • TimeSlice
          • TimeSlice.offset
          • TimeSlice.duration
          • TimeSlice.period
          • TimeSlice.repeat_count
          • TimeSlice.absolute_intervals()
        • TxRxIntervalType
          • TxRxIntervalType.INTERVAL_125US
          • TxRxIntervalType.INTERVAL_100US
          • TxRxIntervalType.INTERVAL_75US
          • TxRxIntervalType.INTERVAL_50US
          • TxRxIntervalType.INTERVAL_25US
        • schedule_slot_us()
        • tx_rx_interval_us()