nearlink_sdr.common.prbs 源代码
"""伪随机比特序列发生器 -- TXS-10002-2025 标准 8.3.5 / 14.1
PRBS11: x^11 + x^2 + 1, 周期 2047, 用于测试有用信号数据。
PRBS17: x^17 + x^3 + 1, 周期 131071, 用于测试干扰信号数据。
"""
from __future__ import annotations
__all__ = [
"prbs11",
"prbs17",
]
import numpy as np
from numpy.typing import NDArray
def _lfsr_generate(state: list[int], tap_a: int, tap_b: int,
length: int) -> NDArray[np.uint8]:
"""通用 LFSR 序列生成。
结构: 左移 LFSR, 输出端为最高位 stage, 反馈: stage[tap_a] XOR stage[tap_b] → stage[0]。
:param state: 初始状态, state[0] 为输入端, state[-1] 为输出端。
:type state: list[int]
:param tap_a: 反馈抓头位置 (stage 编号)。
:type tap_a: int
:param tap_b: 反馈抓头位置 (stage 编号)。
:type tap_b: int
:param length: 生成序列长度。
:type length: int
:returns: 输出比特序列。
:rtype: NDArray[np.uint8]
"""
n = len(state)
out = np.empty(length, dtype=np.uint8)
s = list(state)
for i in range(length):
out[i] = s[n - 1]
feedback = s[tap_a] ^ s[tap_b]
for j in range(n - 1, 0, -1):
s[j] = s[j - 1]
s[0] = feedback
return out
[文档]
def prbs11(length: int, seed: int = 0x7FF) -> NDArray[np.uint8]:
"""PRBS11 序列生成。
多项式 x^11 + x^2 + 1。输出端 stage 10, 反馈 stage[10] XOR stage[1] → stage[0]。
:param length: 输出比特数。
:type length: int
:param seed: 11 位初始种子 (默认全 1)。
:type seed: int
:returns: PRBS11 序列。
:rtype: NDArray[np.uint8]
"""
state = [(seed >> i) & 1 for i in range(11)]
return _lfsr_generate(state, 10, 1, length)
[文档]
def prbs17(length: int, seed: int = 0x1FFFF) -> NDArray[np.uint8]:
"""PRBS17 序列生成。
多项式 x^17 + x^3 + 1。输出端 stage 16, 反馈 stage[16] XOR stage[2] → stage[0]。
:param length: 输出比特数。
:type length: int
:param seed: 17 位初始种子 (默认全 1)。
:type seed: int
:returns: PRBS17 序列。
:rtype: NDArray[np.uint8]
"""
state = [(seed >> i) & 1 for i in range(17)]
return _lfsr_generate(state, 16, 2, length)