Main Content

BSPK 信号のイコライズ

最小平均二乗 (LMS) アルゴリズムをもつ線形イコライザーを使用して BPSK 信号をイコライズします。

ランダムなバイナリ データを生成し、BPSK 変調を適用します。

M = 2;
data = randi([0 1],1000,1);
modData = pskmod(data,M);

変調した信号に 2 タップの静的フェージングを適用し、AWGN ノイズを加えます。

rxSig = conv(modData,[0.02+0.5i 0.05]);
rxSig = awgn(rxSig,30);

LMS 適応アルゴリズムを使用し、8 タップ、0.1 ステップ サイズ、リファレンス タップに第 4 のタップを使用するように構成された線形イコライザー System object™ を作成します。送信信号の変調と一致するようにコンスタレーションを設定します。

lineq = comm.LinearEqualizer( ...
    NumTaps=8, ...
    StepSize=0.1, ...
    Constellation=complex([-1 1]), ...
    ReferenceTap=4)
lineq = 
  comm.LinearEqualizer with properties:

                Algorithm: 'LMS'
                  NumTaps: 8
                 StepSize: 0.1000
            Constellation: [-1.0000 + 0.0000i 1.0000 + 0.0000i]
             ReferenceTap: 4
               InputDelay: 0
    InputSamplesPerSymbol: 1
    TrainingFlagInputPort: false
       AdaptAfterTraining: true
     InitialWeightsSource: 'Auto'
       WeightUpdatePeriod: 1

受信信号 rxSig をイコライズします。最初の 200 データ ビットをトレーニング シーケンスとして使用します。イコライズの前後の受信信号を示すコンスタレーション ダイアグラムを表示します。

trSeq = modData(1:200);
[eqSig,err] = lineq(rxSig,trSeq);

constdiag = comm.ConstellationDiagram( ...
    NumInputPorts=2, ...
    ChannelNames={'Before equalization','After equalization'}, ...
    ReferenceConstellation=pskmod([0 M-1],M));
constdiag(rxSig(400:end),eqSig(400:end))

誤差推定の振幅をプロットします。誤り信号の減少と安定化に示されるように、イコライズは 200 ビット未満に収束します。

plot(abs(err))
title('Error Estimate')
xlabel('Bits')
ylabel('Amplitude (V)')

Figure contains an axes object. The axes object with title Error Estimate contains an object of type line.