主要内容

qamdemod

正交振幅解调

描述

例子

z= qamdemod (y)返回一个解调信号,z,给定正交调幅(QAM)信号y调制阶

例子

z= qamdemod (ysymOrder)返回一个解调信号,z,并指定解调的符号顺序。

例子

z= qamdemod (___名称,值)使用一个或多个名称-值对参数指定选项。例如,“OutputType”、“位”将输出信号的类型设置为位。

例子

全部折叠

解调一个8-QAM信号并绘制与符号0和3对应的点。

生成随机8元数据符号。

数据= randi([0 7],1000,1);

调节数据通过应用8-QAM。

txSig = qammod(数据,8);

将调制后的信号通过AWGN通道传递。

rxSig = awgn (txSig, 18岁,“测量”);

用的初始相位解调接收信号 π / 8。

rxData = qamdemod (rxSig。* exp(1我*π/ 8),8);

生成参考星座点。

if (ref (0, 1) = 0, 1), 0), colorffffff;

绘制接收信号点对应符号0和3,覆盖参考星座。显示与这些符号相对应的接收数据。

情节(rxSig (rxData = = 0),“g”。);持有情节(rxSig (rxData = = 3),“c”。);情节(refpts的r *)文本(真实(refpts) + 0.1,图像放大(refpts) num2str((0:7) '))包含(“同步”) ylabel (“交”)传说('对应于0的点''对应于3的点'...“参考星座”“位置”“西北”);

图中包含一个轴对象。axis对象包含11个类型为line, text的对象。这些对象分别代表0对应的点,3对应的点,参考星座。

利用16-QAM和WLAN符号映射对随机数据进行调制和解调。验证输入数据符号是否与解调符号匹配。

生成随机符号的三维数组。

x =兰迪([0,15),20岁,4,2);

创建基于WLAN标准的16-QAM星座的自定义符号映射。

wlanSymMap = [2 3 10 6 7 5 4 14 15 13 12 10 11 9 8];

调制数据,并设置星座具有单位平均信号功率。情节的星座。

wlanSymMap y = qammod (x, 16日,“UnitAveragePower”,真的,“PlotConstellation”,真正的);

图中包含一个轴对象。标题为16-QAM, Custom Mapping, UnitAveragePower=true的轴对象包含19个类型为line, text的对象。

解调接收信号。

wlanSymMap z = qamdemod (y, 16日,“UnitAveragePower”,真正的);

验证解调后的信号是否与原始数据一致。

isequal (x, z)
ans =逻辑1

解调定点QAM信号,验证数据恢复正确。

设置调制顺序为64,并确定每个符号的比特数。

M = 64;bitsPerSym = log2 (M);

生成随机位。当以位模式操作时,输入数据的长度必须是每个符号的位数的整数倍。

x = randi([0 1],10*bitsPerSym,1);

使用二进制符号映射调制输入数据。将调制器设置为输出定点数据。数字数据类型以16位字长和10位分数长进行签名。

y = qammod (x, M,“本”“InputType”“一点”“OutputDataType”...numerictype(10) 1, 16日);

解调64-QAM信号。验证解调数据是否与输入数据匹配。

z = qamdemod (y、M、“本”“OutputType”“一点”);s = isequal (x,双(z))
s =逻辑1

估计AWGN中硬判决和软判决维特比译码器的误码率性能。将性能与未编码的64-QAM链路进行比较。

设置仿真参数。

清晰;关闭所有rng默认的M = 64;%调制顺序k = log2 (M);每符号%位EbNoVec = (4:10) ';% Eb/No值(dB)numSymPerFrame = 1000;%每帧QAM符号的数量

初始化误码率结果向量。

berEstSoft = 0(大小(EbNoVec));berEstHard = 0(大小(EbNoVec));

设置一个速率的格架结构和追踪深度1/2、约束长度7卷积码。

Trellis = poly2trellis(7,[171 133]);台= 32;率= 1/2;

主处理循环执行以下步骤:

  • 生成二进制数据

  • 对数据进行卷积编码

  • 对数据符号应用QAM调制。指定发送信号的单位平均功率

  • 将调制后的信号通过AWGN通道传递

  • 用硬判决和近似LLR方法解调接收信号。指定接收信号的单位平均功率

  • 维特比解码信号使用硬和非量化的方法

  • 计算误码数

循环继续处理数据,直到遇到100个错误或 10 7 位传输。

n = 1:长度(EbNoVec)%将Eb/No转换为信噪比snrdB = EbNoVec(n) + 10*log10(k*rate);单位平均信号功率的噪声方差计算。noiseVar = 10 ^ (-snrdB / 10);重置错误和位计数器[numErrsSoft, numErrsHard numBits] =交易(0);numErrsSoft < 100 && numBits < 1e7%生成二进制数据并转换为符号dataIn = randi([0 1],numSymPerFrame*k,1);对数据进行卷积编码dataEnc = convenc (dataIn,格子);% QAM调制txSig = qammod (dataEnc, M,“InputType”“一点”“UnitAveragePower”,真正的);%通过AWGN通道rxSig = awgn (txSig snrdB,“测量”);使用硬判决(比特)和解调噪声信号%软决定(近似LLR)方法。rxDataHard = qamdemod (rxSig, M,“OutputType”“一点”“UnitAveragePower”,真正的);rxDataSoft = qamdemod (rxSig, M,“OutputType”“approxllr”...“UnitAveragePower”,真的,“NoiseVariance”, noiseVar);%维特比解码解调数据dataHard = vitdec (rxDataHard,格子、台“合同”“硬”);dataSoft = vitdec (rxDataSoft,格子、台“合同”“unquant”);%计算帧的误码数。调整为%解码延迟,等于回溯深度。numErrsInFrameHard = biterr (dataIn (1: end-tbl) dataHard(台+ 1:结束);numErrsInFrameSoft = biterr (dataIn (1: end-tbl) dataSoft(台+ 1:结束);%增加错误计数器和位计数器numErrsHard = numErrsHard + numErrsInFrameHard;numErrsSoft = numErrsSoft + numErrsInFrameSoft;numBits = numBits + numSymPerFrame*k;结束%估计两种方法的误码率berEstSoft (n) = numErrsSoft / numBits;berEstHard (n) = numErrsHard / numBits;结束

绘制估计的硬误码率和软误码率数据。绘制未编码64-QAM信道的理论性能。

semilogy (EbNoVec [berEstSoft berEstHard),“- *”)举行semilogy (EbNoVec berawgn (EbNoVec“qam”传说,M)) (“软”“硬”的未编码的“位置”“最佳”)网格包含(“Eb /不(dB)”) ylabel (的误比特率)

图中包含一个轴对象。轴对象包含3个类型为line的对象。这些对象代表软、硬、未编码。

正如预期的那样,软决策解码产生最好的结果。

使用qamdemod函数模拟oqpsk调制信号的软判决输出。

产生OQPSK调制信号。

sps = 4;MSG = randi([0 1],1000,1);oqpskMod = comm.OQPSKModulator (“SamplesPerSymbol”sps,“BitInput”,真正的);oqpskSig = oqpskMod(味精);

在生成的信号中添加噪声。

impairedSig = awgn (oqpskSig 15);

执行不痒的决定解调

创建QPSK等效信号,以校准同相和正交。

impairedQPSK = complex(real(impairedSig(1+sps/2:end-sps/2)), imag(impairedSig(sps+1:end)));

对接收到的OQPSK信号进行匹配滤波。

halfSinePulse =罪(0:π/ sps (sps) *π/ sps);matchedFilter = dsp。FIRDecimator (sps halfSinePulse,“DecimationOffset”、sps / 2);filteredQPSK = matchedFilter (impairedQPSK);

要对滤波后的OQPSK信号进行软解调,使用qamdemod函数。对齐符号映射qamdemod的符号映射comm.OQPSKModulator,然后解调信号。

oqpskModSymbolMapping = [1 3 0 2];解调= qamdemod (oqpskModSymbolMapping filteredQPSK, 4日,“OutputType”“llr”);

输入参数

全部折叠

产生QAM的输入信号,指定为标量、向量、矩阵或复值的三维数组。矩阵和三维阵列中的每一列都被认为是一个独立的通道。

数据类型:||fi
复数的支持:万博1manbetx是的

调制顺序,指定为2的幂标量整数。调制顺序指定了信号星座中的点的数量。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

符号顺序,指定为以下选项之一:

  • “灰色”——使用格雷码排序。

  • “本”-使用自然二进制编码排序。

  • 向量-使用自定义符号排序。向量必须是长度的.向量必须使用值范围为0到的唯一元素- 1。第一个元素对应星座的左上点,随后的元素按列从左到右排列。

数据类型:字符|

名称-值参数

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:z = qamdemod (y、M、symOrder OutputType,“位”)

单位平均功率标志,指定为逗号分隔对组成“UnitAveragePower”和数字或逻辑0)或1真正的).当这面旗帜1真正的),该函数将星座的平均功率调整为1瓦特参考1欧姆。当这面旗帜0),该函数缩放星座,使QAM星座点之间的距离最小为2。

输出类型,指定为逗号分隔对,由“OutputType”“整数”“一点”“llr”,或“approxllr”

数据类型:字符

噪声方差,指定为逗号分隔对,由“NoiseVariance”其中一个选择是:

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

  • 正值向量——向量长度必须等于输入信号的最后一个维的元素数。向量的每个元素指定了输入中所有元素在相应的最后一个维度上的噪声方差。

提示

因为对数似然算法使用有限精度算法计算指数,计算大或小的指数可以产生正或负无穷。近似的LLR算法不计算指数。有关详细信息,请参见不痒的决定解调

“OutputType”“llr”,任何解调计算输出返回的值可能是由于指定的噪声方差值小于信噪比(SNR)。

以避免返回的输出值,设置“OutputType”“approxllr”而不是“llr”

依赖关系

要启用此名称-值对参数,请设置“OutputType”“llr”“approxllr”

数据类型:

选择绘制星座,指定为逗号分隔的对组成“PlotConstellation”和数字或逻辑0)或1真正的)绘制QAM星座,设置“PlotConstellation”真正的

输出参数

全部折叠

解调后的输出信号,以标量、矢量、矩阵或三维阵列的形式返回。数据类型与输入信号的数据类型相同,y.此输出的值和维度取决于指定的值“OutputType”值,如下表所示。

“OutputType” 的返回值qamdemod 维的输出
“整数” 解调的整数值从0到(- 1) z有和输入相同的尺寸吗y
“一点” 解调的位 行数z日志2)乘以行数y.每个解调符号被映射到一组日志2)第一个位代表最高有效位(MSB),最后一个位代表最低有效位(LSB)。
“llr” 使用精确对数似然算法计算的每个比特的对数似然比值。有关详细信息,请参见确切的LLR算法
“approxllr” 每个比特的近似对数似然比值。数值计算使用近似对数似然算法。有关详细信息,请参见近似LLR算法

更多关于

全部折叠

格雷码

一个格雷码,也称为反射二进制码,是指相邻星座点的位模式仅相差一位的系统。

兼容性的考虑

全部展开

错误开始于R2018b

扩展功能

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

之前介绍过的R2006a