Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.DPD

デジタル プリディストーター

説明

comm.DPD System object™ は、メモリ多項式を使用して複素ベースバンド信号にデジタル プリディストーション (DPD) を適用し、パワー アンプの非線形性を補正します。詳細については、デジタル プリディストーションを参照してください。

信号をプリディストーションするには:

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

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

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

作成

説明

dpd = comm.DPD は、デジタル プリディストーター System object を作成して信号をプリディストーションします。

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

プロパティ

すべて展開する

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

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

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

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

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

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

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

メモリ多項式の係数。行列として指定します。行列の行数は、メモリ多項式のメモリの深さと等しくなければなりません。

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

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

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

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

使用法

説明

out = dpd(in) は、メモリ多項式を使用して複素ベースバンド信号をプリディストーションし、パワー アンプの非線形性を補正します。

入力引数

すべて展開する

入力ベースバンド信号。列ベクトルとして指定します。

データ型: 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
   1

詳細

すべて展開する

参照

[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 で導入