2026a

# comm_GMSKDemodulator


使用 Viterbi 算法对 GMSK 调制信号进行解调

函数库: TyCommunication

# 描述

comm_GMSKDemodulator 系统对象使用 Viterbi 算法解调使用高斯最小频移键控 (GMSK) 方法调制的信号,输入是调制信号的基带表示。

要使用 Viterbi 算法对 GMSK 调制信号进行解调:

  1. 创建 COMM_GMSKDemodulator 对象并设置其属性;

  2. 用 step 调用对象。

# 构造

# 语法

gmskdemodulator = comm_GMSKDemodulator()
gmskdemodulator = comm_GMSKDemodulator(; Name = Value)

# 说明

gmskdemodulator = comm_GMSKDemodulator() 创建一个解调器系统对象,使用 Viterbi 算法对输入的 GMSK 调制数据进行解调。


gmskdemodulator = comm_GMSKDemodulator(; Name = Value) 使用一个或多个名称值对设置属性。例如,gmskdemodulator = comm_GMSKDemodulator( PulseLength = 6) 将高斯脉冲形状的长度指定为 6 个符号间隔。

# 属性

除非另有说明,否则属性是不可更改的,这意味着在调用对象后不能更改其值。对象在调用时锁定,可以使用 release 函数进行解锁。

如果属性是可调的,则可以随时更改其值。

BitOutput - 以比特为单位输出数据的选项
false(默认)| true
以比特为单位输出数据的选项,指定为 false 或 true。
  • 将此属性设置为 false 时,System 对象调用的输出是元素为 -1 或 1 的向量;

  • 当设置此属性为 true 时,系统对象调用的输出是元素为 0 或 1 的二进制向量。

数据类型: Bool

BandwidthTimeProduct - 带宽和符号时间的乘积
0.3(默认值)| 正标量
高斯脉冲形状的带宽和符号时间的乘积,指定为正标量值。

数据类型: Float64

PulseLength - 脉冲长度
4(默认值)| 正整数

脉冲长度,指定为正整数。脉冲长度值表示高斯脉冲形状在符号间隔内的长度。

数据类型: Float64

SymbolPrehistory - 符号前史
1(默认值)| -1 | 向量

符号前史,指定为 -1、1 或元素等于这些值的向量。此属性定义调制器在第一次调用对象之前使用的数据符号,并按照时间顺序反向排列。

  • 一个标量值扩展为一个长度为 PulseLength-1 的向量;

  • 对于一个向量,其长度必须是 PulseLength-1。

数据类型: Float64

InitialPhaseOffset - 初始相位偏移
0(默认值)| 数值标量

调制波形的初始相位偏移以弧度为单位,指定为数值标量。

数据类型: Float64

SamplesPerSymbol - 每个输出符号的样本数
8(默认值)| 正整数

每个符号的样本数,指定为正整数。每个符号的样本数表示从输入样本到输出样本的上采样因子。

数据类型: Float64

TracebackDepth - 回溯深度
16(默认值)| 正整数

对于 Viterbi 算法的回溯深度,指定为正整数。

回溯深度是 Viterbi 算法用于构建每条回溯路径的网格分支数。输出中第一个解码符号之前的零符号个数代表一个解码延迟。

数据类型: Float64

# 用法

# 语法

Y = step(gmskdemodulator, X)

# 说明

Y = step(gmskdemodulator, X) 对 GMSK 调制的波形进行 GMSK 解调,并返回解调后的输入信号。

# 输入参数

X - GMSK 调制的基带信号
向量

GMSK 调制的输入信号,指定为向量。

输入信号的长度必须是 SamplesPerSymbol 属性的整数倍。

数据类型: Float64 | Float32

复数支持: Yes

# 输出参数

Y - 已解调的信号
向量

已解调的信号,以长度等于 N/SamplePerSymbol 的向量返回,其中,N 表示为输入信号 X 的长度。

  • 当将 BitOutput 属性设置为 false 时,Y 作为元素 -1 或 1 的向量返回;

  • 当将 BitOutput 属性设置为 true 时,Y 作为元素 0 或 1 的二进制向量返回。

数据类型: Float64 | Bool

复数支持: Yes

# 对象函数

要使用对象函数,请将系统对象指定为第一个输入参数。例如,要释放名为 obj 的 System 对象的系统资源,请使用以下语法:

release(obj)
对系统对象通用的操作
step 运行系统对象算法
release 释放资源并允许更改系统对象属性值和输入特性
reset 重置系统对象的内部状态

# 示例

使用 Viterbi 算法对 GMSK 调制信号进行解调
using TyCommunication
using TyMath 
rng = MT19937ar(1234)
gmskmodulator = comm_GMSKModulator(; BitInput=true, InitialPhaseOffset=pi / 4)
gmskdemodulator = comm_GMSKDemodulator(; BitOutput=true, InitialPhaseOffset=pi / 4)
data = randi(rng, [0 1], 300, 1)
modSignal = step(gmskmodulator, data)
rData = step(gmskdemodulator, modSignal)
 rData = 300×1 Matrix{Int64}:
 0
 0
 0
 0
 0
 0
 0
 0
 0
 ⋮
 1
 1
 1
 0
 0
 0
 0
 1
 0

# 算法

BandwidthTimeProduct 属性表示带宽乘以时间。利用这一特性,以增加符号间干扰为代价来降低带宽。PulseLength 属性测量高斯脉冲形状在符号间隔内的长度。以下方程定义了频率脉冲形状,其中, 表示脉冲的带宽, 表示符号持续时间, 表示互补累积分布函数。

对于此 System 对象,当调制指数为0.5时,输入符号 1 会导致 π/2 弧度的相移。

# 参考文献


[1] Anderson, John B., Tor Aulin, and Carl-Erik Sundberg. Digital Phase Modulation. New York: Plenum Press, 1986.

# 另请参阅

comm_GMSKModulator | comm_CPMDemodulator | comm_CPMModulator