comm.OFDMModulator
使用OFDM调制方法
描述
的comm.OFDMModulator
系统对象™调节频域信号通过使用正交频分复用(OFDM)的方法。有关更多信息,请参见正交频分复用。的输出是一个基带表示OFDM-modulated信号。
使用OFDM调制信号:
创建
comm.OFDMModulator
对象并设置其属性。调用对象的参数,就好像它是一个函数。
了解更多关于系统对象是如何工作的,看到的系统对象是什么?
创建
语法
描述
创建一个OFDM调制器系统对象。ofdmMod
= comm.OFDMModulator
指定属性使用一个或多个名称参数。例如,ofdmMod
= comm.OFDMModulator (的名字
=价值
)comm.OFDMModulator (NumSymbols = 8)
指定了八个OFDM符号的时频网格。
设置OFDM调制器基于指定的对象属性ofdmMod
= comm.OFDMModulator (ofdmDemod
)comm.OFDMDemodulator
对象。
属性
属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放
函数打开它们。
如果一个属性可调在任何时候,你可以改变它的值。
改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象。
FFTLength
- - - - - -FFT点数
64年
(默认)|正整数
FFT点数,指定为一个积极的整数标量。FFT的长度必须大于或等于8,相当于副载波的数量。
NumGuardBandCarriers
- - - - - -数量的副载波分配给左、右后卫
[6;5]
(默认)|2×1整数向量
数量的副载波分配给左、右后卫乐队,指定为一个2×1整数向量。左派和右派的数量保护带副载波,FFTLength
。有关更多信息,请参见副载波分配、保护频带和保护间隔。
InsertDCNull
- - - - - -选择插入零直流副载波
假
或0
(默认)|真正的
或1
选择插入一个零直流副载波,指定为一个数字或逻辑0
(假
)或1
(真正的
)。当插入时,零直流副载波的中心频带,索引值:
(
N FFT/ 2)+ 1时N FFT是偶数。(
N FFT+ 1)/ 2N FFT是奇数。
NFFT副载波的总数在指定的OFDM信号FFTLength
。
PilotInputPort
- - - - - -选择输入飞行员副载波
假
或0
(默认)|真正的
或1
选择输入飞行员副载波,指定为一个数字或逻辑0
(假
)或1
(真正的
)。当你将此属性设置为:
假
输入数据,X
,可能包括嵌入式飞行员信息但对象并不分配飞行员副载波指数。真正的
——指定的对象分配副载波PilotCarrierIndices
调制信号的领航员飞行员
输入参数。
PilotCarrierIndices
- - - - - -指数的飞行员副载波的位置
[12;26日;40;54)
(默认)|列向量|矩阵|三维数组
指数的飞行员副载波位置,指定为一个列向量,矩阵,或与integer-element 3 d数组值的范围
在哪里FFTLength
,NumGuardBandCarriers
。
你可以分配
当飞行员指标是相同的每一个符号和传输天线,属性维度N飞行员1。
当飞行员指数不同符号,属性维度N飞行员——- - - - - -
N 信谊。如果
飞行员
输入只有一个符号,但对象配置分配多个发射天线,属性维度N飞行员-by-1-by -N T。如果指数不同符号和发射天线的数量,属性维度N飞行员——- - - - - -
N 信谊——- - - - - -N T。
提示
最小化跨多个发射天线之间的干扰传输,每个符号的试验指标必须相互不同的天线。
依赖关系
适用于当您设置这个属性PilotInputPort
来1
。
CyclicPrefixLength
- - - - - -循环前缀的长度
16
(默认)|正整数|行向量
每个OFDM符号的循环前缀的长度,指定为一个积极的,整数标量或行向量包含NumSymbols
元素。当你循环前缀长度指定为:
标量的循环前缀长度是相同的所有符号通过天线。
行向量——循环前缀的长度可能不同符号但不不同天线。
窗口
- - - - - -选择应用提出了OFDM符号之间的余弦窗口
假
或0
(默认)|真正的
或1
选择应用提出了OFDM符号之间的余弦窗口,指定为一个数字或逻辑0
(假
)或1
(真正的
)。
降低带外频谱再生造成的副载波的力量,应用窗口。有关更多信息,请参见OFDM提出了余弦窗口。
WindowLength
- - - - - -提出了余弦窗口的长度
1
(默认)|正整数
的长度提出了余弦窗口中,指定为积极、整数标量。这个值必须小于或等于指定的最小循环前缀长度CyclicPrefixLength
。例如,在配置四个符号与循环前缀长度12日,14日,16日和18日,窗口的长度必须小于等于12。
依赖关系
要启用这个特性,设置窗口
财产真正的
。
OversamplingFactor
- - - - - -过采样因子
1
(默认)|积极的标量
过采样因素,指定为一个积极的标量。过采样因子必须满足这些约束条件:
(
OversamplingFactor
×FFTLength
)必须是一个整数值。(
OversamplingFactor
×CyclicPrefixLength
)必须是一个整数值。如果你设置
窗口
来真正的
,(OversamplingFactor
×WindowLength
)必须是一个整数值。
提示
如果你将过采样因子设置为一个无理数,指定部分的价值。例如,FFT长度12
和过采样因子4/3
他们的产品是整数16
。然而,舍入4/3
来1.333
当设置过采样因素导致noninteger产品15.9960
,从而导致一个代码错误。
NumSymbols
- - - - - -数量的OFDM符号
1
(默认)|正整数
OFDM符号的时频网格数量,指定为一个积极的,整数标量。
NumTransmitAntennnas
- - - - - -发射天线数
1
(默认)|正整数
数量的传输天线OFDM调制信号传输使用,指定为一个积极的,整数标量小于或等于64年
。
使用
描述
分配控制信号,Y
= ofdmMod (数据
,飞行员
)飞行员
到指定的副载波频率PilotCarrierIndices
。要启用这种语法,设置PilotInputPort
财产真正的
。
输入参数
X
- - - - - -输入的基带信号
三维数组
输入基带信号,指定为一个N数据——- - - - - -
N数据是副载波数量的数据。有关更多信息,请参见
信息
对象的功能。N信谊符号的数量,是指定的吗
NumSymbols
。NT发射天线的数量,是指定的吗
NumTransmitAntennnas
。
有关更多信息,请参见副载波分配、保护频带和保护间隔。
数据类型:双
复数的支持:金宝app是的
飞行员
- - - - - -控制信号
三维数组
控制信号,指定为一个
N飞行员是飞行员副载波的数量在每个符号,是指定的吗
大小(
。PilotCarrierIndices
,1)N信谊OFDM符号的数量,是指定的吗
NumSymbols
。NT发射天线的数量,是指定的吗
NumTransmitAntennnas
。
有关更多信息,请参见副载波分配、保护频带和保护间隔。
数据类型:双
复数的支持:金宝app是的
输出参数
Y
——OFDM-modulated基带信号
矩阵
OFDM-modulated基带信号,作为一个返回(
NCPTotal循环前缀长度超过所有的符号。
NCP循环前缀的长度,决定了吗
CyclicPrefixLength
。当
CyclicPrefixLength
是一个标量,NCPTotal=N CP×N 信谊。当
CyclicPrefixLength
是一个行向量,NCPTotal=∑N CP。
NFFT副载波的数量,决定了吗
FFTLength
。N信谊是符号的数量,由
NumSymbols
。NT发射天线的数量,决定了吗
NumTransmitAntennnas
。
对象的功能
使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj
使用这个语法:
发行版(obj)
例子
创建和修改OFDM调制器
创建和显示一个OFDM调制器系统对象™使用默认属性值。
ofdmMod = comm.OFDMModulator
ofdmMod = comm.OFDMModulator属性:FFTLength: 64 NumGuardBandCarriers: [2 x1双]InsertDCNull:假PilotInputPort:假CyclicPrefixLength: 16个窗口:假OversamplingFactor: 1 NumSymbols: 1 NumTransmitAntennas: 1
修改数量的副载波和符号。验证数量的副载波和符号的数量改变。使用信息
目标函数来显示输入和输出信号的维度。
ofdmMod。FFTLength = 128; ofdmMod.NumSymbols = 2
ofdmMod = comm.OFDMModulator属性:FFTLength: 128 NumGuardBandCarriers: [2 x1双]InsertDCNull:假PilotInputPort:假CyclicPrefixLength: 16个窗口:假OversamplingFactor: 1 NumSymbols: 2 NumTransmitAntennas: 1
信息(ofdmMod)
ans =结构体字段:DataInputSize (117 2): OutputSize (288: 1)
使用showResourceMapping
目标函数的映射数据,飞行员和空副载波在时频空间。
showResourceMapping (ofdmMod)
更新对象添加一个直流零和激活飞行员输入参数。显示更新的配置对象。使用showResourceMapping
目标函数来显示更新后的资源映射。使用信息
目标函数来显示更新后的输入和输出信号的维度。更新后的输入和输出尺寸显示对象更改配置。具体来说,当对象运行时,飞行员必须提供副载波。
ofdmMod。InsertDCNull = 1;ofdmMod。飞行员InputPort = 1
ofdmMod = comm.OFDMModulator属性:FFTLength: 128 NumGuardBandCarriers: [2 x1双]InsertDCNull:真正的PilotInputPort:真正的PilotCarrierIndices: x1双[4]CyclicPrefixLength: 16个窗口:假OversamplingFactor: 1 NumSymbols: 2 NumTransmitAntennas: 1
信息(ofdmMod)
ans =结构体字段:DataInputSize (112 2): PilotInputSize: 2 [4] OutputSize: 288 [1]
showResourceMapping (ofdmMod)
从OFDM解调器创建OFDM调制器
创建调制器通过解调器配置确保一对匹配的调制器和解调器。
创建一个OFDM解调器系统对象™使用默认属性值。然后,指定试点指标一个符号和两个传输天线。当你使用的解调器调制器的创建、设置PilotCarrierIndices
解调器的属性影响OFDM调制器传输天线的数量。解调器接收天线的数量是不相关的和发射天线的数量。
ofdmDemod = comm.OFDMDemodulator;ofdmDemod。飞行员OutputPort = true; ofdmDemod.PilotCarrierIndices =…猫([12;26日;40;54]、[13;27个;41;55]);
使用OFDM解调器创建OFDM调制器。
ofdmMod = comm.OFDMModulator (ofdmDemod);
显示OFDM调制器和解调器的性质,验证适用的属性匹配。
disp (ofdmMod)
comm.OFDMModulator属性:FFTLength: 64 NumGuardBandCarriers: [2 x1双]InsertDCNull:假PilotInputPort:真正的PilotCarrierIndices: [4 x1x2双]CyclicPrefixLength: 16个窗口:假OversamplingFactor: 1 NumSymbols: 1 NumTransmitAntennas: 2
disp (ofdmDemod)
comm.OFDMDemodulator属性:FFTLength: 64 NumGuardBandCarriers: [2 x1双]RemoveDCCarrier:假PilotOutputPort:真正的PilotCarrierIndices: [4 x1x2双]CyclicPrefixLength: 16 OversamplingFactor: 1 NumSymbols: 1 NumReceiveAntennas: 1
可视化为OFDM调制器时频资源分配
的showResourceMapping
目标函数为每个传输天线显示时频资源映射。
创建一个OFDM调制器。
ofdmMod = comm.OFDMModulator;
应用showResourceMapping
对象的功能。
showResourceMapping (ofdmMod)
插入一个直流零。
ofdmMod。InsertDCNull = true;
显示添加直流零后的资源映射。
showResourceMapping (ofdmMod)
创建OFDM调制器和指定的飞行员
创建一个OFDM调制器和指定驾驶员的副载波索引信号。指定每个符号的指数和传输天线。当发射天线的数量大于1,设置不同的试验指标之间的每个符号天线。
创建一个OFDM调制器对象,指定两个符号和插入一个直流零。
ofdmMod = comm.OFDMModulator (…FFTLength = 128,…NumSymbols = 2,…InsertDCNull = true);
使飞行员输入端口,这样你可以指定驾驶员指数。
ofdmMod。飞行员InputPort = true;
符号指定相同的试验指标。
ofdmMod。飞行员CarrierIndices = [12; 56; 89; 100];
显示飞行员的位置信号和OFDM时频网格使用nullshowResourceMapping
对象的功能。
showResourceMapping (ofdmMod)
为第二个指定不同的指标符号连接第二列的试验指标PilotCarrierIndices
财产。
ofdmMod。飞行员CarrierIndices =…猫(2 ofdmMod.PilotCarrierIndices [17;61;94;105));
验证试验副载波指数两个符号之间的不同。
showResourceMapping (ofdmMod)
发射天线的数量增加到两个。
ofdmMod。NumTransmitAntennas = 2;
指定试验指标的两个传输天线。提供指标为多个天线同时最小化干扰天线,指定PilotCarrierIndices
房地产作为一个三维数组,这样每个符号的指数不同的天线。
ofdmMod。飞行员CarrierIndices =…猫([20;50;70;110年],[15;60;75;105));
显示的资源映射两个传输天线。灰色的线表示插入定制的null。飞行员符号从不同天线间的干扰减至最小,对象创建null。
showResourceMapping (ofdmMod)
创建OFDM调制器不同循环前缀长度
指定循环前缀的长度为每个OFDM符号。
创建一个OFDM调制器,指定五符号,四左三右保护带副载波,每个OFDM符号和循环前缀长度。
ofdmMod = comm.OFDMModulator (…NumGuardBandCarriers = (4; 3),…NumSymbols = 5,…CyclicPrefixLength = [12 10 14 11 13]);
显示OFDM调制器的属性确认配置循环前缀长度变化的符号。
disp (ofdmMod)
comm.OFDMModulator属性:FFTLength: 64 NumGuardBandCarriers: [2 x1双]InsertDCNull:假PilotInputPort:假CyclicPrefixLength:[12 10 14 11 13]窗口:假OversamplingFactor: 1 NumSymbols: 5 NumTransmitAntennas: 1
确定OFDM调制器数据维度
通过使用获得OFDM调制器的数据维度信息
对象的功能。
创建一个OFDM调制器对象与试验指标,一个直流零,和两个传输天线。
ofdmMod = comm.OFDMModulator (…NumGuardBandCarriers = [4;3),…PilotInputPort = true,…PilotCarrierIndices =猫(3 [12;26日;40;54]、[11;25;39;53]),…InsertDCNull = true,…NumTransmitAntennas = 2);
使用信息
目标函数调制器输入数据,飞行员输入数据和输出数据的大小。
信息(ofdmMod)
ans =结构体字段:DataInputSize: [48 1 2] PilotInputSize: [4 1 2] OutputSize: 80 [2]
创建OFDM调制数据
链路级别生成OFDM调制符号用于模拟。
构造一个OFDM调制器直流零插入,七保护带副载波,和两个不同的试验指标为每一个符号象征。
ofdmMod = comm.OFDMModulator (…NumGuardBandCarriers = (4; 3),…PilotInputPort = true,…PilotCarrierIndices = [12 11;26日27日;40 39;54 55),…NumSymbols = 2,…InsertDCNull = true);
确定输入数据,飞行员,和输出数据的维度。
modDim = info (ofdmMod);
OFDM调制器产生随机数据符号。结构变量,modDim
的数量,确定数据符号。
dataIn =复杂(…randn (modDim.DataInputSize) randn (modDim.DataInputSize));
创建一个控制信号,有正确的维度。
pilotIn =复杂(…兰特(modDim.PilotInputSize),兰德(modDim.PilotInputSize));
应用OFDM调制数据和试验信号。
modData = ofdmMod (dataIn pilotIn);
使用OFDM调制器对象创建相应的OFDM解调器。
ofdmDemod = comm.OFDMDemodulator (ofdmMod);
解调的OFDM信号和输出数据和试验信号。
[dataOut, pilotOut] = ofdmDemod (modData);
确认,在一个严格的公差,输入数据和飞行员符号匹配输出数据和飞行员符号。
isSame = (max (abs ([dataIn (:)——dataOut (:);…pilotIn (:)——pilotOut(:)))) < 1平台以及)
isSame =逻辑1
Oversample和过滤OFDM信号通过输出通道
过滤的OFDM调制信号数据和飞行员输入和输出时生成的四倍采样率通过对于单通道的输出。解调channel-filtered信号和原始数据比较。
创建一个OFDM解调器对象有三个不同符号和飞行员副载波指数和循环前缀长度为每个符号。
ofdmDemod = comm.OFDMDemodulator (…NumGuardBandCarriers = (9。8),…RemoveDCCarrier = true,…PilotOutputPort = true,…PilotCarrierIndices =[[12、26、40; 54],[14; 28, 38岁,52],[12、26、40;54]],…CyclicPrefixLength = [16 32],…OversamplingFactor = 4,…NumSymbols = 3);
创建一个OFDM调制器系统对象从OFDM解调器对象,ofdmDemod
。
ofdmMod = comm.OFDMModulator (ofdmDemod);
显示配置的副载波资源映射数据,飞行员,保护带和零信号使用showResourceMapping
对象的功能。获得通过使用输入和输出维度信息信息
对象的功能。
showResourceMapping (ofdmDemod);
modDim = info (ofdmMod);
创建随机数据和飞行员输入和应用QAM调制。
M = 16;xd =兰迪([0 m - 1], modDim.DataInputSize);dataIn = qammod (xd, M, UnitAveragePower = true);xp =兰迪([0 m - 1], modDim.PilotInputSize);pilotIn = qammod (xp, M, UnitAveragePower = true);
应用OFDM调制和飞行员QAM信号的数据。通过一个AWGN信道滤波器的信号。恢复数据和飞行员符号,应用OFDM解调,然后QAM-demodulation。
modOut = ofdmMod (dataIn pilotIn);chanOut = awgn (modOut 20“测量”);[dataOut, pilotOut] = ofdmDemod (chanOut);码= qamdemod (dataOut, M, UnitAveragePower = true);yp = qamdemod (pilotOut, M, UnitAveragePower = true);
验证数据和飞行员通过这个过程不变。
码dataSame = isequal (xd)
dataSame =逻辑1
pilotSame = isequal (xp, yp)
pilotSame =逻辑1
算法
正交频分复用
属于一类多载波OFDM调制方案。因为操作可以同时传输多个运营商,噪音不影响OFDM相同程度的单载波调制。
OFDM运行一个高效的数据流分为substreams低速率数据传输频带分解成一系列连续的单独副载波调制。这组平行和正交副载波携带数据流占据几乎相同的宽带信道带宽。通过狭窄的正交副载波,OFDM信号增益鲁棒性在频率选择衰落信道和消除相邻副载波干扰。符号间干扰(ISI)是减少的,因为低数据率substreams有符号持续时间大于信道延迟传播。
这张图片显示了一个正交的频域表示副载波OFDM波形。
发射机应用快速傅里叶逆变换(传输线)
,{
请注意
MATLAB®离散傅里叶变换的实现规范化的输出由1 /传输线传输线
参考页面。
Δ副载波间距
一个OFDM调制器由串并联转换银行紧随其后
副载波分配、保护频带和保护间隔
个人OFDM子载波分配数据,飞行员,或者零副载波。
如下所示,副载波被指定为数据,直流,飞行员,或者保护带副载波。
副载波数据传输用户数据。
飞行员副载波信道估计。
零副载波传送任何数据。副载波没有数据提供一个直流零和作为OFDM资源之间的缓冲块。
零直流副载波频带的中心有一个索引值的(
nfft
/ 2 + 1)nfft
甚至,或(nfft
+ 1)/ 2)nfft
是奇数。卫兵乐队提供缓冲区相邻信号在相邻组合来减少干扰引起的谱泄漏。
零副载波模型使您能够保护频带和直流副载波位置为特定的标准,如各种802.11格式,LTE, WiMAX,或者自定义配置。你可以分配一个向量的位置分配null的零副载波指数。
类似于保护频带,保护间隔保护OFDM的传输信号的完整性,减少码间干扰。
保护间隔分配类似于保护频带的分配。模型可以保护间隔提供时间分离OFDM符号。卫兵保护间隔符号间的正交信号后经过time-dispersive频道。利用循环前缀创建保护间隔。循环前缀插入拷贝一个OFDM符号的最后部分的第一部分OFDM符号。
OFDM受益于使用循环前缀插入只要分散的时间跨度不超过的时间循环前缀。
插入循环前缀的结果减少了部分用户数据吞吐量,因为循环前缀占用带宽,可以用于数据传输。
OFDM提出了余弦窗口
OFDM余弦窗口中所述应用技术[3]限制频谱再生通过创建一个平稳过渡之间最后的一个符号,第一个样本的样本下一个符号。
而循环前缀创建一个警卫在时间域保持正交性,很少一个OFDM符号开头相同的振幅和相位,展品的OFDM符号之前,导致频谱再生,因此,由于互调失真传播信号的带宽。限制这种光谱再生,您可以创建一个象征着最后的样本之间的平稳过渡和下一个符号的第一个示例使用循环后缀和余弦窗口。
创建循环后缀,附加的操作
提出了余弦窗口中,
地点:
TOFDM符号持续时间包括保护间隔。
TW的时间窗口。
调整循环后缀的长度通过设置窗口长度,用后缀长度介于1和最小循环前缀长度。窗口提高频谱再生时,它的多路径衰落豁免权,因为减少了冗余保护带由于保护带样本值的变化来实现符号间的平滑过渡。
这些数据显示的应用提出了余弦窗口。
引用
[1]Dahlman, . . E。,S. Parkvall, and J. Skold.
[2]安德鲁j·G。,A. Ghosh, and R. Muhamed,
[3]安捷伦科技公司,“OFDM提出了余弦窗口”,https://rfmw.em.keysight.com/wireless/helpfiles/n7617a/ofdm_raised_cosine_windowing.htm。
[4]Montreuil, L。,R. Prodan, and T. Kolze. "OFDM TX Symbol Shaping 802.3bn",https://www.ieee802.org/3/bn/public/jan13/montreuil_01a_0113.pdf。博通公司,2013年版。
[5]IEEE标准-2017 - 802.16。”部分16:宽带无线接入系统的空中接口。”March 2018.
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
看到系统在MATLAB代码生成对象(MATLAB编码器)。
版本历史
介绍了R2014aR2023a:增加了对采金宝app样过密的支持
comm.OFDMModulator
现在支持金宝app过采样。
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。