BER- Эффективности различных эквалайзеров

Этот пример показывает эффективность BER нескольких типов эквалайзеров в статическом канале с нулем в полосе пропускания. Пример создает и реализует объект линейного эквалайзера и объект эквалайзера с обратной связью принятия решения (DFE). Он также инициализирует и вызывает эквалайзер максимальной оценки вероятностной последовательности (MLSE). Эквалайзер MLSE сначала вызывается с совершенным знанием канала, затем с простым, но несовершенным методом оценки канала.

Когда симуляция прогрессирует, он обновляет график BER для сравнительного анализа между методами эквализации. Это также показывает спектры сигналов линейно уравненных и DFE уравненных сигналов. Это также показывает относительную разрывность ошибок, что указывает на то, что при низких BER и алгоритм MLSE, и алгоритм DFE страдают от пакетов ошибок. В частности, эффективность ошибки DFE переборчивее с обнаруженными битами, переданными назад, чем с правильными битами, переданными назад. Наконец, во время «несовершенного » фрагмента MLSE симуляции, она показывает и динамически обновляет предполагаемую характеристику канала.

Чтобы экспериментировать с этим примером, Вы можете изменить такие параметры как импульсная характеристика канала, количество весов сигнала уравнителя, фактора упущения рекурсивных наименьших квадратов (RLS), размера шага наименьшее количество среднего квадрата (LMS), MLSE traceback длина, ошибка в предполагаемой длине канала и максимальное количество ошибок, собранных в каждом значении Eb/No.

Структура кода

Этот пример опирается на эти вспомогательные скрипты и функции, чтобы выполнить симуляции ссылок в области значений значений Eb/No.

eqber_adaptive.m - скрипт, который запускает симуляции ссылки для линейного и DFE эквалайзеров

eqber_mlse.m - скрипт, который запускает симуляции ссылки для идеальных и несовершенных эквалайзеров MLSE

eqber_siggen.m - скрипт, который генерирует сигнал двоичной фазы сдвига манипуляции (BPSK) без формирования импульса, затем обрабатывает его через канал и добавляет шум

eqber_graphics.m - функция, которая генерирует и обновляет графики, показывающие эффективность линейных, DFE и MLSE эквалайзеров.

Скрипты eqber_adaptive и eqber_mlse иллюстрируют, как использовать адаптивный и MLSE эквалайзеры через несколько блоков данных, так что информация о состоянии сохранена между блоками данных.

Параметры сигнала и канала

Установите параметры, относящиеся к сигналу и каналу. Используйте BPSK без какого-либо формирования импульса и 5-кратная реальная симметричная импульсная характеристика канала. (Для получения дополнительной информации по каналу см. раздел 10.2.3 «Цифровые коммуникации» Дж. Проакиса, 4-е изд.) Установите начальные состояния генераторов данных и шума. Установите область значений Eb/No.

% System simulation parameters
Fs = 1;           % sampling frequency (notional)
nBits = 2048;     % number of BPSK symbols per vector
maxErrs = 200;    % target number of errors at each Eb/No
maxBits = 1e6;    % maximum number of symbols at each Eb/No

% Modulated signal parameters
M = 2;                     % order of modulation
Rs = Fs;                   % symbol rate
nSamp = Fs/Rs;             % samples per symbol
Rb = Rs*log2(M);           % bit rate

% Channel parameters
chnl = [0.227 0.460 0.688 0.460 0.227]';  % channel impulse response
chnlLen = length(chnl);                   % channel length, in samples
EbNo = 0:14;                              % in dB
BER = zeros(size(EbNo));                  % initialize values

% Create BPSK modulator
bpskMod = comm.BPSKModulator;

% Specify a seed for the random number generators to ensure repeatability.
rng(12345)

Адаптивные параметры эквалайзера

Установите значения параметров для линейного и DFE эквалайзеров. Используйте линейный эквалайзер с 31 контактом и DFE с 15 отводами с прямой связью и обратной связью. Используйте рекурсивный алгоритм наименьших квадратов (RLS) для первого блока данных, чтобы гарантировать быструю сходимость отводов. Затем используйте алгоритм наименьшего среднего квадрата (LMS), чтобы гарантировать быструю скорость выполнения.

% Linear equalizer parameters
nWts = 31;               % number of weights
algType = 'RLS';         % RLS algorithm
forgetFactor = 0.999999; % parameter of RLS algorithm

% DFE parameters - use same update algorithms as linear equalizer
nFwdWts = 15;            % number of feedforward weights
nFbkWts = 15;            % number of feedback weights

Параметры эквалайзера и оценки канала MLSE и начальная визуализация

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

% MLSE equalizer parameters
tbLen = 30;                        % MLSE equalizer traceback length
numStates = M^(chnlLen-1);         % number of trellis states
[mlseMetric,mlseStates,mlseInputs] = deal([]);
const = constellation(bpskMod);    % signal constellation
mlseType = 'ideal';                % perfect channel estimates at first
mlseMode = 'cont';                 % no MLSE resets

% Channel estimation parameters
chnlEst = chnl;         % perfect estimation initially
prefixLen = 2*chnlLen;  % cyclic prefix length
excessEst = 1;          % length of estimated channel impulse response
% beyond the true length

% Initialize the graphics for the simulation. Plot the unequalized channel
% frequency response, and the BER of an ideal BPSK system.
idealBER = berawgn(EbNo,'psk',M,'nondiff');

[hBER,hLegend,legendString,hLinSpec,hDfeSpec,hErrs,hText1,hText2, ...
    hFit,hEstPlot,hFig,hLinFig,hDfeFig] = eqber_graphics('init', ...
    chnl,EbNo,idealBER,nBits);

Создайте объекты RLS и LMS Linear и DFE Equalizer

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

linEq = comm.LinearEqualizer('Algorithm',algType, ...
    'ForgettingFactor',forgetFactor, ...
    'NumTaps',nWts, ...
    'Constellation',const, ...
    'ReferenceTap',round(nWts/2), ...
    'TrainingFlagInputPort',true);

dfeEq = comm.DecisionFeedbackEqualizer('Algorithm',algType, ...
    'ForgettingFactor',forgetFactor, ...
    'NumForwardTaps',nFwdWts, ...
    'NumFeedbackTaps',nFbkWts, ...
    'Constellation',const, ...
    'ReferenceTap',round(nFwdWts/2), ...
    'TrainingFlagInputPort',true);

Линейный эквалайзер

Запустите линейный эквалайзер и постройте график спектра выравниваемого сигнала, BER и эффективность ошибки пакета для каждого блока данных. Обратите внимание, что когда Eb/No увеличивается, линейно выравниваемый спектр сигнала имеет постепенно более глубокое ядро. Это подчеркивает тот факт, что линейный эквалайзер должен иметь гораздо больше отводов, чтобы адекватно уравнять канал с глубоким ядром. Обратите внимание также, что ошибки происходят с небольшими интервалами между межошибками, которые следует ожидать при такой высокой вероятности ошибок.

Список кода симуляции для адаптивных эквалайзеров см. в eqber_adaptive.m.

firstRun = true;  % flag to ensure known initial states for noise and data
eqType = 'linear';
eqber_adaptive;

Уравнитель обратной связи принятия решений

Запустите DFE и постройте график спектра выравниваемого сигнала, BER и эффективность ошибки пакета для каждого блока данных. Обратите внимание, что DFE намного лучше способна уменьшить ядро канала, чем линейный эквалайзер, как показано на спектральном графике и графике BER. Нанесенные на график точки BER при заданном значении Eb/No обновляются каждый блок данных, поэтому они перемещаются вверх или вниз в зависимости от количества ошибок, собранных в этом блоке. Следует также отметить, что ошибки DFE являются несколько разрывистыми из-за распространения ошибки, вызванной обратной связью обнаруженных бит вместо правильных бит. График ошибки пакета показывает, что когда BER уменьшается, значительное количество ошибок происходит с межошибкой пяти бит или менее. (Если бы эквалайзер DFE запускался в режиме обучения в любое время, ошибки были бы гораздо менее лопучими.)

Для каждого блока данных график также указывает средний интервал между межошибками, если эти ошибки происходили случайным образом.

Список кода симуляции для адаптивных эквалайзеров см. в eqber_adaptive.m.

close(hFig(ishghandle(hFig)));

eqType = 'dfe';
eqber_adaptive;

Идеальный эквалайзер MLSE с идеальными знаниями о канале

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

Список кода симуляции эквалайзеров MLSE см. в eqber_mlse.m.

close(hLinFig(ishghandle(hLinFig)),hDfeFig(ishghandle(hDfeFig)));

eqType = 'mlse';
mlseType = 'ideal';
eqber_mlse;

Эквалайзер MLSE с несовершенной оценкой канала

Запустите эквалайзер MLSE с несовершенной оценкой канала и постройте график BER и эффективности ошибки пакета для каждого блока данных. Эти результаты довольно тесно соответствуют идеальным результатам MLSE. (Алгоритм оценки канала сильно зависит от данных, так что БПФ переданного блока данных не имеет нулей). Обратите внимание, как предполагаемые графики канала сравниваются с фактическим графиком спектра канала.

Список кода симуляции эквалайзеров MLSE см. в eqber_mlse.m.

mlseType = 'imperfect';
eqber_mlse;