主要内容

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(data,8);

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

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

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

rxData = qamdemod(rxSig.*exp(-1i*pi/8),8);

生成参考星座点。

Refpts = qammod((0:7)',8) .* exp(1i*pi/8);

绘制与符号0和3对应的接收信号点,并叠加参考星座。显示接收到的与这些符号对应的数据。

情节(rxSig (rxData = = 0),“g”。);持有情节(rxSig (rxData = = 3),“c”。);情节(refpts的r *) text(real(refpts)+0.1,imag(refpts),num2str((0:7)') xlabel(“同步”) ylabel (“交”)传说(“0对应的点”“3对应的点”...“参考星座”“位置”“西北”);

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

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

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

X = randi([0,15],20,4,2);

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

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

对数据进行调制,使星座具有单位平均信号功率。绘制星座图。

y = qammod(x,16,wlanSymMap,...UnitAveragePower = true,...PlotConstellation = true);

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

解调接收信号。

z = qamdemod(y,16,wlanSymMap,...UnitAveragePower = true);

验证解调信号是否等于原始数据。

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,double(z))
s =逻辑1

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

设置仿真参数。

rng默认的M = 64;调制阶数k = log2(M);每个符号的比特数%EbNoVec = (4:10)';% Eb/No值(dB)numSymPerFrame = 1000;每帧QAM符号的百分比

初始化BER结果向量。

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

设置一个速率的格子结构和回溯深度1/2,约束长度7,卷积码。

格子= poly2trellis(7,[171 133]);TBL = 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] = deal(0);numErrsSoft < 100 && numBits < 1e7生成二进制数据并转换为符号dataIn = randi([0 1],numSymPerFrame*k,1);%卷积编码数据dataEnc = convc (dataIn,格子);% QAM调制txSig = qammod(dataEnc,M,...InputType =“一点”...UnitAveragePower = true);%通过AWGN通道rxSig = awgn(txSig,snrdB,“测量”);使用硬判定(位)和对噪声信号进行解调%软决策(近似LLR)接近。rxDataHard = qamdemod(rxSig,M,...OutputType =“一点”...UnitAveragePower = true);rxDataSoft = qamdemod(rxSig,M,...OutputType =“approxllr”...UnitAveragePower = true,...NoiseVariance = noiseVar);维特比解码解调数据dataHard = vitdec(rxDataHard,trellis,tbl,“合同”“硬”);dataSoft = vitdec(rxDataSoft,trellis,tbl,“合同”“unquant”);计算帧中的误码数。%调整解码延迟,它等于%回溯深度。numErrsInFrameHard =...biterr (dataIn (1: end-tbl), dataHard(台+ 1:结束);numErrsInFrameSoft =...biterr (dataIn (1: end-tbl), dataSoft(台+ 1:结束);增加错误计数器和比特计数器numErrsHard = numbershard + 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)) (“软”“硬”的未编码的“位置”“最佳”grid xlabel(“Eb /不(dB)”) ylabel (“误码率”

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

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

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

生成OQPSK调制信号。

SPS = 4;MSG = randi([0 1],1000,1);oqpskMod = com . oqpskmodulator (“SamplesPerSymbol”sps,“BitInput”,真正的);oqpskSig = oqpskMod(msg);

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

impairedSig = awgn(oqpskSig,15);

执行软决策解调

创建QPSK等效信号对准相位和正交。

受损的qpsk =复杂(...真正的(impairedSig (1 + sps / 2: end-sps / 2)),...图像放大(impairedSig (sps + 1:结束)));

对接收到的OQPSK信号应用匹配滤波。

halfsinpulse = sin(0:pi/sps:(sps)*pi/sps);matchedFilter = dsp。FIRDecimator (sps halfSinePulse,...“DecimationOffset”、sps / 2);filteredQPSK =匹配过滤器(受损的qpsk);

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

oqpskModSymbolMapping = [1 3 0 2];demodulated = qamdemod(filteredQPSK,4,oqpskModSymbolMapping,...“OutputType”“llr”);

输入参数

全部折叠

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

数据类型:||fi
复数支持:是的

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

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

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

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

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

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

数据类型:字符|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:z = qamdemod(y,M,symOrder,'OutputType','bit')

单位平均功率标志,指定为由逗号分隔的对组成“UnitAveragePower”数字或逻辑0)或1真正的).当这个标志是1真正的),该功能将星座的平均功率按1欧姆的标准缩放为1瓦特。当这个标志是0),该函数缩放星座,使QAM星座点之间的最小距离为两个。

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

数据类型:字符

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

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

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

提示

由于对数似然算法使用有限精度算法计算指数,计算具有大或小数字的指数可以产生正无穷大或负无穷大。近似的LLR算法不计算指数。详情请参见硬决策解调与软决策解调

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

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

依赖关系

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

数据类型:

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

输出参数

全部折叠

解调输出信号,返回为标量、矢量、矩阵或3-D数组。数据类型与输入信号的数据类型相同,y.此输出的值和维度取决于指定的值“OutputType”值,如本表所示。

“OutputType” 返回值qamdemod 输出规模
“整数” 解调的整数值从0到(- 1) z与输入有相同的维度y
“一点” 解调的位 行数z日志2乘以进去的行数y.每个解调的符号被映射到一组日志2位,其中第一位表示最高有效位(MSB),最后一位表示最低有效位(LSB)。
“llr” 使用精确对数似然算法计算每个比特的对数似然比值。详情请参见精确LLR算法
“approxllr” 每个比特的近似对数似然比值。这些值是使用近似对数似然算法计算的。详情请参见近似LLR算法

更多关于

全部折叠

格雷码

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

扩展功能

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

版本历史

R2006a之前介绍

全部展开

Baidu
map