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, xlabel Bits, ylabel Amplitude (V) contains an object of type line.