lms

(Чтобы быть удаленным) наименьшее количество среднего квадратичного (LMS) Построения адаптивный объект алгоритма

lms будет удален в будущем релизе. Используйте comm.LinearEqualizer или comm.DecisionFeedbackEqualizer вместо этого.

Синтаксис

alg = lms(stepsize)
alg = lms(stepsize,leakagefactor)

Описание

lms функция создает адаптивный объект алгоритма, который можно использовать с lineareq функция или dfe функция, чтобы создать объект эквалайзера. Можно затем использовать объект эквалайзера с equalize функция, чтобы компенсировать сигнал. Чтобы узнать больше о процессе для компенсации сигнала, смотрите Эквализацию.

alg = lms(stepsize) создает адаптивный алгоритм, основанный на объектах на алгоритме наименьшее количество среднего квадратичного (LMS) с размером шага stepsize.

alg = lms(stepsize,leakagefactor) устанавливается коэффициент утечки LMS-алгоритма. leakagefactor должен быть между 0 и 1. Значение 1 соответствует обычному алгоритму обновления веса, и значение 0 соответствует алгоритму обновления без памяти.

Свойства

Приведенная ниже таблица описывает свойства адаптивного объекта алгоритма LMS. Чтобы изучить, как просмотреть или изменить значения адаптивного объекта алгоритма, смотрите Эквализацию.

СвойствоОписание
AlgTypeФиксированное значение, 'LMS'
StepSizeПараметр размера шага LMS, неотрицательное вещественное число
LeakageFactorФактор утечки LMS, вещественное число между 0 и 1

Примеры

свернуть все

Можно компенсировать сигнал при помощи equalize функция, чтобы применить адаптивный эквалайзер возражает против сигнала. equalize функционируйте также обновляет эквалайзер.

В типовых приложениях эквалайзер начинается при помощи известной последовательности переданных символов при адаптации весов эквалайзера. Известная последовательность, названная обучающей последовательностью, позволяет эквалайзеру собрать информацию о характеристиках канала. После того, как эквалайзер закончил обрабатывать обучающую последовательность, он адаптирует веса эквалайзера в направленном на решение режиме с помощью обнаруженной версии выходного сигнала. Использовать обучающую последовательность при вызове equalize функционируйте, включайте символы обучающей последовательности как входной вектор.

Отметьте как исключение, тот CMA, эквалайзеры не используют обучающую последовательность. Если объект эквалайзера основан на CMA, вы не должны включать обучающую последовательность как входной вектор.

Этот код иллюстрирует, как использовать, компенсируют с обучающей последовательностью. Обучающая последовательность в этом случае является только началом переданного сообщения.

Настройте параметры и сигналы.

M = 4; % Alphabet size for modulation
msg = randi([0 M-1],1500,1); % Random message
qpskMod = comm.QPSKModulator('PhaseOffset',0);
modmsg = qpskMod(msg); % Modulate using QPSK.
trainlen = 500; % Length of training sequence
chan = [.986; .845; .237; .123+.31i]; % Channel coefficients
filtmsg = filter(chan,1,modmsg); % Introduce channel distortion.

Компенсируйте полученный сигнал.

eq1 = lineareq(8, lms(0.01)); % Create an equalizer object.
eq1.SigConst = qpskMod((0:M-1)')'; % Set signal constellation.
[symbolest,yd] = equalize(eq1,filtmsg,modmsg(1:trainlen)); % Equalize.

Вычислите коэффициенты ошибок с и без эквализации

Определите количество ошибок, которые произошли в попытке восстановить модулируемое сообщение с и без эквалайзера. Коэффициенты ошибок символа показывают, что эквалайзер значительно улучшает производительность.

qpskDemod = comm.QPSKDemodulator('PhaseOffset',0);
demodmsg_noeq = qpskDemod(filtmsg); % Demodulate unequalized signal.
demodmsg = qpskDemod(yd); % Demodulate detected signal from equalizer.
errorCalc = comm.ErrorRate; % ErrorRate calculator
ser_noEq = errorCalc(msg(trainlen+1:end), demodmsg_noeq(trainlen+1:end));
reset(errorCalc)
ser_Eq = errorCalc(msg(trainlen+1:end),demodmsg(trainlen+1:end));
disp('Symbol error rates with and without equalizer:')
Symbol error rates with and without equalizer:
disp([ser_Eq(1) ser_noEq(1)]) 
         0    0.3230

Постройте сигналы

Создайте график рассеивания, показывающий сигнал до и после эквализации, а также ссылочное сигнальное созвездие для модуляции QPSK. Точки компенсируемого сигнала кластеризируются более тесно вокруг точек ссылочного сигнального созвездия, указывая на улучшение сигнала от эквализации.

h = scatterplot(filtmsg,1,trainlen,'bx'); hold on;
scatterplot(symbolest,1,trainlen,'g.',h);
scatterplot(eq1.SigConst,1,0,'k*',h);
legend('Filtered signal','Equalized signal',...
   'Ideal signal constellation');
hold off;

Для большего количества примеров, которые используют обучающие последовательности, смотрите Адаптивную Эквализацию.

Если вы вызываете equalize многократно с тем же объектом эквалайзера компенсировать серию сигнальных векторов, вы можете использовать обучающую последовательность в первый раз, когда вы вызываете функцию и не используете обучающую последовательность в последующих вызовах. Каждая итерация equalize функция после первой действует полностью в направленном на решение режиме. Однако, потому что ResetBeforeFiltering свойство объекта эквалайзера установлено в 0, equalize функционируйте использует существующую информацию состояния в объекте эквалайзера когда стартовая операция эквализации для каждой итерации. В результате обучение влияет на все операции эквализации, не только первое.

Заметьте в этом коде что первый вызов equalize использует обучающую последовательность в качестве входного параметра, и второй вызов, чтобы компенсировать не использует обучающую последовательность.

Настройте передачу сигнала

Создайте сигнал, QPSK модулируют его, затем пропускают его через канал искажения.

M = 4; % Alphabet size for modulation
msg = randi([0 M-1],1500,1); % Random message
qpskMod = comm.QPSKModulator('PhaseOffset',0);
modmsg = qpskMod(msg); % Modulate using QPSK


chan = [.986; .845; .237; .123+.31i]; % Channel coefficients
filtmsg = filter(chan,1,modmsg); % Introduce channel distortion

Настройте эквалайзер

Задайте параметры эквалайзера и создайте lms объект эквалайзера

trainlen = 500; % Length of training sequence
eqlms = lineareq(8, lms(0.01)); % Create an equalizer object
eqlms.SigConst = qpskMod((0:M-1)')'; % Set signal constellation parameter in the equalizer

Обеспечьте непрерывность между вызовами, чтобы компенсировать.

eqlms.ResetBeforeFiltering = 0;

Компенсируйте полученный сигнал в частях

Обработайте обучающую последовательность.

s1 = equalize(eqlms,filtmsg(1:trainlen),modmsg(1:trainlen));

Процесс некоторые данные в направленном на решение режиме.

s2 = equalize(eqlms,filtmsg(trainlen+1:800));

Остальная часть процесса данных в направленном на решение режиме.

s3 = equalize(eqlms,filtmsg(801:end));

Конкатенация сегментов сигнала, чтобы получить полный выход эквалайзера.

s = [s1; s2; s3]; 

Алгоритмы

Что касается схематики, представленной в Эквализации, задайте w как вектор всех весов wi и задайте u как вектор всех входных параметров ui. На основе текущего набора весов, w, этот адаптивный алгоритм создает новый набор весов, данных

(LeakageFactor) w + (StepSize) u*e

где оператор * обозначает сопряженное комплексное число.

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2019a

Ссылки

[1] Farhang-Boroujeny, B., адаптивные фильтры: теория и Applications, Chichester, England, John Wiley & Sons, 1998.

[2] Haykin, Саймон, адаптивная теория фильтра, треть Эд., верхний Сэддл-Ривер, NJ, Prentice Hall, 1996.

[3] Kurzweil, Джек, введение в цифровую связь, Нью-Йорк, John Wiley & Sons, 2000.

[4] Proakis, Джон Г., цифровая связь, четвертый Эд., Нью-Йорк, McGraw-Hill, 2001.

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

Объекты

Представлено до R2006a