# comm_GMSKDemodulator
使用 Viterbi 算法对 GMSK 调制信号进行解调
函数库: TyCommunication
# 描述
comm_GMSKDemodulator 系统对象使用 Viterbi 算法解调使用高斯最小频移键控 (GMSK) 方法调制的信号,输入是调制信号的基带表示。
要使用 Viterbi 算法对 GMSK 调制信号进行解调:
创建 COMM_GMSKDemodulator 对象并设置其属性;
用 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 时,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 调制的基带信号
向量
# 输出参数
Y - 已解调的信号
向量
# 对象函数
要使用对象函数,请将系统对象指定为第一个输入参数。例如,要释放名为 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