再構成可能なインテリジェント サーフェス (RIS) の概要
5G 無線システムの展開に伴い、産業界は 6G 無線ネットワークなどの 5G 以降のシステムの検討を始めています。結局のところ、より高いデータ レートの追求は終わることがありません。ここ数年、再構成可能なインテリジェント サーフェス (RIS) は、6G システムを実現するための重要な基盤技術として台頭しています。この例では、Phased Array System Toolbox™ を使ってこのようなシステムをモデル化する方法を示します。この例の焦点は、決定論的チャネル モデルを使って RIS をモデル化することです。確率的な RIS チャネル モデルについては、CDL チャネルを使用した再構成可能なインテリジェント サーフェスのモデル化 (5G Toolbox)の例を参照してください。
はじめに
4G システムの登場以降、アンテナ アレイは基地局とユーザー端末 (UE) の両方で重要な要素となっています。5G システムで採用されている mmWave 帯を使用すると、限られた空間に (素子数の観点で) より大きなアレイを配置することが可能になります。これにより、これらのアレイが提供するビームフォーミング ゲインが mmWave 帯における大きな伝搬損失を補償するのに役立ち、目的のデータ レートと容量を達成できます。
一方で、mmWave 帯への移行は、サブ 6 GHz 帯の散乱体が多い環境とは対照的に、5G 以降の無線システムが見通し線 (LOS) リンクにさらに依存することを意味します。したがって、LOS リンクを確立できない場合、システムのパフォーマンスは低下します。このため、エンジニアは伝搬環境を改善する方法がないかを模索してます。この追求の過程で、再構成可能なインテリジェント サーフェス (RIS) の技術が、そのような目的に適した候補として登場しました。
RIS (インテリジェント反射サーフェス (IRS) とも呼ばれる) は、多数の素子で構成されるパッシブな平面アレイです。ここで重要なのは、このサーフェスがパッシブである点です。サーフェスに無線周波数 (RF) 回路を含める必要がないため、コストを低く抑えることができます。ただし、各素子は反射信号の位相を調整できるため、コントローラーが各素子の位相を調整することで反射信号をコヒーレントに組み合わせることができます。現在、このようなサーフェスを構成するためのアプローチは 2 つあります [1]。最初のアプローチは、各素子に位相シフターを備えたリフレクトアレイを使用することです。これは、従来のパッシブ フェーズド アレイと非常によく似た動作をします。別のアプローチは、メタサーフェスを使ってサーフェスを構築することです。メタ マテリアルの特性を変更することにより、特定の素子からの反射信号を変更できます。リフレクトアレイと比較すると、メタサーフェスの素子は互いにより近接して配置できるため、開口全体をよりコンパクトにできます。
次のセクションでは、半波長間隔で配置された無指向性素子をもつ 10 行 20 列の RIS を作成します。搬送波周波数は 28 GHz に設定されます。必要に応じて、カスタムの素子パターンを使用することも可能です。RIS サーフェスの電磁解析を実行する方法の詳細については、Electromagnetic Analysis of Reconfigurable Intelligent Surface (Antenna Toolbox)の例を参照してください。
fc = 28e9; c = physconst('lightspeed'); lambda = c/fc; rng(2023); % Setup surface Nr = 10; Nc = 20; dr = 0.5*lambda; dc = 0.5*lambda; % construct surface ris = phased.RectangularRIS('Size',[Nr Nc],'Spacing',[dr dc],'UnitCell',phased.IsotropicAntennaElement)
ris =
phased.RectangularRIS with properties:
UnitCell: [1×1 phased.IsotropicAntennaElement]
Size: [10 20]
Spacing: [0.0054 0.0054]
シミュレーション シナリオ
RIS を使用する利点を示すために、以下に示すシーン [2] を設定します。一般性を損なうことなく、基地局、RIS、および UE がすべて静止しており、xy 平面上にあると仮定します。基地局は原点にあり、RIS は x 軸に沿って dbr メートル離れた位置にあります。UE は x 軸に沿って du メートル、y 軸に沿って 5 メートル離れた位置にあります。dbr と du の両方を 50 に設定します。

% scene dbr = 50; pos_ap = [0;0;0]; pos_ris = [dbr;0;0]; v = zeros(3,1); du = 50; dv = -5; pos_ue = [du;dv;0]; % compute the range and angle of the RIS from the base station and the UE [r_ap_ris,ang_ap_ris] = rangeangle(pos_ap,pos_ris); [r_ue_ris,ang_ue_ris] = rangeangle(pos_ue,pos_ris);
簡略化のため、この例では単入力単出力 (SISO) システム、つまり 1 本の送信アンテナと 1 本の受信アンテナを使用します。送信パワーは 50 mW、受信機ノイズ パワーは -60 dBm と仮定します。信号は、サンプル レート 10 MHz の BPSK 信号です。
% signal fs = 10e6; x = 2*randi(2,[100 1])-3; tx = phased.Transmitter('PeakPower',50e-3,'Gain',0); xt = tx(x); N0dB = -60-30; % channel chanAPToRIS = phased.FreeSpace('SampleRate',fs,'PropagationSpeed',c,'MaximumDistanceSource','Property','MaximumDistance',500); chanRISToUE = phased.FreeSpace('SampleRate',fs,'PropagationSpeed',c,'MaximumDistanceSource','Property','MaximumDistance',500); chanAPToUE = phased.FreeSpace('SampleRate',fs,'PropagationSpeed',c,'MaximumDistanceSource','Property','MaximumDistance',500);
RIS 支援通信シミュレーション
まず、基準として直接パスの SNR を計算します。
% LOS path propagation
yref = chanAPToUE(xt,pos_ap,pos_ue,v,v);
SNRref = pow2db(bandpower(yref))-N0dBSNRref = 18.5972
ここで、RIS を環境に追加します。その結果、信号は LOS パスと RIS 経由の反射パスの両方を通って受信機に到達します。まず、位相制御が最適でない場合、つまり RIS の各素子が単に信号を反射する場合を確認します。
risreflector = phased.RISReflector('Surface',ris,'OperatingFrequency',fc); rcoeff_ris = ones(Nr*Nc,1); x_ris_in = chanAPToRIS(xt,pos_ap,pos_ris,v,v); x_ris_out = risreflector(x_ris_in,ang_ap_ris,ang_ue_ris,rcoeff_ris); ylosris = chanRISToUE(x_ris_out,pos_ris,pos_ue,v,v)+chanAPToUE(xt,pos_ap,pos_ue,v,v); SNRlosris = pow2db(bandpower(ylosris))-N0dB
SNRlosris = 18.6079
SNR にほとんど改善がない点に注意してください。この結果は少し意外に思えるかもしれませんが、位相制御が適切でない場合、RIS からの反射信号が直接パスの信号を打ち消す可能性があることを示しています。したがって、RIS の各素子の位相を制御することが重要です。直感的に想像できるかもしれませんが、RIS にとって最適な位相は、すべての素子からの反射がコヒーレントに組み合わされ、それらが直接パスの信号と同じ位相で受信機に到達するようにすることです。こうすることで、直接パスと反射パスの信号もコヒーレントに組み合わされます。それを実現するには、チャネル情報が必要です。チャネル推定には多くのアルゴリズムを利用できますが、それについてはこの例で扱いません。この例のシナリオがシンプルであることを踏まえ、次のコード セクションでチャネルを導出し、RIS の最適な位相を使ってシミュレーションを再実行します。
% channel estimation stv = phased.SteeringVector('SensorArray',ris); r_ue_ap = norm(pos_ap-pos_ue); hd = db2mag(-fspl(r_ue_ap,lambda))*exp(1i*2*pi*r_ue_ap/c); g = db2mag(-fspl(r_ap_ris,lambda))*exp(1i*2*pi*r_ap_ris/c)*stv(fc,ang_ap_ris); hr = db2mag(-fspl(r_ue_ris,lambda))*exp(1i*2*pi*r_ue_ris/c)*stv(fc,ang_ue_ris); % compute optimal phase control rcoeff_ris = exp(1i*(angle(hd)-angle(hr)-angle(g))); % rerun simulation x_ris_in = chanAPToRIS(xt,pos_ap,pos_ris,v,v); x_ris_out = risreflector(x_ris_in,ang_ap_ris,ang_ue_ris,rcoeff_ris); ylosriso = chanRISToUE(x_ris_out,pos_ris,pos_ue,v,v)+chanAPToUE(xt,pos_ap,pos_ue,v,v); SNRlosriso = pow2db(bandpower(ylosriso))-N0dB
SNRlosriso = 28.4933
これで、受信 SNR が大幅に改善されました。
LOS なしの RIS 支援通信
RIS を配置することで、反射信号を直接パスの信号に整合させて SNR を向上させることができますが、LOS リンクが利用できない場合に RIS の利点は非常に明確になります。都市部の無線通信環境では、このようなケースは珍しくなく、移動中のユーザーの動きによって既存の LOS リンクが消失する場合もあります。次のセクションでは、受信機から直接リンクを削除することにより、このようなシナリオをシミュレーションします。
rcoeff_ris = exp(1i*(-angle(hr)-angle(g))); x_ris_in = chanAPToRIS(xt,pos_ap,pos_ris,v,v); x_ris_out = risreflector(x_ris_in,ang_ap_ris,ang_ue_ris,rcoeff_ris); yriso = chanRISToUE(x_ris_out,pos_ris,pos_ue,v,v); SNRriso = pow2db(bandpower(yriso))-N0dB
SNRriso = 27.9490
結果からわかるように、リンク品質の低下はわずか 0.5 dB にとどまっています。これは、LOS パスがない場合でも RIS が通信リンクを維持できることを意味します。リンクを周期的に推定し、最適な位相制御を適用することで、ユーザーの移動によるリンク品質の低下も緩和できます。
この結果を踏まえ、RIS のサイズがリンク品質にどのように影響するかを確認します。以下の曲線は、RIS のサイズに応じて達成可能なデータ レートがどのように変化するかを示しています。ここでは、直接パスのデータ レートを基準として使用しています。プロットでは、注目すべき点が 2 つあります。
全体のリンク品質を改善させるために、RIS は一定以上のサイズである必要があります。
RIS の素子数が増加するほど、直接パスの有無にかかわらずリンク品質を維持できるようになります。これは、RIS のサイズが大きくなるほど、ゲインが大きくなり、LOS リンクによるゲインの重要性が低下するためです。
Ncparam = 5:5:50; [SNRlosris_param,SNRris_param,SNRlos_param] = helperRISSimulation(xt,Ncparam,chanAPToUE,chanAPToRIS,chanRISToUE,pos_ap,pos_ris,pos_ue,v,fc,c,SNRref); plot(Ncparam.'*10,log2(1+db2pow([SNRlosris_param;SNRris_param;SNRlos_param]))); legend('LOS+RIS','RIS','LOS'); xlabel('Number of Elements'); ylabel('Data Rate (bps/Hz)')

RIS の配置
RIS の利点を理解できたので、次のセクションでは RIS の配置戦略を評価します。シミュレーションでは、x 軸に沿ったさまざまな位置に RIS を配置し、その結果として得られる UE の SNR をプロットします。
dbrparam = 5:5:50; SNRris_param = helperRISPlacementSimulation(xt,dbrparam,risreflector,chanAPToUE,chanAPToRIS,chanRISToUE,pos_ap,pos_ue,v,fc,c); plot(dbrparam,SNRris_param); xlabel('RIS Position along X (m)'); ylabel('SNR (dB)')

結果では、RIS の利点を最大化するために、RIS を基地局の近く (曲線の左側) か移動体の近く (曲線の右側) に配置する必要があることが示されています。
まとめ
この例では、再構成可能なインテリジェント サーフェスの基本概念を紹介し、将来の無線システムにおける伝搬環境の改善にどのように使用できるかを示しました。
参考文献
[1] Mohamed A. Elmossallamy, Hongliang Zhang, Lingyang Song, Karim Seddik, Zhu Han, and Geoffrey Li, Reconfigurable Intelligent Surfaces for Wireless Communications: Principles, Challenges and Opportunities, IEEE Trans. on Cognitive Communications and Networking, Vol. 6, No. 3, September 2020
[2] Qingqing Wu, Shuowen Zhang, Beixiong Zheng, Changsheng You, and Rui Zhang, Intelligent Reflecting Surface-Aided Wireless Communications: A Tutorial, IEEE Trans. on Communications, Vol. 9, No. 5, May 2021
補助関数
RIS を使って受信機の SNR をシミュレーションします。
function [SNRlosriso,SNRriso,SNRlos] = helperRISSimulation(xt,Ncparam,chanlos,chanap2ris,chanris2ue,pos_ap,pos_ris,pos_ue,v,fc,c,SNRref) lambda = c/fc; Nr = 10; dr = 0.5*lambda; dc = 0.5*lambda; N0dB = -90; Nparam = numel(Ncparam); SNRlosriso = zeros(1,Nparam); SNRriso = zeros(1,Nparam); for m = 1:Nparam release(chanap2ris); release(chanlos); release(chanris2ue); ris = phased.RectangularRIS('Size',[Nr Ncparam(m)],'Spacing',[dr dc],... 'UnitCell',phased.IsotropicAntennaElement); risreflector = phased.RISReflector('Surface',ris,'OperatingFrequency',fc); [r_ap_ris,ang_ap_ris] = rangeangle(pos_ap,pos_ris); [r_ue_ris,ang_ue_ris] = rangeangle(pos_ue,pos_ris); % channel estimation stv = phased.SteeringVector('SensorArray',ris); r_ue_ap = norm(pos_ap-pos_ue); hd = db2mag(-fspl(r_ue_ap,lambda))*exp(1i*2*pi*r_ue_ap/c); g = db2mag(-fspl(r_ap_ris,lambda))*exp(1i*2*pi*r_ap_ris/c)*stv(fc,ang_ap_ris); hr = db2mag(-fspl(r_ue_ris,lambda))*exp(1i*2*pi*r_ue_ris/c)*stv(fc,ang_ue_ris); rcoeff_losriso = exp(1i*(angle(hd)-angle(hr)-angle(g))); ylosriso = chanris2ue(risreflector(chanap2ris(xt,pos_ap,pos_ris,v,v),ang_ap_ris,ang_ue_ris,rcoeff_losriso),pos_ris,pos_ue,v,v)+... chanlos(xt,pos_ap,pos_ue,v,v); SNRlosriso(m) = pow2db(bandpower(ylosriso))-N0dB; rcoeff_ris = exp(1i*(-angle(hr)-angle(g))); yriso = chanris2ue(risreflector(chanap2ris(xt,pos_ap,pos_ris,v,v),ang_ap_ris,ang_ue_ris,rcoeff_ris),pos_ris,pos_ue,v,v); SNRriso(m) = pow2db(bandpower(yriso))-N0dB; end SNRlos = SNRref*ones(1,Nparam); end
RIS の位置を変化させた場合の SNR への影響をシミュレーションします。
function SNRris = helperRISPlacementSimulation(xt,drparam,risreflector,chanlos,chanap2ris,chanris2ue,pos_ap,pos_ue,v,fc,c) lambda = c/fc; stv = phased.SteeringVector('SensorArray',risreflector.Surface); N0dB = -90; Nparam = numel(drparam); SNRris = zeros(1,Nparam); for m = 1:Nparam release(chanap2ris); release(chanlos); release(chanris2ue); pos_ris = [drparam(m);0;0]; [r_ap_ris,ang_ap_ris] = rangeangle(pos_ap,pos_ris); [r_ue_ris,ang_ue_ris] = rangeangle(pos_ue,pos_ris); % channel estimation g = db2mag(-fspl(r_ap_ris,lambda))*exp(1i*2*pi*r_ap_ris/c)*stv(fc,ang_ap_ris); hr = db2mag(-fspl(r_ue_ris,lambda))*exp(1i*2*pi*r_ue_ris/c)*stv(fc,ang_ue_ris); rcoeff_ris = exp(1i*(-angle(hr)-angle(g))); yriso = chanris2ue(risreflector(chanap2ris(xt,pos_ap,pos_ris,v,v),ang_ap_ris,ang_ue_ris,rcoeff_ris),pos_ris,pos_ue,v,v); SNRris(m) = pow2db(bandpower(yriso))-N0dB; end end