mmseweights

Линейный эквалайзер MMSE касается весов

Описание

пример

weights = mmse(eq,chTaps,EbN0) расчетное решение для минимальной среднеквадратической ошибки (MMSE) для линейного эквалайзера, eq Система object™, учитывая канал задерживает касания, chTaps, и сигнал к шумовому отношению, EbN0.

Примеры

свернуть все

Вычислите решение для минимальной среднеквадратической ошибки (MMSE) и используйте веса в линейных весах касаний эквалайзера.

Инициализируйте переменные симуляции.

M = 4; % QPSK
numSymbols = 10000;
numTrainingSymbols = 1000;
chtaps = [1 0.5*exp(1i*pi/6) 0.1*exp(-1i*pi/8)];
EbN0 = 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 и ввести веса касаний. Вычислите веса MMSE. Установите начальные веса касания на расчетные веса MMSE. Компенсируйте символы, которым повреждают.

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

                Algorithm: 'CMA'
                  NumTaps: 5
                 StepSize: 0.0100
            Constellation: [1x4 double]
    InputSamplesPerSymbol: 1
       AdaptWeightsSource: 'Property'
             AdaptWeights: false
     InitialWeightsSource: 'Property'
           InitialWeights: [5x1 double]
       WeightUpdatePeriod: 1

wgts = mmseweights(eq,chtaps,EbN0)
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|')

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

Постройте веса касания эквалайзера.

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)

Входные параметры

свернуть все

Объект Equalizer, заданный как comm.LinearEqualizer Системный объект.

Касания задержки канала, заданные как вектор.

Типы данных: double
Поддержка комплексного числа: Да

Сигнал к шумовому отношению канала, заданного как скаляр.

Типы данных: double

Выходные аргументы

свернуть все

Веса для линейного эквалайзера, возвращенного как вектор.

Смотрите также

Объекты

Введенный в R2019a