メインコンテンツ

comm.DPDCoefficientEstimator

R2026b

デジタル プリディストーションに用いるメモリ多項式の係数の推定

説明

comm.DPDCoefficientEstimator System object™ は、パワー アンプのベースバンド等価入力とベースバンド等価出力を指定すると、非線形パワー アンプのデジタル プリディストーション (DPD) に用いるメモリ多項式の係数を推定します。詳細については、デジタル プリディストーションと推定器の多項式の次数とメモリ深さの最適化を参照してください。

プリディストーション係数を計算するには:

  1. comm.DPDCoefficientEstimator オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

estimator = comm.DPDCoefficientEstimator は、Digital Predistortion Coefficient Estimator の System object を作成して、非線形パワー アンプのデジタル プリディストーション (DPD) に用いるメモリ多項式の係数を推定します。

estimator = comm.DPDCoefficientEstimator(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、comm.DPDCoefficientEstimator('PolynomialType','Cross-term memory polynomial') は、交差項のあるメモリ多項式の係数を推定するようにプリディストーション係数推定器 System object を構成します。各プロパティ名を引用符で囲みます。

例

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

dB 単位の目的の振幅ゲイン。スカラーとして指定します。このプロパティ値は、補正された増幅器出力での目的の信号ゲインを表します。

DPD では、線形化に加えて、DPD 入力からパワー アンプ出力までの総合ゲインをできる限り想定ゲインに近づける必要があります。したがって、このプロパティは、PA 特徴付けの際に取得したパワー アンプの想定ゲインに基づいて設定されます。

調整可能: Yes

データ型: double

プリディストーションに使用される多項式タイプ。以下のいずれかの値として指定します。

  • 'Memory polynomial' — 交差項のないメモリ多項式を使用してプリディストーション係数を計算します。

  • 'Cross-term memory polynomial' — 交差項のあるメモリ多項式を使用してプリディストーション係数を計算します。

詳細については、デジタル プリディストーションを参照してください。

メモリ多項式の次数。正の整数として指定します。

データ型: double

サンプル単位のメモリ多項式の深さ。正の整数として指定します。

データ型: double

イコライズに使用される適応アルゴリズム。以下のいずれかの値として指定します。

  • 'Least squares' — 最小二乗アルゴリズムを使用してメモリ多項式の係数を推定します。

  • 'Recursive least squares' — 再帰的最小二乗アルゴリズムを使用してメモリ多項式の係数を推定します。

アルゴリズムの参考資料は、[1]および[2]にリストされている文献を参照してください。

データ型: char | string

再帰的最小二乗アルゴリズムで使用される忘却係数。範囲 (0, 1] のスカラーとして指定します。忘却係数を小さくすると、収束時間が短縮されますが、出力推定の安定性が低下します。

調整可能: Yes

依存関係

このプロパティを有効にするには、Algorithm を 'Recursive least squares' に設定します。

データ型: double

再帰的最小二乗アルゴリズムの係数の初期推定値。行列として指定します。

  • InitialCoefficientEstimate が空行列の場合、再帰的最小二乗アルゴリズムの係数の初期推定値は、恒等関数であるメモリ多項式に対応するように自動的に選択されるため、出力は入力と等しくなります。

  • InitialCoefficientEstimate が空でない行列の場合、行数は MemoryDepth と等しくなければなりません。

    • PolynomialType が 'Memory polynomial' の場合、列数はメモリ多項式の次数です。

    • PolynomialType が 'Cross-term memory polynomial' の場合、列数は m(n-1)+1 と等しくなければなりません。m は多項式のメモリの深さ、n はメモリ多項式の次数です。

詳細については、デジタル プリディストーションを参照してください。

依存関係

このプロパティを有効にするには、Algorithm を 'Recursive least squares' に設定します。

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

使用法

説明

coef = estimator(paIn,paOut) は、メモリ多項式を使用して複素ベースバンド信号をプリディストーションすることでパワー アンプの非線形性を補正するために comm.DPD System object によって使用されるメモリ多項式の係数を推定します。

例

入力引数

すべて展開する

パワー アンプのベースバンド等価入力。列ベクトルとして指定します。

このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされた後は、シミュレーション中に信号のフレーム サイズ (行数) を変更できますが、チャネル数 (列数) は一定のままでなければなりません。詳細については、Variable-Size Signals in Codeを参照してください。

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

パワー アンプのベースバンド等価出力。paIn と同じ長さの列ベクトルとして指定します。

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

出力引数

すべて展開する

メモリ多項式の係数。行列として返されます。詳細については、デジタル プリディストーションを参照してください。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

例

すべて折りたたむ

デジタル プリディストーション (DPD) をパワー アンプの入力信号に適用します。DPD Coefficient Estimator の System object は、パワー アンプの入出力信号を含む取得した信号を使用して、プリディストーション係数行列を決定します。

パワー アンプの入出力信号を含むファイルを読み込みます。

load('commpowamp_dpd_data.mat','PA_input','PA_output')

DPD Coefficient Estimator の System object と Raised Cosine Transmit Filter の System object を生成します。

estimator = comm.DPDCoefficientEstimator( ...
    'DesiredAmplitudeGaindB',10, ...
    'PolynomialType','Memory polynomial', ...
    'Degree',5,'MemoryDepth',3,'Algorithm','Least squares');

rctFilt = comm.RaisedCosineTransmitFilter('OutputSamplesPerSymbol',2);

デジタル プリディストーションのメモリ多項式の係数を推定します。

coef = estimator(PA_input,PA_output);

係数行列に関して、coef (DPD 係数推定器から出力された推定係数) を使用して DPD System object を生成します。

dpd = comm.DPD('PolynomialType','Memory polynomial', ...
    'Coefficients',coef);

2000 個のランダム シンボルを生成して、信号に 16-QAM 変調を適用します。変調信号にレイズド コサイン送信フィルター処理を適用します。

s = randi([0,15],2000,1);
u = qammod(s,16);
x = rctFilt(u);

データにデジタル プリディストーションを適用します。DPD System object は、パワー アンプへの入力として提供するためのプリディストーションされた信号を返します。

y = dpd(x);

この例では、ランダムに生成された係数行列を使用して、DPD メモリ多項式に用いる係数行列の形式を示します。この例には次のステップが含まれます。

  • メモリの深さが 3 に設定され、多項式の次数が 5 に設定された、ランダムな値から成るメモリ多項式の係数行列を使用して構成されたデジタル プリディストーター System object を作成します。

  • メモリ多項式の係数行列を使用して信号をプリディストーションします。

  • 1 つのプリディストーションされた出力要素を、メモリ多項式の係数行列を使用して手動で計算された対応する入力要素と比較します。

3 行 5 列の零点の係数行列を生成し、coef(1,1) 要素を 1 に設定することで、出力が入力と等しいプリディストーターを表す係数行列を作成します。係数行列に小さなランダム複素非線形項を追加します。

coef = zeros(3,5);
coef(1,1) = 1;
coef = coef + 0.01*(randn(3,5)+1j*randn(3,5));

メモリ多項式の係数行列 coef を使用して DPD System object を作成します。

dpd = comm.DPD( ...
    'PolynomialType','Memory polynomial', ...
    'Coefficients',coef);

入力信号を生成し、dpd System object を使用してプリディストーションします。

x = randn(20,1) + 1j*randn(20,1);
y = dpd(x);

手動で歪みの生じた出力を入力の対応する出力要素 y(18) と比較して、その特定の出力値を計算するために係数行列がどのように使用されているかを確認します。

u = x(18:-1:(18-3+1));
isequal(y(18),sum(sum(coef .* ...
    [u u.*abs(u) u.*(abs(u).^2) u .* (abs(u).^3) u .* (abs(u).^4)])))
ans = logical
   1

この例では、ランダムに生成された係数行列を使用して、DPD メモリ多項式に用いる係数行列の形式を示します。この例には次のステップが含まれます。

  • メモリの深さが 3 に設定され、多項式の次数が 5 に設定された、ランダムな値からなる交差項メモリ多項式の係数行列を使用して構成されたデジタル プリディストーター System object を作成します。

  • 交差項メモリ多項式の係数行列を使用して信号をプリディストーションします。

  • 1 つのプリディストーションされた出力要素を、交差項メモリ多項式の係数行列を使用して手動で計算された対応する入力要素と比較します。

3 行 5 列の零点の係数行列を生成し、coef(1,1) 要素を 1 に設定することで、出力が入力と等しいプリディストーターを表す係数行列を作成します。係数行列に小さなランダム複素非線形項を追加します。

coef = zeros(3,3*(5-1)+1);
coef(1,1) = 1;
coef = coef + 0.01*(randn(3,13) + 1j*randn(3,13));

交差項メモリ多項式の係数行列 coef を使用して DPD System object を作成します。

dpd = comm.DPD( ...
    'PolynomialType','Cross-term memory polynomial', ...
    'Coefficients',coef);

入力信号を生成し、dpd System object を使用してプリディストーションします。

x = randn(20,1) + 1j*randn(20,1);
y = dpd(x);

手動で歪みの生じた出力を入力の対応する出力要素 y(18) と比較して、その特定の出力値を計算するために係数行列がどのように使用されているかを確認します。

u = x(18:-1:(18-3+1));
isequal(y(18),sum(sum(coef .* ...
    [u u*abs(u.') u*(abs(u.').^2) u*(abs(u.').^3) u*(abs(u.').^4)])))
ans = logical
   0

アルゴリズム

すべて展開する

参照

[1] Morgan, Dennis R., Zhengxiang Ma, Jaehyeong Kim, Michael G. Zierdt, and John Pastalan. "A Generalized Memory Polynomial Model for Digital Predistortion of Power Amplifiers." IEEE® Transactions on Signal Processing. Vol. 54, Number 10, October 2006, pp. 3852–3860.

[2] M. Schetzen. The Volterra and Wiener Theories of Nonlinear Systems. New York: Wiley, 1980.

拡張機能

すべて展開する

バージョン履歴

R2019a で導入