無線通信とコーディング - MATLAB を使用した UFMC シミュレーション
1 はじめに
UFMCはUniversal Filtered Multi-Carrierの略で、5G指向のマルチキャリアシステムであり、一般化されたフィルタ直交周波数分割多重とフィルタバンクマルチキャリア(Filter Bank Multicarrier、FBMC)を継承したものとみなすことができます。 OFDM と FBMC の利点を活かしながら、それらの欠点のいくつかを克服します。
OFDM 信号は変調と復調中に IFFT と FFT のみを必要とするため、シンプルさが OFDM の大きな利点です。OFDM の主な欠点は、スペクトルのサイド ローブが高すぎるため、周波数オフセットとタイミング オフセットの影響を受けやすくなることです。実際のシステムでは、最大のシステム パフォーマンスを確保するには高精度の同期を実行する必要があります。 。
新しい波形のほとんどは、フィルタリング手法を使用して、複数のキャリア フィルタを通じてスペクトルのサイドローブ レベルを低減することで、OFDM の欠点を軽減し、ガードバンドのオーバーヘッドを削減します。
(OFDM は ICI に対して効果的に対抗できません。OFDM と比較すると、FBMC は各サブキャリアでフィルタリングし、CP を使用しませんが、OFDM は帯域全体でフィルタリングするため、FBMC のスペクトル サイドローブとキャリア間干渉 (ICI) が小さくなります。UFMC はこれは、インパルス応答が小さいフィルタを使用し、サブキャリアを複数のサブバンドに分割し、各サブバンドでフィルタリングを実行します。FBMC と比較して、UFMC のフィルタ長は短くなります。ある程度、UFMC のフィルタ長は継承されます。 FBMCの利点を活かし、バーストショートフレームの伝送効率を向上させます。)
UFMC は単一のサブキャリアではなく連続したサブキャリアのグループをフィルタリングするため、UFMC フィルタの通過帯域幅は FBMC のフィルタの通過帯域幅よりも大きく、これによりフィルタ長が短縮され、FBMC の過度の複雑さの問題が解決されます。FBMC と同様に、UFMC もパワー スペクトルのサイド ローブを抑制できるため、周波数オフセットによって引き起こされるサブキャリア間の干渉を軽減できます。
近年、UFMC テクノロジーは、その低い帯域外放射、キャリア周波数オフセットに対する強力な耐性、高い時間周波数効率、およびサイクリック プレフィックスの追加の必要がないため、広く注目を集めています。 CP の UFMC システムでは、ISI を追加しなくてもチャネルのマルチパス効果は避けられません。
OFDM システムと比較した場合、UFMC の利点は主に次の点に反映されます。
- CP フリー設計により、通信システムの効率が向上します。UFMC システムは、フィルタ パラメータを合理的に設計することで ICI および ISI に耐性があるため、CP が不要になり、持続時間の短いデータ フレームを送信する場合に OFDM システムと比較してシステム効率が向上します。
- 帯域外放射が少ない。OFDM システムはサブバンド全体に 1 つのフィルターを使用しますが、UFMC は周波数帯域全体をいくつかのサブバンドに分割し、各サブバンドには独自のフィルターがあり、システムの帯域外放射が低減されます。
- UFMCはフィルタ長を変えることでシンボルに含まれる有効な情報の割合を増やし、同時にシンボル長を短くすることができるため、ショートバースト通信に適したシステムとなります。
- UFMC は、サブバンド幅、データ部分の長さ、サイクリック プレフィックス長を変更することで、さまざまなサービスのニーズを満たすことができます。
(UFMC と OFDM のビット誤り率パフォーマンスは、AWGN チャネルでは同様であり、信号対雑音比が大きい場合、OFDM のビット誤り率パフォーマンスは UFMC のビット誤り率パフォーマンスよりわずかに優れています)
2. UFMC 原則の概要
UFMC シンボルの時間領域サンプリング信号は B 個のサブバンドで構成され、各サブ世代はいくつかの連続したサブキャリアで構成されます。サブバンドの周波数領域のデータ シンボル ベクトルは、N ポイント IDFT によって変換されて時間領域の信号ベクトルが得られ、出力シンボルは長さ L の FIR フィルターに通されます。フィルタを使用すると、各サブバンドの出力信号の長さが N から N+L-1 に変化し、重畳されて完全な UFMC 送信シンボルが形成されます。
受信側:UFMCシンボルの末尾に0を追加してN+L-1長から2N長に変更し、2N点のFFT演算を行い、通し番号が奇数倍のデータと残りのN点データを破棄N ポイントの周波数領域データが送信され、その後復調されて送信データが取得されます。
3. コード部分
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
UFMC の PAPR = 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
OFDM の PAPR = 8.8843 dB
2.4 チャネルのない UFMC 受信機
: 最後に 0 を追加して 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 を使用してください」というプロンプトが表示されます。