# comm_GeneralQAMTCMDemodulator
网格编码矩形任意 QAM 信号的解调与解码
函数库: TyCommunication
# 描述
GeneralQAMTCMDemodulator 对象使用 Viterbi 算法对通过具有任意正交幅度调制(QAM)信号星座的网格编码调制(TCM)技术调制的信号进行解码。 要对网格编码,任意正交幅度调制的信号进行解调和解码:
定义并设置任意 QAM TCM 解调器对象;
根据 comm_GeneralQAMTCMDemodulator 的属性调用 step 对信号进行解调和解码。
# 构造
# 语法
H = comm_GeneralQAMTCMDemodulator()
H = comm_GeneralQAMTCMDemodulator(; Name = Value)
# 说明
H = comm_GeneralQAMTCMDemodulator() 创建任意 QAM TCM 解调器 系统对象 H,该对象对网格编码任意 QAM 调制信号进行解调和解码。
H = comm_GeneralQAMTCMDemodulator(; Name = Value) 创建任意 QAM TCM 解调器对象 H,其中每个指定的属性都设置为指定的值。可以按任意顺序指定其他名称值对参数,例如:(Name1 = Value1, ... , NameN = ValueN)。
# 属性
TrellisStructure - 卷积码的网格结构trellis
将网格指定为包含卷积码网格描述的 Syslab trellis 结构,并使用 istrellis 函数检查网格结构是否有效,默认值是 poly2trellis([1 3], [1 0 0; 0 5 2]) 的结果。
TerminationMethod - 编码帧的终止方法字符串
将终止方法指定为 "Continuous"、"Truncated" 或 "Terminated",默认值为 "Continuous"。
当将此属性设置为 "Continuous" 时,该对象在每帧的末尾保存内部状态度量。下一帧使用相同的状态度量。该对象独立处理每个回溯路径。如果输入信号仅包含一个符号,使用 "Continues" 模式。
当将此属性设置为 "Truncated" 时,该对象独立地处理每个输入向量。回溯路径从具有最佳度量的状态开始,始终以全零状态结束。
当将此属性设置为 "Terminated" 时,对象独立地处理每个输入向量。回溯路径以全零状态开始和结束。
TracebackDepth - Viterbi 解码器的回溯深度正整数
将回溯深度指定为正整数,默认值为 21。
回溯深度影响解码的准确率和延迟。解码延迟是输出中第一个解码符号之前的 0 符号的数量。
当将 TerminationMethod 属性设置为 "Continue" 时,解码延迟由 TracebackDepth 个 0 符号组成。对于码率为 K/N 的卷积码,解码延迟由 (TracebackDepth×K) 个 0 比特组成。
当将 TerminationMethod 属性设置为 "Truncated" 或 "Terminated" 时,输出没有延迟且回溯深度必须小于或等于每一个输入向量的符号数量。
ResetInputPort - 启用解调器复位输入布尔值
将该属性设置为 true,以启用 step 方法的其他输入,默认值为 false。将 step 方法的重置输入设置为非零值时,对象会将编码器重置为全零状态。
当将 TerminationMethod 属性设置为 "Continuous" 时,此属性适用。
Constellation - 信号星座布尔值
指定为复向量。该矢量列出了用于映射卷积编码器的结果的信号星座中的点。必须按照集合划分的顺序指定星座。星座矢量的长度必须等于一般 QAM TCM 调制器对象的卷积编码器的可能输入符号的数量,该值在使用码率为 K/N 的卷积码时等于
OutputDataType - 输出的数据类型字符串
指定为 "double" 或 "logical",默认值为 "double"。
# 方法
| 方法 | 说明 |
|---|---|
| step | 使用任意 QAM TCM 解调器对网格编码通用 QAM 调制信号进行解调和解码 |
| 对系统对象通用的操作 | |
| release | 允许更改系统对象的属性值 |
| reset | 重置系统对象的内部状态 |
# 用法
y = step(H, x)
y = step(H, x, R)
# 示例
使用任意 QAM TCM 调制并解调数据
使用具有任意四点星座的 QAM TCM 调制来调制和解调噪声数据。计算 BER。
使用 [171 133] 生成具有两个输入符号和四个输出符号的网格结构。定义任意四点星座。
using TyCommunication
using TyMath
using Printf
rng = MT19937ar(1234)
qamTrellis = poly2trellis(7, [171 133])
refConst = exp.(pi * 1im .* [1 2 3 6] ./ 4)
使用 qamTrellis 和 refConst 创建一个 QAM TCM 调制器和解调器对象。
qamtcmod = comm_GeneralQAMTCMModulator(;
TrellisStructure=qamTrellis, Constellation=refConst
)
qamtcdemod = comm_GeneralQAMTCMDemodulator(;
TrellisStructure=qamTrellis, Constellation=refConst
)
创建一个误码率计算器,其延迟(以 bit 为单位)等于 TracebackDepth 乘以每个符号的位数。
errorrate = comm_ErrorRate(;
ReceiveDelay=Int(qamtcdemod.TracebackDepth * log2(qamTrellis.numInputSymbols))
)
生成二进制数据并使用 QAM TCM 调制。将信号经过 AWGN 信道并解调信号。计算并统计误差。
errorStats = []
for counter in 1:10
# Generate binary data
data = randi(rng, [0 1], 500, 1)
# Modulate
modSignal = step(qamtcmod, data)
# Pass through an AWGN channel
noisySignal = awgn(rng, modSignal, 4)
# Demodulate
receivedData = step(qamtcdemod, noisySignal)
# Calculate the error statistics
global errorStats = step(errorrate, data, receivedData)
end
显示误码率与错误的比特数。
s1 = @sprintf("Error rate = %5.2e", errorStats[1])
s2 = @sprintf("Number of errors = %d", errorStats[2])
println("$s1\n$s2")
Error rate = 1.51e-02
Number of errors = 75
# 另请参阅
comm_RectangularQAMTCMDemodulator | comm_GeneralQAMTCMModulator