UFMC是通用滤波多载波 Universal Filtered Multi-Carrier的简称,是一种面向5G的多载波体制,可以被看作广义的滤波正交频分复用和滤波器组多载波(Filter Bank Multicarrier,FBMC),它继承了OFDM和FBMC的优点,同时克服了它们的一些不足。
OFDM 信号在调制解调时只需要进行 IFFT 和 FFT,因此简洁性是 OFDM 的一大优点。OFDM 的主要不足是其频谱的旁瓣过高,这导致OFDM 容易受到频率偏移和定时偏移的影响,在实际的系统中,必须进行高精度的同步才能确保系统性能的最大化。
新型的波形大都采用了滤波的方法,通过多个载波滤波减小频谱的旁瓣水平,从而减小OFDM的缺点,同时减小保护带开销。
(OFDM无法有效对抗ICI,与OFDM相比,FBMC是在每个子载波上滤波和不采用CP,而OFDM是在整个带上滤波,所以FBMC的频谱旁瓣和载波间的干扰(ICI)较小。UFMC采用折衷的方案,它使用了冲激响应较小的滤波器,把子载波分成多个子带,然后在每个子带上进行滤波,与FBMC相比,UFMC的滤波长度会短一些,一定程度上继承了FBMC的优点,又提高了突发短帧的传输效率。)
UFMC 对一组连续的子载波而非单个子载波进行滤波,因此 UFMC 滤波器的通带宽度比FBMC中滤波器的通带宽度要大,缩短了滤波器长度,解决了 FBMC 中复杂度过高的问题。与 FBMC 类似,UFMC也可以抑制功率谱的旁瓣,从而减小由于频偏而导致的子载波间干扰。
近年来,UFMC技术由于其带外辐射低、抗载波频偏能力强、时频效率高和可不添加循环前缀等优点而收到广泛关注,然而实际中,由于信道的多径效应,在不添加CP的UFMC系统中ISI是不可避免的。
与OFDM系统相比,UFMC的优势主要体现在以下几个方面:
(在 AWGN 信道下UFMC 和 OFDM 误码率性能相近,OFDM 在大信噪比时的误码率性能略好于 UFMC)
UFMC符号时域采样信号由B个子带构成,每个子代又由若干个连续的子载波构成。子带的频域数据符号向量经过N点IDFT变换得到时域信号向量,输出符号经过一个长度为L的FIR滤波器,经过滤波器的卷积处理后,每个子带的输出信号长度由N变成N+L-1,然后叠加构成一个完整的UFMC发送符号。
接收端:通过在尾部加零的操作来使一个UFMC符号由N+L-1长度变成2N,然后进行2N点FFT计算,舍弃序号为奇数倍的数据,剩下的N点数据即为发送端发送的N点频域数据,然后解调即可得到发送数据。
UFMC系统参数:子载波数=20,子带数目=10,切比雪夫滤波器长度=43,阻带衰减=40dB,子载波采用16QAM调制。
OFDM系统参数:
2.1设置系统参数
s = rng(211); % Set RNG state for repeatability
numFFT = 512; % FFT点数
subbandSize = 20; % >1
numSubbands = 10; % numSubbands*subbandSize <= numFFT
subbandOffset = 156; % numFFT/2-subbandSize*numSubbands/2 = 256-10*10 = 156
bitsPerSubCarrier = 4; % 2: 4QAM, 4: 16QAM, 6: 64QAM, 8: 256QAM
snrdB = 15; % SNR(dB)
% 使用的是具有参数化旁瓣衰减的切比雪夫(FIR)滤波窗口
filterLen = 43; % 类似于循环前缀长度
slobeAtten = 40; % 旁瓣(阻带)衰减 dB
2.2 UFMC调制
UFMC符号时域采样信号由B个子带构成,每个子带又由若干个连续的子载波构成。子带的频域数据符号向量经过N点IDFT变换得到时域信号向量,输出符号经过一个长度为L的FIR滤波器,经过滤波器的卷积处理后,每个子带的输出信号长度由N变成N+L-1,然后叠加构成一个完整的UFMC发送符号。
% 设计具有指定衰减的窗口
prototypeFilter = chebwin(filterLen, slobeAtten);
% 发送端处理,初始化数组
inpData = zeros(bitsPerSubCarrier*subbandSize, numSubbands);
txSig = complex(zeros(numFFT+filterLen-1, 1)); % 43 - 1 =》 L_CP = 42
hFig = figure;
axis([-0.5 0.5 -100 20]);hold on; grid on
xlabel('归一化频率');ylabel('PSD (dBW/Hz)')
title(['UFMC, ' num2str(numSubbands) ' Subbands, ' num2str(subbandSize) ' Subcarriers each'])
% 循环遍历每个子带
for bandIdx = 1:numSubbands
bitsIn = randi([0 1], bitsPerSubCarrier*subbandSize, 1);% 4 * 20
% QAM
symbolsIn = qammod(bitsIn, 2^bitsPerSubCarrier, 'InputType', 'bit', 'UnitAveragePower', true);
inpData(:,bandIdx) = bitsIn; % log bits for comparison
% 将子带数据打包到OFDM符号中
offset = subbandOffset+(bandIdx-1)*subbandSize;
symbolsInOFDM = [zeros(offset,1); symbolsIn; zeros(numFFT-offset-subbandSize, 1)];
ifftOut = ifft(ifftshift(symbolsInOFDM));
% 每个子带的滤波器在频率上进行移位
bandFilter = prototypeFilter.*exp( 1i*2*pi*(0:filterLen-1)'/numFFT* ((bandIdx-1/2)*subbandSize+0.5+subbandOffset+numFFT/2) );
filterOut = conv(bandFilter,ifftOut);
% 绘制每个子带的PSD
[psd,f] = periodogram(filterOut, rectwin(length(filterOut)), numFFT*2, 1, 'centered');
plot(f,10*log10(psd));
% 对过滤的子带响应求和以形成聚合传输
% 信号
txSig = txSig + filterOut;
end
set(hFig, 'Position', figposition([20 50 25 30]));hold off;
% 计算PAPR
PAPR = comm.CCDF('PAPROutputPort', true, 'PowerUnits', 'dBW');
[~,~,paprUFMC] = PAPR(txSig);
disp(['PAPR for UFMC = ' num2str(paprUFMC) ' dB']);
PAPR for UFMC = 8.2379 dB
PAPR for UFMC = 8.2379 dB
2.3 OFDM调制
% OFDM 不使用循环前缀
symbolsIn = qammod(inpData(:), 2^bitsPerSubCarrier, 'InputType', 'bit', 'UnitAveragePower', true);
% 处理所有子带
offset = subbandOffset; % = 156
symbolsInOFDM = [zeros(offset, 1); symbolsIn; zeros(numFFT-offset-subbandSize*numSubbands, 1)];
ifftOut = sqrt(numFFT).*ifft(ifftshift(symbolsInOFDM));
% 绘制功率谱密度(PSD)
[psd,f] = periodogram(ifftOut, rectwin(length(ifftOut)), numFFT*2, 1, 'centered');
hFig1 = figure;
plot(f,10*log10(psd)); grid on
axis([-0.5 0.5 -100 20]);
xlabel('归一化频率'); ylabel('PSD (dBW/Hz)')
title(['OFDM, ' num2str(numSubbands*subbandSize) ' Subcarriers'])
set(hFig1, 'Position', figposition([46 50 25 30]));
% 计算PAPR
PAPR2 = comm.CCDF('PAPROutputPort', true, 'PowerUnits', 'dBW');
[~,~,paprOFDM] = PAPR2(ifftOut);
disp(['PAPR for OFDM = ' num2str(paprOFDM) ' dB']);
PAPR for OFDM = 8.8843 dB
PAPR for OFDM = 8.8843 dB
2.4 UFMC Receiver with No Channel
接收端:通过在尾部加零的操作来使一个UFMC符号由N+L-1长度变成2N,然后进行2N点FFT计算,舍弃序号为奇数倍的数据,剩下的N点数据即为发送端发送的N点频域数据,然后解调即可得到发送数据。
% Add WGN
rxSig = awgn(txSig, snrdB, 'measured');
% Pad receive vector to twice the FFT Length (note use of txSig as input)
% No windowing or additional filtering adopted
yRxPadded = [rxSig; zeros(2*numFFT-numel(txSig),1)];
% Perform FFT and downsample by 2
RxSymbols2x = fftshift(fft(yRxPadded));
RxSymbols = RxSymbols2x(1:2:end);
% Select data subcarriers
dataRxSymbols = RxSymbols(subbandOffset+(1:numSubbands*subbandSize));
% Plot received symbols constellation
constDiagRx = comm.ConstellationDiagram('ShowReferenceConstellation', ...
false, 'Position', figposition([20 15 25 30]), ...
'Title', 'UFMC Pre-Equalization Symbols', 'Name', 'UFMC Reception', ...
'XLimits', [-150 150], 'YLimits', [-150 150]);
constDiagRx(dataRxSymbols);
% Use zero-forcing equalizer after OFDM demodulation
rxf = [prototypeFilter.*exp(1i*2*pi*0.5*(0:filterLen-1)'/numFFT); zeros(numFFT-filterLen,1)];
prototypeFilterFreq = fftshift(fft(rxf));
prototypeFilterInv = 1./prototypeFilterFreq(numFFT/2-subbandSize/2+(1:subbandSize));
% Equalize per subband - undo the filter distortion
dataRxSymbolsMat = reshape(dataRxSymbols,subbandSize,numSubbands);
EqualizedRxSymbolsMat = bsxfun(@times,dataRxSymbolsMat,prototypeFilterInv);
EqualizedRxSymbols = EqualizedRxSymbolsMat(:);
% Plot equalized symbols constellation
constDiagEq = comm.ConstellationDiagram('ShowReferenceConstellation', ...
false, 'Position', figposition([46 15 25 30]), ...
'Title', 'UFMC Equalized Symbols', 'Name', 'UFMC Equalization');
constDiagEq(EqualizedRxSymbols);
BER = comm.ErrorRate;
% Perform hard decision and measure errors
rxBits = qamdemod(EqualizedRxSymbols, 2^bitsPerSubCarrier, 'OutputType', 'bit', 'UnitAveragePower', true);
ber = BER(inpData(:), rxBits);
disp(['UFMC Reception, BER = ' num2str(ber(1)) ' at SNR = ' num2str(snrdB) ' dB']);
UFMC Reception, BER = 0 at SNR = 15 dB
rng(s);% Restore RNG state
注意:我使用的是MATLAB2019a,会提示:“comm.RectangularQAMDemodulator在以后的版本中将会被删除,请改用qamdemod”
***声明:所使用的代码来自MATLAB官方文档,略有修改