2026a

# dpskdemod


差分相移键控解调

函数库: TyCommunication

# 语法

z = dpskdemod(y, M)
z = dpskdemod(y, M, phaserot)
z = dpskdemod(y, M, phaserot, symorder)

# 说明

z = dpskdemod(y, M) 解调具有调制阶数 M 的 DPSK 调制信号的复包络 y。


z = dpskdemod(y,M, phaserot) 指定 DPSK 调制的相位旋转。


z = dpskdemod(y,M, phaserot, symorder) 也指定了符号的顺序。

# 示例

DPSK 解调

在一个引入相移的通信信道中解调 DPSK 数据。

生成一个 4 进制的数据向量并使用 DPSK 进行调制。

using TyCommunication
using TyMath
rng = MT19937ar(1234)
M = 4
dataIn = randi(rng, [0 M - 1], 1000, 1)
txSig = dpskmod(dataIn, M)

应用传输过程中产生的随机相移。

rxSig = txSig * exp(2im * pi * rand(rng))

对收到的信号进行解调。

dataOut = dpskdemod(rxSig, M)

调制器和解调器具有相同的初始条件。然而,只有接收的信号经历了相移。因此,第一个解调的符号很可能是错误的。因此,在使用 DPSK 时,你应该总是丢弃第一个符号。

找到符号错误的数量。

errs, = symerr(dataIn, dataOut)
errs = 1

有一个符号是错误的。丢掉第一个符号后,重复错误计算。

errs, = symerr(dataIn[2:end], dataIn[2:end])
errs = 0

# 输入参数

y - DPSK 调制的输入信号
向量 | 矩阵

DPSK 调制的输入信号,指定为向量或矩阵。如果 y 是一个矩阵,该函数独立处理各列。

数据类型: Float

复数支持:

M - 调制阶数
二的整数次方

调制阶数,指定为 2 的整数次方。

示例: 2 | 4 | 16

数据类型: Int

phaserot - 相位旋转
0(默认)| 标量 | [ ]

DPSK 调制的相位旋转,以弧度为实数标量指定。每个符号的总相移是 phaserot 和差分调制产生的相位之和。

如果你指定 phaserot 为空,那么 dspkdemod 使用 0 度的相位旋转。

示例: pi/4

数据类型: Float

symorder - 符号顺序
"bin"(默认) | "gray"

符号顺序,指定为 "bin" 或 "gray"。这个参数指定了函数如何将二进制向量分配给相应的整数。

如果符号顺序是 "bin",函数使用自然的二进制码排序。

如果符号顺序是 "gray",函数使用格雷码的排序。

数据类型: String

# 输出参数

z - DPSK 解调的输出信号
向量 | 矩阵

DPSK 解调的输出信号,以向量或矩阵形式返回,其列数与输入信号 y 相同。

提示

这个函数中使用的微分算法比较了一个调制信号的两个连续元素。为了确定向量 z 的第一个元素,或矩阵 z 的第一行,该函数使用初始相位旋转为 0。

# 另请参阅

dpskmod | pskdemod | pskmod