メインコンテンツ

mmseweights

線形イコライザーの MMSE タップ重み

説明

weights = mmseweights(eq,chTaps,SNR) は、線形イコライザーの最小平均二乗誤差 (MMSE) の解を計算しました。eq System object™ にはチャネル遅延タップ chTaps と S/N 比 SNR を指定しました。

すべて折りたたむ

最小平均二乗誤差 (MMSE) の解を計算し、線形イコライザーのタップ重みにその重みを使用します。

シミュレーション変数を初期化します。

M = 4; % QPSK
numSymbols = 10000;
numTrainingSymbols = 1000;
chtaps = [1 0.5*exp(1i*pi/6) 0.1*exp(-1i*pi/8)];
SNR = 20;

QPSK 変調されたシンボルを生成します。シンボルに遅延したマルチパス チャネルのフィルター処理と AWGN 障害を適用します。

data = randi([0 M-1],numSymbols,1);
tx = pskmod(data,M,pi/4);
rx = awgn(filter(chtaps,1,tx),25,'measured');

CMA アルゴリズムを使用してタップ重みを入力するように構成された線形イコライザー System object を作成します。MMSE 重みを計算します。初期タップ重みを計算された MMSE 重みに設定します。劣化したシンボルをイコライズします。

eq = comm.LinearEqualizer(Algorithm='CMA', ...
    AdaptWeights=false,InitialWeightsSource='Property')
eq = 
  comm.LinearEqualizer with properties:

                Algorithm: 'CMA'
                  NumTaps: 5
                 StepSize: 0.0100
            Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
    InputSamplesPerSymbol: 1
       AdaptWeightsSource: 'Property'
             AdaptWeights: false
     InitialWeightsSource: 'Property'
           InitialWeights: [5×1 double]
       WeightUpdatePeriod: 1

wgts = mmseweights(eq,chtaps,SNR)
wgts = 5×1 complex

   0.0005 - 0.0068i
   0.0103 + 0.0117i
   0.9694 - 0.0019i
  -0.3987 + 0.2186i
   0.0389 - 0.1756i

eq.InitialWeights = wgts;

[y,err,weights] = eq(rx);

劣化したシンボルとイコライズされたシンボルのコンスタレーションをプロットします。

constell = comm.ConstellationDiagram(NumInputPorts=2);
constell(rx,y)

イコライザーの誤差信号をプロットし、イコライズされたシンボルのエラー ベクトル振幅を計算します。

plot(abs(err))
grid on; xlabel('Symbols'); ylabel('|e|')

Figure contains an axes object. The axes object with xlabel Symbols, ylabel |e| contains an object of type line.

errevm = comm.EVM;
evm = errevm(tx,y)
evm = 
139.0863

イコライザーのタップ重みをプロットします。

subplot(3,1,1); 
stem(real(weights)); 
ylabel('real(weights)'); xlabel('Tap'); 
grid on; axis([1 8 -0.5 1])
line([eq.NumTaps+0.5 eq.NumTaps+0.5],[-0.5 1], ...
    Color='r',LineWidth=1)
title('Equalizer Tap Weights')
subplot(3,1,2);
stem(imag(weights));
ylabel('imag(weights)'); xlabel('Tap');
grid on; axis([1 8 -0.5 1])
line([eq.NumTaps+0.5 eq.NumTaps+0.5],[-0.5 1], ...
    Color='r',LineWidth=1)
subplot(3,1,3);
stem(abs(weights));
ylabel('abs(weights)'); xlabel('Tap');
grid on; axis([1 8 -0.5 1])
line([eq.NumTaps+0.5 eq.NumTaps+0.5],[-0.5 1], ...
    Color='r',LineWidth=1)

Figure contains 3 axes objects. Axes object 1 with title Equalizer Tap Weights, xlabel Tap, ylabel real(weights) contains 2 objects of type stem, line. Axes object 2 with xlabel Tap, ylabel imag(weights) contains 2 objects of type stem, line. Axes object 3 with xlabel Tap, ylabel abs(weights) contains 2 objects of type stem, line.

入力引数

すべて折りたたむ

イコライザー オブジェクト。comm.LinearEqualizer System object として指定します。

チャネル遅延タップ。ベクトルとして指定します。

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

チャネルの S/N 比。スカラーとして指定します。

データ型: double

出力引数

すべて折りたたむ

線形イコライザーの重み。ベクトルとして返されます。

バージョン履歴

R2019a で導入

参考

オブジェクト