# apskmod
幅度相移键控 (APSK) 调制
函数库: TyCommunication
# 语法
y = apskmod(x, M, radius)
y = apskmod(x, M, radius, phaseoffset)
y = apskmod(___; Name = Value)
# 说明
y = apskmod(x, M, radius) 根据每个 PSK 环指定的星座点数 M 和每个 PSK 环的半径 radius,对输入数据 x 进行 APSK 调制。
注:apskmod 特别适用于多环 PSK 星座。对于单个环 PSK 星座,使用 pskmod。
y = apskmod(x, M, radius, phaseoffset) 为 APSK 调制信号的每个 PSK 环指定初始相位偏移。
y = apskmod(x, M, radius, phaseoffset; Name = Value) 使用前面任何语法的一个或多个名称-值参数对指定选项。例如,InputType = "bit" 指定所需的输入类型为 bit。
在所有其他输入参数之后指定名称-值参数对。
# 示例
应用 APSK 调制
在每个圆上使用不相等数量的星座点的 APSK 调制数据。
定义调制阶数和 PSK 环半径的向量。为星座点生成数据。
using TyCommunication
M = [4 ,8 ,20]
radii = [0.3, 0.7 ,1.2]
modOrder = sum(M)
x = collect(range(0, stop = modOrder - 1))
对数据进行 APSK 调制。
y = apskmod(x, M, radii)
使用散点图绘制结果的星座图。
scatterplot(y)

应用相位偏移的 APSK 调制
使用 APSK 调制一个随机数据序列,内圆相位偏移为零,外圆相位偏移为 pi/6。
定义调制阶数、PSK 环半径和 PSK 环相位偏移的向量。产生随机数据。
using TyCommunication
using TyMath
rng = MT19937ar(1234)
M = [8, 8]
modOrder = sum(M)
radii = [0.5, 1]
phOff = [0 ,pi / 6]
x1 = randi(rng, [0 modOrder - 1], 100, 1)
对数据进行 APSK 调制。
y = apskmod(x1, M, radii, phOff)
使用散点图绘制得到的星座,并观察星座圆之间的相位偏移。
scatterplot(y)

应用 APSK 调制修改符号顺序
为 Gray 编码和 custom 编码的符号映射绘制 APSK 星座图。
定义调制阶数和 PSK 环半径的向量。为星座点生成位数据。
using TyCommunication
M = [8, 8]
modOrder = sum(M)
radii = [0.5 ,1.5]
x = transpose(de2bi((0:15)', Int64(log2(sum(M)))))
使用二进制输入绘制星座图,以突出星座映射的 Gray 编码特性。
y = apskmod(x[:], M, radii, InputType = "bit", PlotConstellation = true)
创建一个 custom 编码的符号映射向量。这个自定义的映射恰好是另一个 Gray 编码的映射。
cmap = [0; 1; 9; 8; 12; 13; 5; 4; 2; 3; 11; 10; 14; 15; 7; 6]
应用 APSK 调制与 custom 编码的符号映射。使用二进制输入绘制星座图,以突出显示自定义映射定义了不同的 Gray 编码符号映射。
y = apskmod(x[:], M, radii, SymbolMapping = cmap, InputType = "bit", PlotConstellation = true)

对输入比特流应用 APSK 调制
使用 APSK 调制随机位序列。通过噪声通道传递信号并显示星座图。
定义调制阶数和 PSK 环半径的向量。生成随机二进制数据。
using TyCommunication
using TyMath
rng = MT19937ar(1234)
M = [8 ,12, 20, 24]
radii = [0.8, 1.2, 2, 2.5]
bitsPerSym = Int(log2(sum(M)))
x = randi(rng, [0 1], 2000 * bitsPerSym, 1)
对数据应用 APSK 调制。
y = apskmod(x, M, radii, InputType = "bit")
通过一个信噪比为 25 dB 的 AWGN 信道。
yrec = awgn(rng, y, 25, "measured")
将接收到的星座图绘制为散点图。
scatterplot(yrec)

# 输入参数
x - 输入信号标量 | 向量 | 矩阵
输入信号,指定为标量、向量或矩阵。x 的元素必须是 [0, (sum(M)-1)] 范围内的二进制值或整数。
注:要将输入信号作为二进制元素处理,请将 InputType 名称-数值参数对设置为 "bit"。对于二进制输入,行数必须是 log2(sum(M)) 的整数倍。列中的 log2(sum(M)) 位组映射到一个符号上,第一个位表示 MSB,最后一个位表示 LSB。
数据类型: Float | Int
M - 每个 PSK 环的星座点数列向量
每个 PSK 环的星座点数,指定为具有多个元素的向量。每个向量元素表示其相应的 PSK 环中星座点的数量。第一个元素对应最里面的圆,以此类推,直到最后一个元素对应最外面的圆。元素值必须是 4 的倍数,sum(M) 必须是 2 的幂。调制阶数是信号星座中点的总数,等于向量元素之和 sum(M)。
示例: [4 12 16] 指定了一个调制阶数为 sum(M) = 32 的三 PSK 环星座。
数据类型: Float
Radius - 每个 PSK 环的半径列向量
每个 PSK 环的半径,指定为与 M 长度相同的向量。第一个元素对应最里面的圆,以此类推,直到最后一个元素,对应最外面的圆。元素必须是正的,并按递增顺序排列。
示例: [0.5 1 2] 定义了三个星座 PSK 环的半径。内环的半径是 0.5,第二环的半径是 1.0,外环的半径是 2.0。
数据类型: Float
phaseoffset - 每个 PSK 环的相位偏移 [pi/M(1) pi/M(2) … pi/M(end)] (默认) | 标量 | 列向量
每个 PSK 环的相位偏移,以弧度为单位,指定为与 M 长度相同的标量或向量。第一个元素对应最里面的圆,以此类推,直到最后一个元素,对应最外面的圆。只有当 M 的所有元素都是相同的值时,相位偏移才可以是标量。
示例: [pi/4 pi/12 pi/16] 定义了三个星座 PSK 环相位偏移。内环的相位偏移为 pi/4,第二环的相位偏移为 pi/12,而外环的相位偏移为 pi/16。
数据类型: Float
# 名称-值参数
指定可选的参数对为 Name1 = Value1,...,NameN = ValueN。其中 Name 是参数名称,Value 是相应的值。名称-值参数必须出现在其他参数之后,但参数对的顺序并不影响。
例如: y = apskmod(x,M,radii,InputType = "bit",OutputDataType = "Float32")
SymbolMapping - 符号映射"gray" | "contourwise-gray" | 整型向量
符号映射,由 SymbolMapping 和以下之一组成:
"contourwise-gray" - 在每个 PSK 环的相位维度中沿等高线使用 Gray 映射;
"gray" - 在振幅和相位维度上沿轮廓使用G ray 映射。对于 Gray 符号映射,M 的所有值必须相等,相位偏移的所有值必须相等;
整型向量 - 使用自定义符号映射。向量必须由 sum(M) 个唯一元素组成,其值范围为 [0, (sum(M)-1]。第一个元素对应最里面圆的第一象限的星座点,随后的元素逆时针定位在 PSK 环周围。
默认的符号映射依赖于 M 和 phaseOffset。当 M 的所有元素都相等且 phaseOffset 的所有元素都相等时,默认为 "gray" 。对于所有其他情况,默认为 "contourwise-gray"。
数据类型: Float | String
InputType - 输入类型"integer" (默认) | "bit"
输入类型,由 InputType 和以下选项之一组成:
"integer" - 输入信号必须由 [0,(sum(M) - 1)] 范围内的整数组成;
"bit" - 输入信号必须包含二进制值,并且行数必须是 log2(sum(M)) 的整数倍。假设二进制输入信号是左 msb 对齐的并按列指定的。列中的 log2(sum(M)) 位组映射到一个符号上,第一个位表示 MSB,最后一个位表示 LSB。
数据类型: String
OutputDataType - 输出数据类型"Float64" (默认) | "Float32"
输出数据类型,由 OutputDataType 和 "Float64" 或 "Float32" 组成。
数据类型: String
PlotConstellation - 星座图绘制false (默认) | true
星座图绘制,由 PlotConstellation 和布尔值组成。当绘制参考星座时,将 PlotConstellation 设置为 "true"
数据类型: Bool
# 输出参数
y - APSK 调制信号标量 | 向量 | 矩阵
APSK 调制信号,作为复标量、向量或矩阵返回。y 的维度取决于指定的 InputType 值。
| 输入类型 | y 的维度 |
|---|---|
| "integer" | y 和输入 x 具有相同的维度。 |
| "bit" | y 的行数等于 x 的行数除以 log2(sum(M))。 |
# 算法
该函数实现了一个干净的 APSK 星座。
一个干净的 M-APSK 星座由 NC 同心环或轮廓组成,每个环或轮廓具有均匀间距的 PSK 点。M-APSK 星座集合为:
调制阶数等于所有的
相加。 ; 是同心环的个数。 ; 是第 环上的星座点数; 是第 环上的半径; 是第 环上的相位偏移量; 。
# 参考文献
[1] Corazza, Giovanni E. Digital Satellite Communications. New York: Springer Science Business Media, LLC, 2007.
[2] Liu, Z., Q. Xie, K. Peng, and Z. Yang. "APSK Constellation with Gray Mapping." IEEE Communications Letters. Vol. 15, Number 12, December 2011, pp. 1271–1273.