Main Content

nrChannelEstimate

実用的なチャネル推定

R2019b 以降

説明

[h,nVar,info] = nrChannelEstimate(rxGrid,refInd,refSym) は、位置 refInd に基準シンボル refSym を含む基準リソース グリッドを使用して、受信したリソース グリッド rxGrid で実用的なチャネル推定を実行します。この関数は、チャネル推定 h、ノイズ分散推定 nVar、および追加情報 info を返します。

[h,nVar,info] = nrChannelEstimate(rxGrid,refGrid) は、事前定義された基準リソース グリッド refGrid を指定します。

[h,nVar,info] = nrChannelEstimate(carrier,___) は、前述のいずれかの構文からの入力引数に加えて、特定の直交周波数分割多重 (OFDM) numerology のキャリア構成パラメーターを指定します。この関数は、carrier 入力の CyclicPrefix プロパティのみを使用します。

[h,nVar,info] = nrChannelEstimate(___,Name,Value) は、前述のいずれかの構文の入力引数に加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。

すべて折りたたむ

物理レイヤーのセル ID 番号 42 の物理ブロードキャスト チャネル (PBCH) 復調基準信号 (DM-RS) シンボルを生成します。DM-RS スクランブリング初期化の時間依存部分は 0 です。

ncellid = 42;
ibar_SSB = 0;
dmrsSym = nrPBCHDMRS(ncellid,ibar_SSB);

PBCH DM-RS のリソース エレメント インデックスを取得します。

dmrsInd = nrPBCHDMRSIndices(ncellid);

生成された DM-RS シンボルを含むリソース グリッドを作成します。

nrb = 20;
scs = 15;
carrier = nrCarrierConfig('NSizeGrid',nrb,'SubcarrierSpacing',scs);
nTxAnts = 1;
txGrid = nrResourceGrid(carrier,nTxAnts);
txGrid(dmrsInd) = dmrsSym;

指定された FFT 長とサイクリック プレフィックス長を使用してリソース グリッドを変調します。

ofdmInfo = nrOFDMInfo(carrier);
txWaveform = nrOFDMModulate(carrier,txGrid);

指定されたプロパティを使用して TDL-C チャネル モデルを作成します。

channel = nrTDLChannel;
channel.NumReceiveAntennas = 1;
channel.SampleRate = ofdmInfo.SampleRate;
channel.DelayProfile = 'TDL-C';
channel.DelaySpread = 100e-9;
channel.MaximumDopplerShift = 20;

最大チャネル遅延を取得します。

chInfo = info(channel);
maxChDelay = chInfo.MaximumChannelDelay;

チャネルから遅延サンプルをフラッシュするために、遅延サンプルの最大数と送信アンテナ数に対応するゼロを送信波形の末尾に追加します。パディングされた波形を TDL-C チャネル モデルを経由して送信します。

[rxWaveform,pathGains] = channel([txWaveform; zeros(maxChDelay,nTxAnts)]);

DM-RS シンボルを基準シンボルとして使用して、送信のタイミング オフセットを推定します。基準シンボルの OFDM 変調は、初期スロット番号 0 を使用します。

initialSlot = 0;
offset = nrTimingEstimate(carrier,rxWaveform,txGrid);

推定されたタイミング オフセットに従って受信波形を同期します。

rxWaveform = rxWaveform(1+offset:end,:);

復調され同期された受信波形を含む受信リソース グリッドを作成します。

cpFraction = 0.55;
rxGrid = nrOFDMDemodulate(carrier,rxWaveform,'CyclicPrefixFraction',cpFraction);

実用的なチャネル推定を取得します。

H = nrChannelEstimate(rxGrid,dmrsInd,dmrsSym);

完全なチャネル推定を取得します。

pathFilters = getPathFilters(channel);
H_ideal = nrPerfectChannelEstimate(carrier,pathGains,pathFilters,offset);

実用的なチャネル推定と完全なチャネル推定を比較します。

figure;
subplot(1,2,1);
imagesc(abs(H));
xlabel('OFDM Symbol');
ylabel('Subcarrier');
title('Practical Estimate Magnitude');
subplot(1,2,2);
imagesc(abs(H_ideal));
xlabel('OFDM Symbol');
ylabel('Subcarrier');
title('Perfect Estimate Magnitude');

Figure contains 2 axes objects. Axes object 1 with title Practical Estimate Magnitude, xlabel OFDM Symbol, ylabel Subcarrier contains an object of type image. Axes object 2 with title Perfect Estimate Magnitude, xlabel OFDM Symbol, ylabel Subcarrier contains an object of type image.

入力引数

すべて折りたたむ

受信したリソース グリッド。K×L×R の複素数配列として指定します。

  • K は NRB × 12 に等しいサブキャリアの数。ここで、NRB は 1 ~ 275 の範囲のリソース ブロックの数です。

  • L は、スロット内または基準グリッド内の OFDM シンボルの数。

    • 基準シンボル refSymnrChannelEstimate を呼び出す場合、L は、拡張サイクリック プレフィックスでは 12、ノーマル サイクリック プレフィックスでは 14 にします。名前と値のペアの引数 'CyclicPrefix' を使用して、サイクリック プレフィックス長を設定します。

    • 基準リソース グリッド refGridnrChannelEstimate を呼び出す場合、L は基準グリッド内の OFDM シンボルの数である N と等しくなければなりません。

  • R は受信アンテナの数。

データ型: single | double
複素数のサポート: あり

基準シンボルのインデックス。整数行列として指定します。行の数はリソース エレメントの数と同じです。すべてのインデックスを 1 つの列で指定することも、複数の列に分散させることもできます。refIndrefSym の要素数は同じでなければなりませんが、それらの次元は異なる場合があります。この関数は、refIndrefSym を基準グリッドにマッピングする前に、refGrid(refInd(:)) = refSym(:) のようにそれらを列ベクトルに形状変更します。

refInd の要素は、K×L×P のリソース配列をアドレス指定する 1 ベースの線形インデックスです。

  • K は NRB × 12 に等しいサブキャリアの数。ここで、NRB は 1 ~ 275 の範囲のリソース ブロックの数です。K は rxGrid の最初の次元と等しくなければなりません。

  • L は、スロット内の OFDM シンボルの数。L は、拡張サイクリック プレフィックスでは 12、ノーマル サイクリック プレフィックスでは 14 にします。名前と値のペアの引数 'CyclicPrefix' を使用して、サイクリック プレフィックス長を設定します。

  • P は、refInd の値の範囲から推定される基準信号のポートの数。

データ型: double

基準シンボル。複素行列として指定します。行の数はリソース エレメントの数と同じです。すべてのシンボルを 1 つの列で指定することも、複数の列に分散させることもできます。refIndrefSym の要素数は同じでなければなりませんが、それらの次元は異なる場合があります。この関数は、refIndrefSym を基準グリッドにマッピングする前に、refGrid(refInd(:)) = refSym(:) のようにそれらを列ベクトルに形状変更します。

データ型: single | double
複素数のサポート: あり

事前定義された基準グリッド。K×N×P の複素数配列として指定します。refGrid は複数のスロットにまたがることができます。

  • K は NRB × 12 に等しいサブキャリアの数。ここで、NRB は 1 ~ 275 の範囲のリソース ブロックの数です。

  • N は、基準グリッド内の OFDM シンボルの数。

  • P は基準信号のポートの数。

データ型: single | double
複素数のサポート: あり

特定の OFDM numerology のキャリア構成パラメーター。nrCarrierConfig オブジェクトとして指定します。関数は、この入力の CyclicPrefix プロパティのみを使用します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は関係ありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: 'CyclicPrefix','extended' は拡張サイクリック プレフィックスの長さを指定します。

サイクリック プレフィックス長。'CyclicPrefix' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'normal' — この値を使用して、ノーマル サイクリック プレフィックスを指定します。このオプションは、スロット内の 14 個の OFDM シンボルに対応します。

  • 'extended' — この値を使用して、拡張サイクリック プレフィックスを指定します。このオプションは、スロット内の 12 個の OFDM シンボルに対応します。TS 38.211 の Section 4.2 で規定されている numerology では、拡張サイクリック プレフィックス長が 60 kHz のサブキャリア間隔にのみ適用されます。

メモ

carrier 入力を指定する場合は、carrier 入力の CyclicPrefix プロパティを使用して、サイクリック プレフィックス長を指定します。この名前と値のペアの引数を carrier 入力と一緒に使用することはできません。

データ型: char | string

基準信号のコード領域多重化 (CDM) 配置。'CDMLengths' と非負の整数からなる 1 行 2 列の配列 [FD TD] で構成されるコンマ区切りのペアとして指定します。配列要素の FD と TD はそれぞれ、周波数領域での CDM 逆拡散の長さ (FD-CDM) と時間領域での CDM 逆拡散の長さ (TD-CDM) を指定します。要素の値が 1 である場合、CDM なしを指定したことになります。

例: 'CDMLengths',[2 1] は、FD-CDM2 および TD-CDM なしを指定します。

例: 'CDMLengths',[1 1] は、直交逆拡散なしを指定します。

データ型: double

内挿前の平均化ウィンドウ。'AveragingWindow' と非負の奇数の整数からなる 1 行 2 列の配列 [F T] で構成されるコンマ区切りのペアとして指定します。配列要素の F と T は、関数が内挿前に平均化を実行する周波数領域と時間領域においてそれぞれ隣接する基準シンボルの数を指定します。F または T がゼロの場合、関数は、ノイズ分散推定 nVar に基づいて、推定された S/N 比 (SNR) から平均値を決定します。

データ型: double

出力引数

すべて折りたたむ

実用的なチャネル推定。K×L×R×P の複素数配列として返されます。K×L×R は、受信したリソース グリッド rxGrid の形状です。P は基準信号のポートの数です。

hrxGrid からデータ型を継承します。

データ型: double | single

ノイズ分散推定。非負のスカラーとして返されます。nVar は、受信した基準シンボルで測定された加法性ホワイト ガウス ノイズの分散です。

データ型: double

追加情報。フィールド AveragingWindow をもつ構造体として返されます。

パラメーター フィールド説明
AveragingWindow

1 行 2 列の配列

内挿前の平均化ウィンドウ。1 行 2 列の配列 [F T] として返されます。配列要素の F と T は、関数が内挿前に平均化を実行した周波数領域と時間領域においてそれぞれ隣接する基準シンボルの数を示します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2019b で導入

すべて展開する