主要内容

正交频分复用调制

正交频分复用(OFDM)调制是一种在多个载频上对数字数据进行编码的线性基带调制技术。发射机使用快速傅里叶反变换(IFFT)来组合(调制)多个具有重叠光谱的紧密间隔的正交子载波信号来并行传输数据。接收机使用FFT来解调信号。

通信工具箱™软件包括这些调制和解调函数、系统对象和模块来建模OFDM调制。

OFDM

如Proakis ([2]),在OFDM系统中使用N子信道中,符号速率为1/T减少了一个因子N相对于使用整个带宽的单载波系统上的符号速率W并以与OFDM相同的速率传输数据。因此,OFDM系统中的符号间隔为TNT年代,在那里T年代是单载波系统中的符号间隔。通过选择N为了足够大,符号间隔T可使信道的时间持续时间明显大于时间色散。因此,符号间干扰可以通过选择任意小N.换句话说,每个子信道似乎有一个固定的频率响应Cfk), k = 0,1,…,N- 1

OFDM调制实例

这些例子演示了OFDM调制技术。

使用用户指定的导频索引应用OFDM

构造正交频分复用(OFDM)调制器和解调器对,并指定它们的导频指标。OFDM调制器系统对象™使您能够指定导频子载波指标,这些指标与所描述的约束相一致信息对象的功能。在本例中,对于3x2信道上的OFDM传输,为三个发射天线中的每一个都创建了导频索引。此外,导频索引在奇数和偶数符号之间是不同的。

创建一个OFDM调制器对象,具有5个符号,3个发射天线,长度为6个窗口。

ofdmMod = com . ofdmmodulator (...FFTLength = 256,...NumGuardBandCarriers = [12;11),...NumSymbols = 5,...NumTransmitAntennas = 3,...PilotInputPort = true,...窗口= true,...WindowLength = 6);

为第一发射天线指定偶数和奇数符号的导频指标。

pilotIndOdd = [20;58;96;145;182;210);pilotIndEven = [35;73;111;159; 197; 225]; pilotIndicesAnt1 = cat(2,pilotIndOdd,pilotIndEven,pilotIndOdd,...pilotIndEven pilotIndOdd);

根据第一天线指定的指标生成第二和第三天线的导频指标。连接三个天线的索引,并将它们分配给PilotCarrierIndices财产。

pilotIndicesAnt2 = pilotIndicesAnt1 + 5;pilotIndicesAnt3 = pilotIndicesAnt1 - 5;ofdmMod。PilotCarrierIndices =...猫(3 pilotIndicesAnt1 pilotIndicesAnt2 pilotIndicesAnt3);

基于现有的OFDM调制器系统对象创建一个带有两个接收天线的OFDM解调器。方法确定数据和导频尺寸信息函数。

ofdmDemod = com . ofdm解调器(ofdmMod);ofdmDemod。NumReceiveAntennas = 2; dims = info(ofdmMod)
dim =带字段的结构:DataInputSize: [215 5 3] PilotInputSize: [6 5 3] OutputSize: [1360 3]

中指定的数组大小,为OFDM调制器生成数据和导频符号modDim

dataIn =...复杂(randn (dims.DataInputSize),...randn (dims.DataInputSize));pilotIn =...复杂(randn (dims.PilotInputSize),...randn (dims.PilotInputSize));

将OFDM调制应用于数据和导频。

modOut = ofdmMod(dataIn,pilotIn);

通过3x2随机信道传递调制数据。

chanGain = complex(randn(3,2),randn(3,2));chanOut = modOut * chanGain;

使用OFDM解调器对象解调接收的数据。

[dataOut,pilotOut] = ofdmDemod(chanOut);

显示三个发射天线的资源映射关系。图中的灰色线显示了自定义空值的位置,以避免天线之间的干扰。

showResourceMapping (ofdmMod)

图OFDM子载波映射Tx天线1包含一个轴对象。标题为OFDM子载波映射Tx天线1的轴对象包含5个类型为image, line的对象。

图OFDM子载波映射Tx天线2包含一个轴对象。标题为OFDM子载波映射Tx天线2的轴对象包含5个类型为image, line的对象。

图OFDM子载波映射Tx天线3包含一个轴对象。标题为OFDM子载波映射Tx天线3的轴对象包含5个类型为image, line的对象。

对于第一发射和第一接收天线对,演示输入导频信号与输入导频信号匹配。

pilotCompare =...abs (pilotIn (:: 1) * chanGain(1,1))——abs (pilotOut (:,:, 1, 1));max(pilotCompare(:) < 1e-10)
ans =逻辑1

OFDM在QPSK信号双天线空间复用中的应用

将OFDM调制应用于在两个发射天线上进行空间多路复用的QPSK信号。

初始化每个天线的输入参数并生成随机数据。

M = 4;% QPSK调制顺序NFFT = 64;Cplen = 16;nSym = 5;Nt = 2;nullIdx = [1:6 33 64-4:64]';pilotIdx = [12 26 40 54]';numDataCarrs = nfft-length(nullIdx)-length(pilotIdx);pilots = repmat(pskmod((0:M-1).',M),1,nSym,2);ant1 = randi([0 M-1],numDataCarrs,nSym);ant2 = randi([0 M-1],numDataCarrs,nSym);

QPSK为每个天线单独调制数据。执行OFDM调制。

qpskSig(:,:,1) = pskmod(ant1,M);qpskSig(:,:,2) = pskmod(ant2,M);y1 = ofdmmod(qpskSig,nfft,cplen,nullIdx,pilotIdx,pilots);

OFDM在MIMO仿真中的应用

在简单的2x2 MIMO误码率模拟中使用OFDM调制器和解调器。OFDM参数基于802.11n标准。

创建一个OFDM调制器和解调器对,使用用户指定的导频指标、一个插入的直流空值、两个发射天线和两个接收天线。指定不同天线的导频指标。

ofdmMod = com . ofdmmodulator (FFTLength=128,...PilotInputPort = true,...PilotCarrierIndices =...猫([12;40;54;76;90;118年],[13;39;55;75;91; 117]),...InsertDCNull = true,...NumTransmitAntennas = 2);ofdmDemod = com . ofdm解调器(ofdmMod);ofdmDemod。NumReceiveAntennas = 2;

显示每个发射天线的导频子载波的资源映射。图中的灰线表示插入空子载波以最小化导频信号干扰。

showResourceMapping (ofdmMod)

图OFDM子载波映射Tx天线1包含一个轴对象。标题为OFDM子载波映射Tx天线1的坐标轴对象包含一个图像类型的对象。

图OFDM子载波映射Tx天线2包含一个轴对象。标题为OFDM子载波映射Tx天线2的axis对象包含一个类型为image的对象。

确定OFDM调制器的尺寸信息方法。

ofdmModDim = info(ofdmMod);numData = ofdmModDim.DataInputSize(1);%数据子载波数numSym = ofdmModDim.DataInputSize(2);% OFDM符号数numTxAnt = ofdmModDim.DataInputSize(3);%发射天线个数

生成数据符号来填充100个OFDM帧。

Nframes = 100;M = 4;%调制顺序到QPSKdata = randi([0 M-1],nframes*numData,numSym,numTxAnt);

将QPSK调制应用于随机符号并重塑产生的列向量以匹配OFDM调制器的要求。

modData = pskmod(data(:),M,pi/4);modData =重塑(modData,nframes*numData,numSym,numTxAnt);

创建一个错误率计数器。

errorRate = com . errorRate;

模拟超过100帧的OFDM系统,假设一个平坦的2x2瑞利衰落信道。使用简单的最小二乘解决方案去除多径衰落的影响,并解调OFDM波形和QPSK数据。通过将原始数据与解调数据进行比较,生成误差统计信息。

K = 1:nframes查找第k个OFDM帧的行索引indData = (k-1)*ofdmModDim.DataInputSize(1)+1:k*numData;生成随机的OFDM导频符号pilotData = complex(rand(ofdmModDim.PilotInputSize),...兰特(ofdmModDim.PilotInputSize));使用OFDM调制QPSK符号dataOFDM = ofdmMod(modData(indData,:,:),pilotData);%创建平坦,i.i.d,瑞利衰落通道2 * 2通道chGain = complex(randn(2,2),randn(2,2))/√(2);通过瑞利和AWGN信道传递OFDM信号receivedSignal = awgn(dataOFDM*chGain,30);应用最小二乘解去除衰落信道的影响rxSigMF = chGain。\ receivedSignal.';解调OFDM数据receivedOFDMData = ofdmDemod(rxSigMF.');解调QPSK数据receivedData = pskdemod(receivedOFDMData(:),M,pi/4);计算错误统计信息dataTmp = data(indData,:,:);errors = errorRate(dataTmp(:),receivedData);结束

显示错误统计信息。

流('\n符号错误率= %d从%d错误%d在%d个符号\n'、错误)
符号错误率= 9.471154e-02从1970错误在20800个符号

参考文献

[1]IEEE标准802.16-2017。第16部分:宽带无线接入系统的空中接口2018年3月。

[2]约翰·G·普罗基斯数字通信.第五版。纽约:麦格劳希尔出版社,2007年。

另请参阅

功能

对象

相关的话题