qamdemod
正交振幅解调
描述
例子
解调8-QAM信号
解调一个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对应的点”,...“参考星座”,“位置”,“西北”);
QAM解调与WLAN符号映射
利用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);
解调接收信号。
z = qamdemod(y,16,wlanSymMap,...UnitAveragePower = true);
验证解调信号是否等于原始数据。
isequal (x, z)
ans =逻辑1
解调QAM定点信号
解调一个定点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个错误或
比特被传输。
为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 (“误码率”)
正如预期的那样,软决策解码产生了最好的结果。
软决策OQPSK调制解调
使用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”);
输入参数
y
- - - - - -输入信号
标量|向量|矩阵|三维数组
产生QAM的输入信号,指定为标量、矢量、矩阵或复杂值的3-D数组。矩阵和三维阵列中的每一列都被视为一个独立的通道。
数据类型:单
|双
|fi
复数支持:是的
米
- - - - - -调制顺序
标量整数
调制顺序,指定为2的幂标量整数。调制顺序指定信号星座中的点数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:z = qamdemod(y,M,symOrder,'OutputType','bit')
UnitAveragePower
- - - - - -单位平均功率标志
假
或0
(默认)|真正的
或1
单位平均功率标志,指定为由逗号分隔的对组成“UnitAveragePower”
数字或逻辑0
(假
)或1
(真正的
).当这个标志是1
(真正的
),该功能将星座的平均功率按1欧姆的标准缩放为1瓦特。当这个标志是0
(假
),该函数缩放星座,使QAM星座点之间的最小距离为两个。
OutputType
- - - - - -输出类型
“整数”
(默认)|“一点”
|“llr”
|“approxllr”
输出类型,指定为逗号分隔的对,由“OutputType”
而且“整数”
,“一点”
,“llr”
,或“approxllr”
.
数据类型:字符
NoiseVariance
- - - - - -噪声方差
1
(默认)|积极的标量|正值向量
噪声方差,指定为由逗号分隔的对组成“NoiseVariance”
其中一个选项是:
正标量——所有输入元素使用相同的噪声方差值。
正值向量——向量长度必须等于输入信号最后一个维度的元素数。向量的每个元素都指定了输入中所有元素在相应的最后一个维度上的噪声方差。
提示
由于对数似然算法使用有限精度算法计算指数,计算具有大或小数字的指数可以产生正无穷大或负无穷大。近似的LLR算法不计算指数。详情请参见硬决策解调与软决策解调.
当“OutputType”
是“llr”
,任何正
或负
解调计算输出返回的值可能是由于指定的噪声方差值小于信噪比(SNR)。
避免返回的输出值正
或负
,设置“OutputType”
来“approxllr”
而不是“llr”
.
依赖关系
若要启用此名称-值对参数,请设置“OutputType”
是“llr”
或“approxllr”
.
数据类型:双
PlotConstellation
- - - - - -绘制星座的选项
假
或0
(默认)|真正的
或1
选项来绘制星座,指定为由逗号分隔的对组成“PlotConstellation”
数字或逻辑0
(假
)或1
(真正的
)绘制QAM星座,设置“PlotConstellation”
来真正的
.
输出参数
z
-输出信号解调
标量|向量|矩阵|三维数组
解调输出信号,返回为标量、矢量、矩阵或3-D数组。数据类型与输入信号的数据类型相同,y
.此输出的值和维度取决于指定的值“OutputType”
值,如本表所示。
更多关于
格雷码
一个格雷码,也称为反射二进制码,是相邻星座点的位模式仅相差一位的系统。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
版本历史
R2006a之前介绍R2018b:移除初始相位输入
从R2018b开始,您不能再使用QAM星座的初始相位偏移qamdemod
函数。
相反,使用genqamdemod
函数来抵消被解调的QAM信号的初始相位。或者,您可以将调制输入乘以qamdemod
由所需的初始阶段,如本代码所示
z = qamdemod(y.*exp(-1i*initPhase,M))
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。