Этот пример показывает эффективность 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 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 используется, чтобы адаптировать веса отводов эквалайзера, и ссылочное касание устанавливается на центральное касание.
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 с идеальной оценкой канала и постройте график BER и эффективности ошибки пакета для каждого блока данных. Обратите внимание, что ошибки происходят чрезвычайно лопнувшим образом. Заметьте, особенно при низких BER, что подавляющий процент ошибок происходит с межошибкой в один или два бита.
Список кода симуляции эквалайзеров MLSE см. в eqber_mlse.m.
close(hLinFig(ishghandle(hLinFig)),hDfeFig(ishghandle(hDfeFig))); eqType = 'mlse'; mlseType = 'ideal'; eqber_mlse;
Запустите эквалайзер MLSE с несовершенной оценкой канала и постройте график BER и эффективности ошибки пакета для каждого блока данных. Эти результаты довольно тесно соответствуют идеальным результатам MLSE. (Алгоритм оценки канала сильно зависит от данных, так что БПФ переданного блока данных не имеет нулей). Обратите внимание, как предполагаемые графики канала сравниваются с фактическим графиком спектра канала.
Список кода симуляции эквалайзеров MLSE см. в eqber_mlse.m.
mlseType = 'imperfect';
eqber_mlse;