Компенсируйте сигнал BPSK использование линейного эквалайзера с алгоритмом наименьшее количество среднего квадратичного (LMS).
Сгенерируйте случайные двоичные данные и примените модуляцию BPSK.
M = 2; data = randi([0 1],1000,1); modData = pskmod(data,M);
Примените 2D касание статическое исчезновение к модулируемому сигналу и добавьте шум AWGN.
rxSig = conv(modData,[0.02+0.5i 0.05]); rxSig = awgn(rxSig,30);
Создайте линейную Систему эквалайзера object™ сконфигурированный, чтобы использовать адаптивный алгоритм LMS, 8 касаний, 0,1 размера шага и 4-е касание как ссылочное касание. Установите созвездие совпадать с модуляцией переданного сигнала.
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)')