主要内容

pskdemod

使用 M 进制 PSK 方法进行解调

说明

Z = pskdemod(Y,M) 对输入 M-PSK 信号 Y 进行解调。M 指定调制阶数。

示例

Z = pskdemod(Y,M,phaseoffset) 指定 M-PSK 星座图的相位偏移。

示例

Z = pskdemod(Y,M,phaseoffset,symorder) 指定 M-PSK 星座图的符号顺序。

Z = pskdemod(___,Name=Value) 使用任一上述语法指定可选名称-值参量。例如,pskdemod(Y,M,PlotConstellation=true) 使用调制阶数 M 进行解调并绘制星座图。请在所有其他输入参量后指定名称-值参量。

示例

全部折叠

比较 PSK 和 PAM 调制方案,以证明 PSK 对相位噪声更敏感。PSK 对相位噪声更敏感,因为 PSK 星座图为圆形,而 PAM 星座图为线性。

指定符号数和调制阶数参数。生成随机数据符号。

len = 10000;                
M = 16;                     
msg = randi([0 M-1],len,1);

创建一个相位噪声 System object™ 并显示配置的设置。

phasenoise = comm.PhaseNoise(Level=[-70 -80])
phasenoise = 
  comm.PhaseNoise with properties:

              Level: [-70 -80]
    FrequencyOffset: [2000 20000]
         SampleRate: 1000000
       RandomStream: 'Global stream'

使用 PSK 和 PAM 调制 msg 以比较这两种方法。

txpsk = pskmod(msg,M);
txpam = pammod(msg,M);

对调制信号的相位进行扰动。

rxpsk = phasenoise(txpsk);
rxpam = phasenoise(txpam);

创建接收信号的散点图。

scatterplot(rxpsk);
title('Noisy PSK Scatter Plot')

Figure Scatter Plot contains an axes object. The axes object with title Noisy PSK Scatter Plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

scatterplot(rxpam);
title('Noisy PAM Scatter Plot')

Figure Scatter Plot contains an axes object. The axes object with title Noisy PAM Scatter Plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

解调接收到的信号。

recovpsk = pskdemod(rxpsk,M);
recovpam = pamdemod(rxpam,M);

计算每种调制方案的符号错误数。PSK 信号中出现的符号错误数大得多。

numerrs_psk = symerr(msg,recovpsk);
numerrs_pam = symerr(msg,recovpam);
[numerrs_psk numerrs_pam]
ans = 1×2

   795     3

生成随机符号。

dataIn = randi([0 3],1000,1);

QPSK 调制数据。

txSig = pskmod(dataIn,4,pi/4);

使信号通过 AWGN 信道。

rxSig = awgn(txSig,10);

解调接收到的信号并计算符号错误数。

dataOut = pskdemod(rxSig,4,pi/4);
numErrs = symerr(dataIn,dataOut)
numErrs = 
3

设置调制阶数,然后创建一个包含完整星座图点集的数据序列。

M = 8;
data = (0:M-1);
phaseoffset = 0;

可视化 8-PSK 的符号映射星座图,分别表示格雷编码与二进制编码数据在调制与解调后的结果。

symgray = pskmod(data,M,phaseoffset,'gray',PlotConstellation=true, ...
          InputType='integer');

Figure contains an axes object. The axes object with title 8-PSK, Gray Mapping, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 11 objects of type line, text. One or more of the lines displays its values using only markers

mapgray = pskdemod(symgray,M,phaseoffset,'gray',OutputType='integer');
symbin = pskmod(data,M,phaseoffset,'bin');
mapbin = pskdemod(symbin,M,phaseoffset,'bin',PlotConstellation=true, ...
         OutputType='bit');

Figure contains an axes object. The axes object with title 8-PSK, Binary Mapping, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 11 objects of type line, text. One or more of the lines displays its values using only markers

输入参数

全部折叠

M-PSK 调制的输入信号,指定为标量、向量或矩阵。当 Y 是矩阵时,函数独立处理各列。

数据类型: double | single
复数支持:

调制阶数,指定为大于 1 的整数值。

数据类型: double

以弧度指定的 PSK 星座图的相位偏移,指定为标量。

数据类型: double

符号顺序,指定为 'gray''bin' 或向量。此参量指定函数如何将二进制向量赋给对应的整数。

  • 'gray' - 使用格雷编码顺序。

  • 'bin' - 使用二进制编码顺序。

  • 向量 - 使用自定义符号顺序。向量长度为 M,包含范围 [0, M – 1] 内的唯一值。第一个元素与对应于角度 phaseoffset 的星座图点相关,后续元素按逆时针方向排列。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: Z = pskdemod(Y,M,phaseoffset,symorder,OutputType='bit')

输出类型,指定为 'integer''bit''llr''approxllr'

输出的数据类型,指定为下表中列出的数据类型之一。OutputDataType 的可接受值取决于 OutputType 值。

OutputType可接受的 OutputDataType
'integer''double''single''int8''int16''int32''uint8''uint16''uint32'
'bit''double''single''int8''int16''int32''uint8''uint16''uint32''logical'

默认值为输入 Y 的数据类型。

依赖关系

要启用此参量,请将 OutputType 设置为 'integer''bit'

噪声方差,指定为以下选项之一:

  • 正标量 - 函数对所有输入元素使用相同的噪声方差值。

  • 正值向量 - 对于输入沿对应的最后一个维度的所有元素,函数使用由向量的每个元素指定的噪声方差。向量长度必须等于输入信号的列数。

解调函数需要复输入信号。在 BPSK 情况下,调制器输出虚部值为零的复信号。如果您向解调器输入实信号,则必须通过将方差值设置为实数值输入信号方差的两倍来表示复信号在实数值输入信号中的噪声功率。

提示

精确 LLR 算法使用有限精度算术计算指数。对于涉及非常大的正或负幅值的计算,精确 LLR 算法生成值的情况如下:

  • 如果噪声方差是非常大的值,则为 Inf-Inf

  • 如果噪声方差和信号功率的值都非常小,则为 NaN

近似 LLR 算法不计算指数。您可以通过使用近似 LLR 算法来避免 Inf-InfNaN 结果。

依赖关系

当您将 OutputType 设置为 'llr''approxllr' 时,此参量适用。

数据类型: double

绘制星座图的选项,指定为逻辑值 0 (false) 或 1 (true)。要绘制星座图,请将 PlotConstellation 设置为 true

数据类型: logical

输出参量

全部折叠

M-PSK 解调的输出信号,以标量、向量或矩阵形式返回。此输出的值和维度根据指定的 OutputType 值而变化,如下表所示。

OutputTypepskdemod 输出值输出的维度
'integer'范围 [0, M – 1] 内的解调整数值Z 的维度与输入 Y 相同。
'bit'解调位Z 的行数是 log2(M)×Y 的行数。函数将每个解调符号映射到一组 log2(M) 位,其中第一个位表示 MSB,最后一个位表示 LSB。
'llr'使用精确对数似然算法计算的每个位的对数似然比值。有关详细信息,请参阅Exact LLR Algorithm
'approxllr'每个位的近似对数似然比值。使用近似对数似然算法计算的每个位的近似对数似然比值。有关详细信息,请参阅Approximate LLR Algorithm

参考

[1] Proakis, John G. Digital Communications. 4th ed. New York: McGraw Hill, 2001.

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

全部展开