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

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

В то время как симуляция прогрессирует, она обновляет график BER для сравнительного анализа между методами эквализации. Это также показывает спектры сигнала линейно компенсируемый, и DFE компенсировал сигналы. Это также показывает, что родственник, пульсирующий из ошибок, указывая в низком BERs, и алгоритм MLSE и алгоритм DFE, страдает от пакетов ошибок. В частности, ошибочная эффективность DFE является burstier с обнаруженными битами, возвращенными, чем с правильными возвращенными битами. Наконец, во время "несовершенного" фрагмента 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 касаниями. (Раздел See 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 feedforward и касаниями обратной связи. Используйте алгоритм рекурсивных наименьших квадратов (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 Equalizer & Channel Estimation Parameters и начальная визуализация

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

% 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 и линейные и объекты эквалайзера DFE LMS

Алгоритм обновления 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 и пакетную ошибочную эффективность для каждого блока данных. Обратите внимание на то, что ошибки происходят чрезвычайно пульсирующим способом. Наблюдайте, особенно в низком BERs, что подавляющий процент ошибок происходит с межошибочным интервалом одного или двух битов.

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

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

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

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

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

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

mlseType = 'imperfect';
eqber_mlse;