主要内容

ofdmdemod

利用正交频分复用(OFDM)解调时域信号

描述

例子

outSym= ofdmdemod (ofdmSignfftcplen中指定的输入时域信号进行OFDM解调ofdmSig,使用指定的FFT大小nfft和指定的循环前缀长度cplen.有关信息,请参见OFDM解调

outSym= ofdmdemod (ofdmSignfftcplensymOffset应用符号采样偏移量,symOffset,对于输入解调前的每个OFDM符号。

例子

outSym= ofdmdemod (ofdmSignfftcplensymOffsetnullidx中指定的位置删除空子载波nullidx.对于这种语法,符号采样偏移被应用到每个OFDM符号,输出的行数为nfft- - - - - -长度(nullidx,这说明了空子载波的删除。使用空子载波来解释保护带和直流子载波。有关信息,请参见子载波分配和保护频带

例子

(outSym飞行员= ofdmdemod(ofdmSignfftcplensymOffsetnullidxpilotidx中指定的导频索引返回导频子载波pilotidx.对于这种语法,符号采样偏移被应用到每个OFDM符号,输出的行数为nfft- - - - - -长度(nullidx- - - - - -长度(pilotidx,这说明了空子载波和导频子载波的去除。该函数假设导频子载波位置在每个OFDM符号和发射天线上是相同的。

例子

outSym= ofdmdemod (ofdmSignfftcplen___OvesamplingFactor =值)指定可选的过采样因子名称-值参数,作为以前语法中的输入参数。上采样输入信号的过采样因子必须指定为正标量。此外,产品(2022世界杯八强谁会赢?OversamplingFactor×nfft)及(OversamplingFactor×cplen)的结果都必须是整数。的默认值。OversamplingFactor1

例如,ofdmdemod (inSym nfft、cplen OversamplingFactor = 2)解调假设输入信号被上采样了两倍。

例子

全部折叠

对不同的符号解调具有不同CP长度的信号。

初始化为空和导频子载波定义位置的输入参数。生成随机数据并执行OFDM调制。

M = 16;NFFT = 64;Cplen = [16 32];nSym = 2;dataSym = randi([0 M-1],nfft,nSym);qamSig = qammod(dataSym,M,UnitAveragePower=true);y1 = ofdmmod(qamSig,nfft,cplen);

解调OFDM符号。将结果与原始输入数据进行比较。信号之间的差异可以忽略不计。

X1 = ofdmdemod(y1,nfft,cplen);rxData = qamdemod(x1,M,UnitAveragePower=true);isequal (rxData dataSym)
ans =逻辑1

将OFDM复用应用于经过瑞利衰落的SISO链路滤波的16-QAM信号。

初始化仿真变量,并创建瑞利衰落信道和星座图对象。

s1 = RandStream(“mt19937ar”、种子= 12345);nFFT = 64;cpLen = 16;nullIdx = [1:6 33 64-4:64].';numTones = nFFT-length(nullIdx);K = 4;每符号%位M = 2^k;qammod((0:M-1),M,UnitAveragePower = true);%参考星座符号maxDopp = 1;pathdelayed = [0 4e-3 8e-3];pathgain = [0 -2 -3];sRate = 1000;sampIdx = round(pathdelayed /(1/sRate)) + 1;chan = comm.RayleighChannel(PathGainsOutputPort=true,MaximumDopplerShift = maxDopp,PathDelays = PathDelays,AveragePathGains = pathGains,SampleRate = sRate,RandomStream =“mt19937ar带种子”);cdScope = com . constellation diagram (ShowReferenceConstellation = true,ReferenceConstellation = constSym);

生成信号数据并应用16-QAM调制。

data = randi(s1,[0 M-1],numTones,1);modOut = qammod(data,M,UnitAveragePower=true);

采用OFDM调制,使信号通过信道。

y = ofdmmod(modOut,nFFT,cpLen,nullIdx);[fadSig,pg] = chan(y);

确定符号采样偏移量。

symOffset = min(max(sampIdx),cpLen)
symOffset = 9

OFDM对接收到的信号进行时移解调。显示均衡前的星座图。

x = ofdmdemod(fadSig,nFFT,cpLen,symOffset,nullIdx);cdScope (x);

转换路径增益向量,pg,为对应于数据子载波的标量抽头增益,h_datasubcarr.使用h_datasubcarr在信号恢复期间为均衡利用增益。

hImp =复数(零(nFFT,1));hImp(sampIdx) =均值(pg,1);hall = fftshift(fft(hImp));dataIdx = setdiff((1:nFFT)',nullIdx);h_datasubcarr = hall(dataIdx);

使信号均衡。显示均衡后的星座图。

eqSig = x ./ h_datasubcarr;cdScope (eqSig);

解调16-QAM符号以恢复信号。计算符号错误率。

rxSym = qamdemod(eqSig,M,UnitAveragePower=true);numErr = symerr(data,rxSym);disp (['符号错误数量:'num2str (numErr)“out of”num2str(长度(数据))“符号”。])
符号错误数:52个符号中2个。

ofdm解调数据输入,包括null和导频封装。

初始化输入参数,定义空和导频子载波的位置。生成随机数据并执行OFDM调制。

Mqam = 16;Mpsk = 4;NFFT = 64;Cplen = 16;nSym = 10;nullIdx = [1:6 33 64-4:64]';pilotIdx = [12 26 40 54]';numDataCarrs = nfft-length(nullIdx)-length(pilotIdx);dataSym = randi([0 Mqam-1],numDataCarrs,nSym);qamSig = qammod(dataSym,Mqam,UnitAveragePower=true); pilotSym = repmat((0:Mpsk-1).',1,nSym); pilots = pskmod(pilotSym,Mpsk); y2 = ofdmmod(qamSig,nfft,cplen,nullIdx,pilotIdx,pilots);

解调OFDM符号。将结果与原始输入数据进行比较,表明解调后的信号与原始数据和导频信号相等。

symOffset = cplen;[x2,rxPilots] = ofdmdemod(y2,nfft,cplen,symOffset,nullIdx,pilotIdx);rxData = qamdemod(x2,Mqam,UnitAveragePower=true);isequal (rxData dataSym)
ans =逻辑1
rxpilootsym = pskdemod(rxPilots,Mpsk);isequal (rxPilotSym repmat ((0: Mpsk-1)。',1,nSym))
ans =逻辑1

解调具有采样偏移量的过采样OFDM调制。在OFDM网格中插入空值并对输出信号进行过采样。

初始化过采样因子、FFT大小、循环前缀长度和采样偏移量的变量。

M = 64;Osf = 4/3;NFFT = 768;Cplen = 24;sampOffset = 5;symOffset = cplen - (sampOffset/osf);

生成数据符号并对数据进行ofdm调制。

dataSym = randi([0 M-1],nfft,1);qamSig = qammod(dataSym,M,UnitAveragePower=true);y3 = ofdmmod(qamSig,nfft,cplen, overamplingfactor =osf);

对信号进行解调,并显示解调后的数据符号与原始输入数据符号相匹配。

x3 = ofdmdemod(y3,nfft,cplen,symOffset, overamplingfactor =osf);rxSym = qamdemod(x3,M,UnitAveragePower=true);isequal (rxSym dataSym)
ans =逻辑1

输入参数

全部折叠

调制的OFDM符号,指定为复杂符号的二维数组。

  • 如果cplen是一个标量,数组大小为((nfft+cplenN信谊)———NR

  • 如果cplen是行向量,数组大小为((nfft×N信谊) +总和cplen))———NR

    N信谊每个天线的符号数和NR接收天线数。

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

FFT长度,指定为大于或等于8的整数。nfft等于在解调过程中使用的子载波数。

数据类型:

循环前缀长度,指定为标量或长度的行向量N信谊

  • 当你指定cplen作为一个标量,循环前缀长度对于通过所有天线的所有符号都是相同的。

  • 当你指定cplen作为长度的行向量N信谊,循环前缀长度可以在符号之间变化,但在所有天线中保持相同的长度。

数据类型:

符号采样偏移量,指定为从0到cplen

  • 如果不指定symOffset,默认值为offset =cplen

  • 如果你指定symOffset作为标量,对所有符号使用相同的偏移量。

  • 如果你指定symOffset作为行向量,每个符号的偏移值可以不同。

有关信息,请参见窗口和符号偏移

数据类型:

空子载波位置的索引,指定为元素值从1到的列向量nfft.如果你指定nullidx的行数outSymnfft长度(nullidx)).有关信息,请参见子载波分配和保护频带

数据类型:

导频子载波位置的索引,指定为元素值从1到的列向量nfft.如果你指定pilotidx的行数outSymnfft长度(nullidx)长度(pilotidx)).有关信息,请参见子载波分配和保护频带

数据类型:

输出参数

全部折叠

输出解调后的符号,返回为ND——- - - - - -N信谊——- - - - - -NR符号数组。ND必须等于nfft- - - - - -长度(nullidx- - - - - -长度(pilotidxN信谊为每个天线的OFDM符号数。NR接收天线数。有关信息,请参见OFDM解调

飞行员副航母,作为N飞行员——- - - - - -N信谊——- - - - - -NR符号数组。N飞行员一定等于的长度pilotidxN信谊为每个天线的OFDM符号数。NR接收天线数。该函数假设每个OFDM符号和发射天线的导频子载波位置是相同的。使用comm.OFDMDemodulator通过OFDM符号或天线改变导频子载波位置。

更多关于

全部折叠

OFDM解调

OFDM解调器利用正交频分复用对多子载波时域信号进行解复用。

OFDM解调使用FFT操作,结果是N并行数据流。OFDM解调器由一组N相关器,每个OFDM子载波分配一个相关器,然后进行并行到串行转换。

子载波分配和保护频带

每个OFDM子载波被分配为数据子载波、导频子载波或空子载波。

如图所示,子载波被指定为数据子载波、直流子载波、导频子载波或保护带子载波。

  • 数据子载波传输用户数据。

  • 导频子载波用于信道估计。

  • 空子载波不传输数据。没有数据的子载波被用来提供一个DC null,并作为OFDM资源块之间的缓冲区。

    • 零直流子载波是频带的中心,其索引值为(nfft/2 + 1)如果nfft是偶数,或(nfft+ 1) / 2) ifnfft是奇数。

    • 保护带在相邻频带的相邻信号之间提供缓冲,以减少频谱泄漏造成的干扰。

空子载波使您能够为特定标准建模保护带和DC子载波位置,例如各种802.11格式、LTE、WiMAX或自定义分配。可以通过分配空子载波索引的向量来分配空值的位置。

与保护频带类似,OFDM中也使用了保护间隔,通过减少码间干扰来保护传输信号的完整性。

保护间隔的分配类似于保护频带的分配。您可以建模保护间隔来提供OFDM符号之间的时间分离。保护间隔有助于在信号通过时间色散通道后保持符号间的正交性。通过使用循环前缀来创建保护间隔。循环前缀插入将OFDM符号的最后一部分复制为OFDM符号的第一部分。

只要时间分散的跨度不超过循环前缀的持续时间,就可以保持循环前缀插入的好处。

由于循环前缀占用了可用于数据传输的带宽,因此插入循环前缀会导致用户数据吞吐量的小幅降低。

窗口和符号偏移

为了减少由于在发射机上加窗而引起的码间干扰(ISI),该函数在对每个OFDM符号进行解调之前应用一个分数符号偏移量。信号加窗通常用于传输的OFDM符号,以平滑连续OFDM符号之间的不连续。窗口减少了符号间带外辐射,但增加了ISI。

加窗OFDM符号由循环前缀(CP)、ODFM符号数据以及符号开头和结尾的加窗区域组成。前导窗肩和后导窗肩的尾部如图所示。

为了减少ISI,可以通过指定在OFDM符号解调之前应用的符号采样偏移量来对齐信号采样时序。

将符号采样偏移量指定为一个从0到的值lCP

  • 当符号采样偏移是一个从0到lCP, FFT窗口开始于X+1个样本的CP长度。

  • 当符号采样偏移为零时,不应用偏移,FFT窗口从符号的第一个采样开始。

  • 当符号采样偏移量为循环前缀长度时,lCP, FFT窗口在最后一个CP样本之后开始。如果未指定符号采样偏移量,则此偏移量为默认设置。

扩展功能

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

版本历史

在R2018a中介绍

Baidu
map