Main Content

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

lineareq

(削除予定) 線形イコライザー オブジェクトの構築

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

構文

eqobj = lineareq(nweights,alg)
eqobj = lineareq(nweights,alg,sigconst)
eqobj = lineareq(nweights,alg,sigconst,nsamp)

説明

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

eqobj = lineareq(nweights,alg) は、シンボル間隔線形イコライザー オブジェクトを構築します。イコライザーには、初期値がすべてゼロである nweights 複素重みがあります。alg は、イコライザーが使用する適応アルゴリズムを記述します。このため、alg の作成には、以下の関数のいずれかを使用しなければなりません。lmssignlmsnormlmsvarlmsrls、または cma。目的の出力のコンスタレーションは [-1 1] です。これは 2 位相シフト キーイング (BPSK) に相当します。

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

eqobj = lineareq(nweights,alg,sigconst,nsamp) は、分数間隔線形イコライザー オブジェクトを構築します。イコライザーには、T がシンボル区間、nsamp が正の整数である場合に T/nsamp の間隔のある nweights 複素重みがあります。nsamp = 1 は、シンボル間隔イコライザーに対応します。

プロパティ

次の表では、線形イコライザー オブジェクトのプロパティについて説明します。線形イコライザー オブジェクトの値の参照または変更方法の詳細は、イコライズを参照してください。

ヒント

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

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

プロパティ間の関係

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

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

すべて折りたたむ

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

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

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 アルゴリズムの使用

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

eqOld = lineareq(5,lms(0.05),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'LMS'
  nWeights: 5
  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]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','LMS','StepSize',0.05, ...
    'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'LMS'
  NumTaps: 5
  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 アルゴリズムの使用

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

eqOld = lineareq(5,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'RLS'
  nWeights: 5
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  InvCorrInit: 0.1000
  InvCorrMatrix: [5×5 double]
  Weights: [0 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'RLS'
  NumTaps: 5
  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.LinearEqualizer オブジェクトを呼び出すたびに 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));

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

eqOld = lineareq(5,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'RLS'
  nWeights: 5
  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: [5×5 double]
  Weights: [0 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1, ...
    'InitialInverseCorrelationMatrix',eye(5)*0.2)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'RLS'
  NumTaps: 5
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: [5×5 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.LinearEqualizer オブジェクトを呼び出すたびに 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));

線形イコライザーでの CMA アルゴリズムの使用

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

eqOld = lineareq(5,cma(0.05),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'Constant Modulus'
  nWeights: 5
  nSampPerSym: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  StepSize: 0.0500
  LeakageFactor: 1
  Weights: [1 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','CMA','StepSize',0.05, ...
    'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'CMA'
  NumTaps: 5
  StepSize: 0.0500
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 1
  InputSamplesPerSymbol: 1
  AdaptWeightsSource: 'Property'
  AdaptWeights: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

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

yOld = equalize(eqOld,r);
yNew = eqNew(r);

信号遅延を考慮する線形イコライザーの使用

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

eqOld = lineareq(filterDelay*sps+4,lms(0.01),pskmod(0:3,4,pi/4),sps);
eqOld.RefTap = filterDelay*sps+1 % Adjust to synchronize with delayed signal 
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'LMS'
  nWeights: 16
  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]
  WeightInputs: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0

eqNew = comm.LinearEqualizer('NumTaps',16,'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',filterDelay*sps+1,'InputDelay',0)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'LMS'
  NumTaps: 16
  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.LinearEqualizer オブジェクトを呼び出すたびに 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.LinearEqualizer オブジェクトでは、InputDelay を使用して遅延信号と同期します。NumTapsReferenceTap は遅延値に依存しません。リファレンス タップの代わりに InputDelay を利用して同期することでタップ数を減らすことができます。タップ数を減らすと、イコライザーの自己ノイズも低減されます。

eqNew = comm.LinearEqualizer('NumTaps',11,'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',6,'InputDelay',filterDelay*sps)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'LMS'
  NumTaps: 11
  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 より前に導入