このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
WINNER II チャネル モデルを使用した 802.11ac マルチユーザー MIMO のプリコーディング
この例では、WINNER II フェージング チャネルを介した 802.11ac™ マルチユーザーのダウンリンク伝送の送信処理と受信処理を示します。この例を実行するには、WINNER II Channel Model for Communications Toolbox™ のアドオンをダウンロードしてインストールしなければなりません。1 つのアクセス ポイントからすべてのユーザーへのチャネルを設定するには、1 つの WINNER II チャネル System object™ のみが必要です。
はじめに
802.11ac では、リンクの総スループットを向上するため、最大 4 人のユーザーと最大 8 つの送信アンテナの (アクセス ポイントから局への) ダウンリンクのマルチユーザー送信をサポートしています [1]。ユーザーに対してスケジューリングされた送信時間に基づき、スケジューラは他のユーザーに送信するために用意されたより小さい別のパケットを検索します。可能な場合は、これらのユーザーを同じ間隔でスケジュールして、複数の送信にかかる全体の時間を短縮します。
個々のユーザーのペイロードを正常に受信するにはプリコーディング (送信から終了までのビームフォーミングとも呼ばれます) が必要なため、この同時送信はより複雑になります。プリコーディングでは、チャネル状態情報 (CSI) が送信側において既知であることを前提としています。サウンディング パケットは、802.11ac Transmit Beamforming (WLAN Toolbox)の例で説明されているように、マルチユーザー送信で各ユーザーの CSI を決定するために使用されます。各ユーザーは自身の CSI をビームフォーマーにフィードバックします。ビームフォーマーはすべてのユーザーからの CSI を使用して、以後のデータ送信用にプリコーディング (空間マッピング) の行列を設定します。
この例では、ユーザーごとに割り当てられた空間ストリームの数とユーザーごとのレート パラメーターが異なる 3 ユーザーの送信に対し、チャネル反転手法を使用します。このシステムの特徴を次の図に示します。
この例は、マルチユーザーの送信波形を生成し、それをマルチユーザーの WINNER II チャネルを介して渡し、各ユーザーの受信した信号を復号化してエラーのビット数を計算します。例では、データを送信する前に、null データ パケット (NDP) 送信を使用してユーザーごとに各種チャネルを調査し、完全なフィードバックの前提でプリコーディング行列を決定します。
サポート パッケージのインストールの確認
'WINNER II Channel Model for Communications Toolbox' サポート パッケージがインストールされているかどうか確認します。
commSupportPackageCheck('CST_WINNER2');
シミュレーションのパラメーターと構成
802.11ac では、最大 8 つの空間ストリームが許可されています。この例では、3 ユーザー向けの 8x8 MIMO 構成が使用されています。また、最初のユーザーが 3 つのストリームをもち、2 番目のユーザーが 1 つのストリーム、3 番目のユーザーが割り当てられた 4 つのストリームをもちます。ユーザーごとに異なるレート パラメーターとペイロード サイズが、送信構成のベクトル パラメーターとして指定されています。
s = rng(10); % Set RNG seed for repeatability % Transmission parameters chanBW = 'CBW80'; % Channel bandwidth numUsers = 3; % Number of users numSTSVec = [3 1 4]; % Number of streams per user userPos = [0 1 2]; % User positions mcsVec = [4 6 8]; % MCS per user: 16QAM, 64QAM, 256QAM apepVec = [520 192 856]; % Payload per user, in bytes chCodingVec = {'BCC','LDPC','LDPC'}; % Channel coding per user % Precoding and equalization parameters precodingType = 'ZF'; % Precoding type; ZF or MMSE snr = 47; % SNR in dB eqMethod = 'ZF'; % Equalization method % Create the multiuser VHT format configuration object numTx = sum(numSTSVec); cfgVHTMU = wlanVHTConfig('ChannelBandwidth',chanBW, ... 'NumUsers',numUsers, ... 'NumTransmitAntennas',numTx, ... 'GroupID',2, ... 'NumSpaceTimeStreams',numSTSVec,... 'UserPositions',userPos, ... 'MCS',mcsVec, ... 'APEPLength',apepVec, ... 'ChannelCoding',chCodingVec);
送信アンテナの数は、使用されているすべての空間時間ストリームの合計になるように設定されます。これは、空間時間ブロック符号化 (STBC) または空間的展開が送信に使用されていることを意味します。
サウンディング (NDP) 構成
プリコーディングでは、ユーザー (受信機) が取得するチャネルを決定するため、チャネル サウンディングが最初に使用されます。このチャネル状態情報が送信機に送り返され、後続のデータ送信に使用されます。これは 2 つの送信機でチャネルが少しずつ変動することを想定しています。マルチユーザー送信では、同じ NDP (null データ パケット) がスケジュールされた各ユーザーに送信されます [2]。
% VHT sounding (NDP) configuration, for same number of streams cfgVHTNDP = wlanVHTConfig('ChannelBandwidth',chanBW, ... 'NumUsers',1, ... 'NumTransmitAntennas',numTx, ... 'GroupID',0, ... 'NumSpaceTimeStreams',sum(numSTSVec),... 'MCS',0, ... 'APEPLength',0);
指定されているストリームの数は、使用されているすべての空間時間ストリームの合計です。これによりすべてのチャネルが調査されます。
% Generate the null data packet, with no data
txNDPSig = wlanWaveformGenerator([],cfgVHTNDP);
NPDSigLen = size(txNDPSig, 1);
屋内オフィス (A1) シナリオの WINNER II チャネル
この例では、WINNER II Channel Model for Communications Toolbox™ の 1 つの comm.WINNER2Channel
System object™ が異なるユーザーに対して 3 つのチャネルをシミュレートするように設定されています。屋内オフィス (A1) の見通し外 (NLOS) シナリオが、各ユーザーに構成されています。固定された電力遅延プロファイルを使用すると、各ユーザーは最大遅延 175 us の 16 パスのフェージング チャネルを使用します。各ユーザーには 802.11ac に適した低可動性も割り当てられます。
アクセス ポイントでは半径 20 cm の等間隔円形アレイ (UCA) を使用します。各ユーザーは、素子間に 5 cm の間隔がある等間隔直線アレイ (ULA) を使用します。また、各ユーザーの受信アンテナの数が、ユーザーに割り当てられる空間時間ストリームの合計と等しいことを前提としています。
% Set up layout parameters for WINNER II channel AA = winner2.AntennaArray('UCA',numTx,0.2); for i = 1:numUsers AA(i+1) = winner2.AntennaArray('ULA',numSTSVec(i),0.05); end STAIdx = 2:(numUsers+1); APIdx = {1}; rndSeed = 12; cfgLayout = winner2.layoutparset(STAIdx,APIdx,numUsers,AA,[],rndSeed); cfgLayout.Pairing = [ones(1,numUsers);2:(numUsers+1)]; % One access point to all users cfgLayout.ScenarioVector = ones(1,numUsers); % A1 scenario for all links cfgLayout.PropagConditionVector = zeros(1,numUsers); % NLOS for i = 1:numUsers % Randomly set velocity for each user v = rand(3,1) - 0.5; cfgLayout.Stations(i+1).Velocity = v/norm(v,'fro'); end % Set up model parameters for WINNER II channel cfgModel = winner2.wimparset; cfgModel.FixedPdpUsed = 'yes'; cfgModel.FixedAnglesUsed = 'yes'; cfgModel.IntraClusterDsUsed = 'no'; cfgModel.RandomSeed = 111; % Repeatability % The maximum velocity for the 3 users is 1m/s. Set up the SampleDensity % field to ensure that the sample rate matches the channel bandwidth. maxMSVelocity = max(cell2mat(cellfun(@(x) norm(x,'fro'), ... {cfgLayout.Stations.Velocity},'UniformOutput',false))); cfgModel.UniformTimeSampling = 'yes'; cfgModel.SampleDensity = round(physconst('LightSpeed')/ ... cfgModel.CenterFrequency/2/(maxMSVelocity/wlanSampleRate(cfgVHTMU))); % Create the WINNER II channel System object WINNERChan = comm.WINNER2Channel(cfgModel,cfgLayout); % Call the info method to check some derived channel parameters chanInfo = info(WINNERChan)
chanInfo = struct with fields: NumLinks: 3 NumBSElements: [8 8 8] NumMSElements: [3 1 4] NumPaths: [16 16 16] SampleRate: [8.0000e+07 8.0000e+07 8.0000e+07] ChannelFilterDelay: [7 7 7] NumSamplesProcessed: 0
各ユーザーのチャネル フィルター遅延は、受信機での補正のために格納されます。実際には、シンボル タイミングの推定が使用されます。送信機では、チャネル フィルターの遅延を調整するためにさらに 10 点のすべてゼロのサンプルが付加されます。
chanDelay = chanInfo.ChannelFilterDelay; numPadZeros = 10; % Set ModelConfig.NumTimeSamples to match the length of the input signal to % avoid warning WINNERChan.ModelConfig.NumTimeSamples = NPDSigLen + numPadZeros; % Sound the WINNER II channel for all users chanOutNDP = WINNERChan([txNDPSig;zeros(numPadZeros,numTx)]); % Add AWGN rxNDPSig = cellfun(@awgn,chanOutNDP, ... num2cell(snr*ones(numUsers,1)),'UniformOutput',false);
チャネル状態情報のフィードバック
各ユーザーは、受信した NDP 信号を使用して独自のチャネルを推定し、送信機に送り返すことができるチャネル状態情報を計算します。この例では、各ユーザーが確認できるチャネルの特異値分解を使用して、CSI フィードバックを計算します。
mat = cell(numUsers,1); for uIdx = 1:numUsers % Compute the feedback matrix based on received signal per user mat{uIdx} = vhtCSIFeedback(rxNDPSig{uIdx}(chanDelay(uIdx)+1:end,:), ... cfgVHTNDP,uIdx,numSTSVec); end
CSI の圧縮または量子化による損失のない完全なフィードバックを想定し、送信機はゼロフォーシング ベースまたは最小平均二乗誤差 (MMSE) ベースのプリコーディング手法を使用して、データを送信するためにステアリング行列を計算します。どちらの手法も対象ユーザーのストリーム間の干渉と他のユーザーによる干渉を取り除こうとします。MMSE ベースの手法は、ゼロフォーシング手法につきもののノイズの増大を回避します。結果として、低 SNR でのパフォーマンスが向上します。
% Pack the per user CSI into a matrix numST = length(mat{1}); % Number of subcarriers steeringMatrix = zeros(numST,sum(numSTSVec),sum(numSTSVec)); % Nst-by-Nt-by-Nsts for uIdx = 1:numUsers stsIdx = sum(numSTSVec(1:uIdx-1))+(1:numSTSVec(uIdx)); steeringMatrix(:,:,stsIdx) = mat{uIdx}; % Nst-by-Nt-by-Nsts end % Zero-forcing or MMSE precoding solution if strcmp(precodingType, 'ZF') delta = 0; % Zero-forcing else delta = (numTx/(10^(snr/10))) * eye(numTx); % MMSE end for i = 1:numST % Channel inversion precoding h = squeeze(steeringMatrix(i,:,:)); steeringMatrix(i,:,:) = h/(h'*h + delta); end % Set the spatial mapping based on the steering matrix cfgVHTMU.SpatialMapping = 'Custom'; cfgVHTMU.SpatialMappingMatrix = permute(steeringMatrix,[1 3 2]);
データ送信
ランダムなビットは、個別ユーザーのペイロードとして使用されます。各ユーザーのデータ ビットを保持するために cell 配列 txDataBits
が使用されます。マルチユーザー送信では、送信時間がすべてのユーザーで同じになるように、個々のユーザー ペイロードがパディングされます。このパディング処理は [ 1 ] の第 9.12.6 節で説明しています。この例では簡略化のため、各ユーザーの PSDU を作成するため、ペイロードがゼロと共にパディングされています。
% Create data sequences, one for each user txDataBits = cell(numUsers,1); psduDataBits = cell(numUsers,1); for uIdx = 1:numUsers % Generate payload for each user txDataBits{uIdx} = randi([0 1],cfgVHTMU.APEPLength(uIdx)*8,1,'int8'); % Pad payload with zeros to form a PSDU psduDataBits{uIdx} = [txDataBits{uIdx}; ... zeros((cfgVHTMU.PSDULength(uIdx)-cfgVHTMU.APEPLength(uIdx))*8,1,'int8')]; end
形式の構成 cfgVHTMU
とステアリング行列を使用して、マルチユーザーの VHT 波形を生成します。
txSig = wlanWaveformGenerator(psduDataBits,cfgVHTMU);
WINNER II チャネル オブジェクトでは、入力信号のサイズはいったんロックされると変更できないため、波形を渡す前に release メソッドを呼び出す必要があります。さらに、チャネルの再起動時に、チャネルの継続性を正確に再現するため、波形の前に NDP を再処理します。各ユーザーの後続処理のため、チャネルの出力の波形部分のみが抽出されます。
release(WINNERChan); % Set ModelConfig.NumTimeSamples to match the total length of NDP plus % waveform and padded zeros WINNERChan.ModelConfig.NumTimeSamples = ... WINNERChan.ModelConfig.NumTimeSamples + length(txSig) + numPadZeros; % Transmit through the WINNER II channel for all users, with 10 all-zero % samples appended to account for channel filter delay chanOut = WINNERChan([txNDPSig; zeros(numPadZeros,numTx); ... txSig; zeros(numPadZeros,numTx)]); % Extract the waveform output for each user chanOut = cellfun(@(x) x(NPDSigLen+numPadZeros+1:end,:),chanOut,'UniformOutput',false); % Add AWGN rxSig = cellfun(@awgn,chanOut, ... num2cell(snr*ones(numUsers,1)),'UniformOutput',false);
ユーザーごとのデータ復元
各ユーザーの受信信号は、個別に処理されます。この例では、簡略化のため、フロントエンドの劣化要因がなく、送信構成が受信機で把握されていることを前提としています。
ユーザー番号は送信の際に復号化される対象ユーザーを指定します。これはユーザー固有の構成オブジェクトのベクトル プロパティにインデックス付けするために使用されます。
% Get field indices from configuration, assumed known at receiver ind = wlanFieldIndices(cfgVHTMU); % Single-user receivers recover payload bits rxDataBits = cell(numUsers,1); scaler = zeros(numUsers,1); spAxes = gobjects(sum(numSTSVec),1); hfig = figure('Name','Per-stream equalized symbol constellation'); for uIdx = 1:numUsers rxNSig = rxSig{uIdx}(chanDelay(uIdx)+1:end, :); % User space-time streams stsU = numSTSVec(uIdx); % Estimate noise power in VHT fields lltf = rxNSig(ind.LLTF(1):ind.LLTF(2),:); demodLLTF = wlanLLTFDemodulate(lltf,chanBW); nVar = helperNoiseEstimate(demodLLTF,chanBW,sum(numSTSVec)); % Perform channel estimation based on VHT-LTF rxVHTLTF = rxNSig(ind.VHTLTF(1):ind.VHTLTF(2),:); demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,chanBW,numSTSVec); chanEst = wlanVHTLTFChannelEstimate(demodVHTLTF,chanBW,numSTSVec); % Recover information bits in VHT Data field rxVHTData = rxNSig(ind.VHTData(1):ind.VHTData(2),:); [rxDataBits{uIdx},~,eqsym] = wlanVHTDataRecover(rxVHTData, ... chanEst,nVar,cfgVHTMU,uIdx, ... 'EqualizationMethod',eqMethod,'PilotPhaseTracking','None', ... 'LDPCDecodingMethod','layered-bp','MaximumLDPCIterationCount',6); % Plot equalized symbols for all streams per user scaler(uIdx) = ceil(max(abs([real(eqsym(:)); imag(eqsym(:))]))); for i = 1:stsU subplot(numUsers,max(numSTSVec),(uIdx-1)*max(numSTSVec)+i); plot(reshape(eqsym(:,:,i),[],1),'.'); axis square spAxes(sum([0 numSTSVec(1:(uIdx-1))])+i) = gca; % Store axes handle title(['User ' num2str(uIdx) ', Stream ' num2str(i)]); grid on; end end % Scale axes for all subplots and scale figure for i = 1:numel(spAxes) xlim(spAxes(i),[-max(scaler) max(scaler)]); ylim(spAxes(i),[-max(scaler) max(scaler)]); end pos = get(hfig,'Position'); set(hfig,'Position',[pos(1)*0.7 pos(2)*0.7 1.3*pos(3) 1.3*pos(4)]);
ストリームごとにイコライズしたシンボル コンスタレーション プロットは、シミュレーション パラメーターを検証し、手法の有効性を示します。送信の終了時に指定されたユーザーごとの認識可能な 16QAM、64QAM、および QPSK のコンスタレーションをメモします。また、個別ユーザーの異なるストリームでの EVM の劣化を観察します。これはチャネル反転手法の代表的な特性です。
復元されたデータ ビットは送信されたペイロード ビットと比較され、ビット エラー レートを決定します。
% Compare recovered bits against per-user APEPLength information bits ber = inf(1, numUsers); for uIdx = 1:numUsers idx = (1:cfgVHTMU.APEPLength(uIdx)*8).'; [~,ber(uIdx)] = biterr(txDataBits{uIdx}(idx),rxDataBits{uIdx}(idx)); disp(['Bit Error Rate for User ' num2str(uIdx) ': ' num2str(ber(uIdx))]); end rng(s); % Restore RNG state
Bit Error Rate for User 1: 0 Bit Error Rate for User 2: 0 Bit Error Rate for User 3: 0.023803
ノイズ分散内のビット エラー数の少なさは、個別のストリームで見られる EVM での変動にもかかわらず、各ユーザーのすべてのストリームのデータの復号化が成功したことを示します。
まとめとその他の調査
この例は、WINNER II フェージング チャネル System object を使用して、802.11ac でマルチユーザー VHT 送信をモデル化する方法を示します。さらに詳しく調査する場合は、送信パラメーター、アンテナ アレイ、チャネル シナリオ、LOS と NLOS の伝播、パス損失のモデル化、およびシャドウイングのモデル化への変更を行ってください。
WLAN Toolbox™ には、3 ユーザーに 3 つの個別の TGac フェージング チャネルを使用するこの例の別バージョンがあります (802.11ac Multi-User MIMO Precoding (WLAN Toolbox))。
付録
この例では、WLAN Toolbox の次の補助関数が使用されています。
参考文献
IEEE® Std 802.11ac-2013 IEEE Standard for Information technology - Telecommunications and information exchange between systems - Local and metropolitan area networks - Specific requirements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications - Amendment 4: Enhancements for Very High Throughput for Operation in Bands below 6 GHz.
Perahia, E., R. Stacey, "Next Generation Wireless LANS: 802.11n and 802.11ac", Cambridge University Press, 2013.
IEEE Std 802.11™-2012 IEEE Standard for Information technology - Telecommunications and information exchange between systems - Local and metropolitan area networks - Specific requirements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications.
IST WINNER II, "WINNER II Channel Models", D1.1.2, Sep. 2007.
Breit, G., H. Sampath, S. Vermani, et al., "TGac Channel Model Addendum", Version 12. IEEE 802.11-09/0308r12, March 2010.