matlab中qammod函数的用法

几种形式的定义

Y=qammod(X,M)

Y=qammod(X,M)输出使用正交幅度调制消息信号X的复包络。M是字母表大小,必须是2的整数幂,表示调制阶数。消息信号X必须由0到M-1之间的整数组成。X可以是标量、矢量、矩阵或三维数组。

Y = qammod(X,M,SYMBOL_ORDER)

Y=qammod(X,M,SYMBOL_ORDER)指定函数如何将一个或一组log2(M)个输入比特映射到相应的符号。如果SYMBOL_ORDER设置为“gray”,则函数使用灰色编码顺序。如果SYMBOL_ORDER设置为“bin”,则函数使用自然二进制编码顺序。如果SYMBOL_ORDER是具有M个元素的整数值向量,则函数使用该向量指定的顺序。该向量必须具有[0,M-1]范围内的唯一元素。这个向量的第一个元素对应于星座的最左上角,随后的元素从左到右按列排列。最后一个元素对应于最右下角的点。默认值为“gray”。

Y = qammod(X,M,…,Name,Value)

Y=qammod(X,M,…,Name,Value)中还有下面描述的其他名称-值对参数:
InputType”“integer”或“bit”字符串之一。'integer’表示消息信号是介于0和M-1之间的整数值。'位’表示消息信号为二进制(0或1)。在这种情况下,行数(维度1)必须是log2(M)的整数倍。一组log2(M)位映射到一个符号上,第一个位表示MSB,最后一个位表示LSB。默认值为“integer”。
UnitAveragePower”逻辑标量值。如果为true,QAM星座将缩放为平均功率为1(即true表示采用归一化的星座图)。如果为false,则QAM星座点之间最小距离为2。默认值为false。
OutputDataType”在MATLAB仿真中将定点类型输出为有符号、无标度的numerictype对象,并在C代码或MEX生成期间将其输出为有符号、缩放的numerictype对象。如果未指定此参数,则如果输入数据类型为双精度或内置整数,则输出数据类型为双精度;如果输入数据类型为单精度,则输出数据类型为单精度。当输入为定点时,必须指定此参数。
PlotConstellation”是一个逻辑标量值。如果为true,则绘制QAM星座图。默认值为false。对输入X进行处理,并在输出Y中返回调制信号。

Y=qammod(X,M,INI_PHASE)

Y=qammod(X,M,INI_PHASE)指定相位偏移量。由于将来不接受INI_PHASE释放,改用Y = qammod(X,M)。

Y=qammod(X,M,INI_PHASE,SYMBOL_ORDER)

Y=qammod(X,M,INI_PHASE,SYMBOL_ORDER)在将来的版本中将不接受INI_PHASE。使用Y=qammod(X,M,SYMBOL_ORDER)代替。

Y=qammod(X,M,INI_PHASE,SYMBOL_ORDER)

Y=qammod(X,M,INI_PHASE,SYMBOL_ORDER)指定函数如何将二进制字分配给相应的整数。如果SYMBOL_ORDER设置为“gray”,则函数使用灰色编码顺序。如果SYMBOL_ORDER设置为“bin”,则函数使用自然二进制编码顺序。

示例

例一

%32-QAM调制。默认值:整数输入,灰色编码,星座点间最小距离为2
x=(0:31)’;
y=qammod(x,32);

例二

%16-QAM调制,具有LTE特定符号映射和星座,缩放到1的平均功率。
默认值:整数输入
x = randi([0,15],20,4,2);%生成维度为2042的15以内的随机整数
lteSymMap = [11 10 14 15 9 8 12 13 1 0 4 5 3 6 7 2];
y = qammod(x,16,lteSymMap,‘UnitAveragePower’,true);%平均功率归一化

例三

%64-QAM调制,具有二进制映射、位输入和有符号定点输出数据类型,16位字长和10位小数长度。默认值:两个星座点之间的最小距离为2
x = randi([0,1],10*log2(64),3);
y = qammod(x,64,‘InputType’,‘bit’,‘OutputDataType’,numerictype(1,16,10));%内部运算:先将输入的bit形式数据按列取6个数转换成10进制数,然后进行64QAM

例四

%可视化16-QAM调制的星座,使用灰度映射、位输入和星座功率归一化。
x = randi([0,1],log2(16),1);
y = qammod(x,16,‘InputType’,‘bit’,‘UnitAveragePower’,true,‘PlotConstellation’,true);

如果不使用 `qammod` 函数实现 8QAM 调制,可以按照以下步骤进行: 1. 将原始数据转化为 8QAM 调制符号。 根据 8QAM 调制的定义,需要将每个原始数据映射到一个复平面上的点,然后对这些点进行调制。具体方法为:将原始数据分别转化为 3 位二进制数,然后将这些二进制数分别映射到复平面上的一个点,如下表所示: | 二进制数 | 映射点 | | :---: | :---: | | 000 | -3-3i | | 001 | -3-i | | 010 | -3+3i | | 011 | -3+i | | 100 | -1-3i | | 101 | -1-i | | 110 | -1+3i | | 111 | -1+i | 将原始数据转化为 8QAM 调制符号的代码如下: ```matlab % 将原始数据转换为 3 位二进制数 bits = dec2bin(data, 3) - '0'; % 将二进制数映射到复平面上的点 map = [-3-3i, -3-i, -3+3i, -3+i, -1-3i, -1-i, -1+3i, -1+i]; symbols = map(bi2de(bits)+1); ``` 首先,使用 `dec2bin` 函数将原始数据转换为 3 位二进制数,并将结果减去字符 '0' 的 ASCII 码,得到 0 或 1 的矩阵。 接着,根据上表将二进制数映射到复平面上的点,形成映射表 `map`,然后使用 `bi2de` 函数将 3 位二进制数转换为十进制数,并将结果加 1,得到 0-7 的整数,作为映射表的下标,从而得到对应的 8QAM 调制符号。 2. 对调制符号进行 I/Q 分量调制。 对于 8QAM 调制,需要分别对每个符号的实部和虚部进行调制。可以使用正弦和余弦函数生成基带信号,然后将基带信号与调制符号相乘,得到调制信号。 具体实现代码如下: ```matlab % 生成基带信号 t = linspace(0, 1, numBits); % 时间序列 fc = 10; % 载波频率 I = cos(2*pi*fc*t); % I 分量 Q = sin(2*pi*fc*t); % Q 分量 % 进行调制 txSig = zeros(numBits, 1); % 调制信号 for i = 1:numBits txSig(i) = real(symbols(i))*I(i) - imag(symbols(i))*Q(i); end ``` 首先,生成时间序列 `t`,然后指定载波频率 `fc`,生成 I/Q 分量的正弦和余弦信号。 接着,使用 `for` 循环对每个符号的实部和虚部进行调制,具体计算方式为:实部乘以 I 分量,虚部乘以 Q 分量,然后相减,得到调制信号。 需要注意的是,在进行调制前,需要对原始数据进行正交编码,以避免 I/Q 分量之间的干扰。正交编码可以使用 Walsh-Hadamard 码或其他码,具体方法根据需要进行确定。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值