Main Content

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

dfe

(削除予定) 判定フィードバック イコライザー オブジェクトの構築

dfe は将来のリリースで削除される予定です。代わりに comm.DecisionFeedback を使用してください。

構文

eqobj = dfe(nfwdweights,nfbkweights,alg)
eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst)
eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst,nsamp)

説明

関数 dfe は信号をイコライズするために関数 equalize と共に使用できるイコライザー オブジェクトを作成します。信号のイコライズ プロセスの詳細は、イコライズを参照してください。

eqobj = dfe(nfwdweights,nfbkweights,alg) は、判定フィードバック イコライザー オブジェクトを構築します。イコライザーのフィードフォワードおよびフィードバック フィルターには、それぞれシンボル間隔の複素重みである nfwdweights および nfbkweights があります。これらはすべて初期値が 0 です。alg は、イコライザーが使用する適応アルゴリズムを記述します。alg を作成するには、以下の関数を使用しなければなりません。lmssignlmsnormlmsvarlmsrls、または cma。目的の出力のコンスタレーションは [-1 1] です。これは 2 位相シフト キーイング (BPSK) に相当します。

eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst) は、目的の出力のコンスタレーション ベクトルを指定します。

eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst,nsamp) は、分数間隔のフォワード フィルターで DFE を構築します。フォワード フィルターには、T/nsamp 間隔の nfwdweights 複素重みがあります。ここで、T はシンボル間隔で、nsamp は正の整数です。nsamp = 1 は、シンボル間隔のフォワード フィルターに対応します。

プロパティ

次の表は、判定フィードバック イコライザー オブジェクトのプロパティをまとめています。判定フィードバック イコライザー オブジェクトの値の表示または変更方法の詳細は、イコライズを参照してください。

メモ

イコライザー オブジェクト eqobj を初期化またはリセットするには、reset(eqobj) と入力します。

Property説明
EqType固定値、'Decision Feedback Equalizer'
AlgTypealg で表現される適応アルゴリズムの名前
nWeights[nfwdweights, nfbkweights] 形式のフォワード フィルターおよびフィードバック フィルターの重み数。フォワード フィルターの重み数は 1 以上でなければなりません。
nSampPerSymシンボルごとの入力サンプル数 (nsamp 入力引数に等しい)。この値は、イコライザーの構造 (イコライズの K の使用法を参照) およびイコライズされる信号に関する仮定の両方に関連します。
RefTap (CMA イコライザー以外)1 ~ nfwdweights の間のリファレンス タップ インデックス。1 より大きい値に設定すると、基準信号をイコライザーの入力信号に対して効率よく遅延できます。
SigConstコンスタレーション。通常、ベクトルの長さは 2 のべき乗です。
Weightsフォワード フィルターとフィードバック フィルターからの複素係数を結合するベクトル。これは、イコライズの図の wi 値のセットです。
WeightInputsフォワード フィルターとフィードバック フィルターからのタップ重み入力を結合するベクトル。これは、イコライズの図の ui 値のセットです。
ResetBeforeFiltering1 の場合、equalize への各呼び出しは、イコライズの前に eqobj の状態をリセットします。0 の場合、イコライズ プロセスは呼び出しごとの継続性を維持します。
NumSamplesProcessed前回のリセット以降にイコライザーが処理したサンプル数。eqobj を作成またはリセットすると、このプロパティ値は 0 です。
次で表現される適応アルゴリズムに固有のプロパティ: algalg を作成した以下の適応アルゴリズム関数のリファレンス ページを参照してください。lmssignlmsnormlmsvarlmsrls、または cma

プロパティ間の関係

nWeights を変更すると、MATLAB は、以下のプロパティの値を調整して、イコライザー オブジェクトの一貫性を保ちます。

Property調整される値
Weightszeros(1,sum(nWeights))
WeightInputszeros(1,sum(nWeights))
StepSize (可変ステップ サイズ LMS イコライザー)InitStep*ones(1,sum(nWeights))
InvCorrMatrix (RLS イコライザー)InvCorrInit*eye(sum(nWeights))

すべて折りたたむ

この例では、推奨される comm.DecisionFeedback System object™ とレガシ機能 dfe を同等の設定で構成します。

変数およびサポート オブジェクトの初期化

d = randi([0 3],1000,1);
x = pskmod(d,4,pi/4);
r = awgn(x,25);
sps = 2; %samples per symbol for oversampled cases
nTaps = 6;
txFilter = comm.RaisedCosineTransmitFilter('FilterSpanInSymbols',nTaps, ...
    'OutputSamplesPerSymbol',4);
rxFilter = comm.RaisedCosineReceiveFilter('FilterSpanInSymbols',nTaps, ...
    'InputSamplesPerSymbol',4,'DecimationFactor',2);
x2 = txFilter(x);
r2 = rxFilter(awgn(x2,25,0.5));
filterDelay = txFilter.FilterSpanInSymbols/2 + ...
    rxFilter.FilterSpanInSymbols/2; % Total filter delay in symbols

イコライズされた出力を比較するには、次のようなコードを使用してコンスタレーションをプロットします。

% plot(yNew,'*')
% hold on
% plot(yOld,'o')
% hold off; legend('New Eq','Old Eq'); grid on

判定フィードバック イコライザーでの LMS アルゴリズムの使用

dfe オブジェクトと comm.DecisionFeedback オブジェクトを同等の設定で構成します。LeakageFactor プロパティは LMS アルゴリズムから削除されました。comm.DecisionFeedback System object™ では、漏れ係数は常に 1 であると想定されます。

eqOld = dfe(5,3,lms(0.05),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Decision Feedback Equalizer'
  AlgType: 'LMS'
  nWeights: [5 3]
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  StepSize: 0.0500
  LeakageFactor: 1
  Weights: [0 0 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.DecisionFeedback('NumForwardTaps',5,'NumFeedbackTaps',3, ...
    'Algorithm','LMS','StepSize',0.05, ...
    'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'LMS'
  NumForwardTaps: 5
  NumFeedbackTaps: 3
  StepSize: 0.0500
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 1
  InputDelay: 0
  InputSamplesPerSymbol: 1
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

イコライザーを呼び出します。

yOld = equalize(eqOld,r,x(1:100));
yNew = eqNew(r,x(1:100));

判定フィードバック イコライザーでの RLS アルゴリズムの使用

dfe オブジェクトと comm.DecisionFeedback オブジェクトを同等の設定で構成します。

eqOld = dfe(5,3,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Decision Feedback  Equalizer'
  AlgType: 'RLS'
  nWeights: [5 3]
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  Forget Factor: 0.9500
  InvCorrInit: 0.1000
  InvCorrMatrix: [8×8 double]
  Weights: [0 0 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.DecisionFeedback('NumForwardTaps',5,'NumFeedbackTaps',3,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'RLS'
  NumForwardTaps: 5
  NumFeedbackTaps: 3
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: 0.1000
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 1
  InputDelay: 0
  InputSamplesPerSymbol: 1
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

イコライザーを呼び出します。ResetBeforeFilteringtrue に設定されている場合は、equalize オブジェクトを呼び出すたびにイコライザーがリセットされます。同等の動作を実現するには、comm.DecisionFeedback オブジェクトを呼び出すたびに reset を呼び出します。

yOld1 = equalize(eqOld,r,x(1:100));
yOld2 = equalize(eqOld,r,x(1:100));

yNew1 = eqNew(r,x(1:100));
reset(eqNew)
yNew2 = eqNew(r,x(1:100));

dfe オブジェクトと comm.DecisionFeedback オブジェクトを同等の設定で構成します。comm.DecisionFeedback オブジェクトでは、初期逆相関行列を eye(5)*0.2 に設定します。

eqOld = dfe(5,3,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Decision Feedback Equalizer'
  AlgType: 'RLS'
  nWeights: [5 3]
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ForgetFactor: 0.9500
  InvCorrInit: 0.1000
  InvCorrMatrix: [8×8 double]
  Weights: [0 0 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.DecisionFeedback('NumForwardTaps',5,'NumFeedbackTaps',3,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1, ...
    'InitialInverseCorrelationMatrix',eye(5)*0.2)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'RLS'
  NumForwardTaps: 5
  NumFeedbackTaps: 3
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: [8×8 double]
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 1
  InputDelay: 0
  InputSamplesPerSymbol: 1
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

イコライザーを呼び出します。ResetBeforeFilteringtrue に設定されている場合は、equalize オブジェクトを呼び出すたびにイコライザーがリセットされます。同等の動作を実現するには、comm.DecisionFeedback オブジェクトを呼び出すたびに reset を呼び出します。

yOld1 = equalize(eqOld,r,x(1:100));
yOld2 = equalize(eqOld,r,x(1:100));

yNew1 = eqNew(r,x(1:100));
reset(eqNew)
yNew2 = eqNew(r,x(1:100));

信号遅延を考慮する判定フィードバック イコライザーの使用

dfe オブジェクトと comm.DecisionFeedback オブジェクトを同等の設定で構成します。送信フィルターと受信フィルターにより、遷移信号と受信信号の間で信号遅延が生じます。この遅延を考慮するには、dfeRefTap プロパティをサンプル内の遅延値に近い値に設定します。さらに、nWeightsRefTap より大きい値に設定しなければなりません。

eqOld = dfe(filterDelay*sps+4,6,lms(0.01),pskmod(0:3,4,pi/4),sps);
eqOld.RefTap = filterDelay*sps+1 % Adjust to synchronize with delayed signal 
eqOld =
  EqType: 'Decision Feedback Equalizer'
  AlgType: 'LMS'
  nWeights: [16 6]
  nSampPerSym: 2
  RefTap: 13
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  StepSize: 0.0100
  LeakageFactor: 1
  Weights: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0

eqNew = comm.DecisionFeedback('NumForwardTaps',filterDelay*sps+4, ...
    'NumFeedbackTaps',6,'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',filterDelay*sps+1,'InputDelay',0)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'LMS'
  NumForwardTaps: 16
  NumFeedbackTaps: 6
  StepSize: 0.0100
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 13
  InputDelay: 0
  InputSamplesPerSymbol: 2
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

イコライザーを呼び出します。ResetBeforeFilteringtrue に設定されている場合は、equalize オブジェクトを呼び出すたびにイコライザーがリセットされます。同等の動作を実現するには、comm.DecisionFeedback オブジェクトを呼び出すたびに reset を呼び出します。

yOld1 = equalize(eqOld,r,x(1:100));
yOld2 = equalize(eqOld,r,x(1:100));

yNew1 = eqNew(r,x(1:100));
reset(eqNew)
yNew2 = eqNew(r,x(1:100));

comm.DecisionFeedback オブジェクトでは、InputDelay を使用して遅延信号と同期します。NumForwardTapsNumFeedbackTaps、および ReferenceTap は遅延値に依存しません。リファレンス タップの代わりに InputDelay を利用して同期することでタップ数を減らすことができます。タップ数を減らすと、イコライザーの自己ノイズも低減されます。

eqNew = comm.DecisionFeedback('NumForwardTaps',11,'NumFeedbackTaps',4, ...
    'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',6,'InputDelay',filterDelay*sps)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'LMS'
  NumForwardTaps: 11
  NumFeedbackTaps: 4
  StepSize: 0.0100
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 6
  InputDelay: 12
  InputSamplesPerSymbol: 2
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

yNew1 = eqNew(r2,x(1:100));
reset(eqNew)
yNew2 = eqNew(r2,x(1:100));

互換性の考慮事項

すべて展開する

R2020a 以降は警告

R2006a より前に導入