lineareq

(Чтобы быть удаленным) Построение линейный объект эквалайзера

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

Синтаксис

eqobj = lineareq(nweights,alg)
eqobj = lineareq(nweights,alg,sigconst)
eqobj = lineareq(nweights,alg,sigconst,nsamp)

Описание

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

eqobj = lineareq(nweights,alg) создает расположенный с интервалами символом линейный объект эквалайзера. Эквалайзер имеет веса комплекса nweights, которые являются первоначально всеми нулями. alg описывает адаптивный алгоритм, который использует эквалайзер; необходимо создать alg с помощью любой из этих функций: lms, signlms, normlms, varlms, rls или cma. Сигнальным созвездием желаемого вывода является [-1 1], который соответствует бинарному манипулированию сдвига фазы (BPSK).

eqobj = lineareq(nweights,alg,sigconst) задает вектор сигнального созвездия желаемого вывода.

eqobj = lineareq(nweights,alg,sigconst,nsamp) создает незначительно расположенный с интервалами линейный объект эквалайзера. Эквалайзеру расположили с интервалами веса комплекса nweights в T/nsamp, где T является периодом символа, и nsamp является положительным целым числом. nsamp = 1 соответствует расположенному с интервалами символом эквалайзеру.

Свойства

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

Совет

Чтобы инициализировать или сбросить объект eqobj эквалайзера, введите reset(eqobj).

СвойствоОписание
EqTypeФиксированное значение, 'Linear Equalizer'
AlgTypeИмя адаптивного алгоритма представлено alg
nWeightsКоличество весов
nSampPerSymКоличество входных выборок на символ (эквивалентный входному параметру nsamp). Это значение относится к обоим структура эквалайзера (см. использование K в Коррекции), и предположение о сигнале, который будет компенсироваться.
RefTap (за исключением эквалайзеров CMA)Ссылочный индекс касания, между 1 и nWeights. Установка этого к значению, больше, чем 1 эффективно, задерживает ссылочный сигнал и выходной сигнал RefTap-1 относительно входного сигнала эквалайзера.
SigConstСигнальное созвездие, вектор, длина которого обычно является степенью 2
WeightsВектор комплексных коэффициентов. Это - набор wi значений в схематическом в Коррекции.
WeightInputsВектор входных параметров веса касания. Это - набор ui значений в схематическом в Коррекции.
ResetBeforeFilteringЕсли 1, каждый вызов equalize сбрасывает состояние eqobj перед компенсацией. Если 0, процесс коррекции поддерживает непрерывность от одного вызова до следующего.
NumSamplesProcessedКоличество выборок эквалайзер, обработанный начиная с последнего сброса. Когда вы создаете или сбрасываете eqobj, этим значением свойства является 0.
Свойства, характерные для адаптивного алгоритма, представлены algСмотрите страницу с описанием для адаптивной функции алгоритма, которая создала alg: lms, signlms, normlms, varlms, rls или cma.

Отношения среди свойств

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

СвойствоНастроенное значение
Weightszeros(1,nWeights)
WeightInputszeros(1,nWeights)
StepSize (Эквалайзеры Variable-step-size LMS)InitStep*ones(1,nWeights)
InvCorrMatrix (эквалайзеры RLS)InvCorrInit*eye(nWeights)

Примеры

свернуть все

Можно компенсировать сигнал при помощи функции 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]; 

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

lineareq будет удален

lineareq будет удален. Используйте comm.LinearEqualizer вместо этого.

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

Системные объекты

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