Веса отводов линейного эквалайзера MMSE
Вычислите решение по минимальной среднеквадратичной ошибке (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)

eq - Объект эквалайзераОбъект эквалайзера, указанный как comm.LinearEqualizer Системный объект.
chTaps - Отводы задержки каналаОтводы задержки канала, заданные как вектор.
Типы данных: double
Поддержка комплексного номера: Да
EbN0 - Отношение сигнал/шумОтношение сигнал/шум канала, определяемое как скаляр.
Типы данных: double
weights - Веса для линейного эквалайзераВеса для линейного эквалайзера, возвращаемые как вектор.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.