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