Этот пример показывает производительность BER нескольких типов эквалайзеров в статическом канале с пустым указателем в полосе пропускания. Пример создает и реализует линейный объект эквалайзера и объект эквалайзера обратной связи решения (DFE). Это также инициализирует и вызывает эквалайзер оценки последовательности наибольшего правдоподобия (MLSE). Эквалайзер MLSE сначала вызывается с совершенным знанием канала, затем с прямым, но несовершенным методом оценки канала.
В то время как симуляция прогрессирует, она обновляет график BER для сравнительного анализа между методами коррекции. Это также показывает спектры сигнала линейно компенсируемый, и DFE компенсировал сигналы. Это также показывает родственнику, пульсирующему из ошибок, указывая, что в низком BERs, и алгоритм MLSE и алгоритм DFE страдают от пакетов ошибок. В частности, ошибочная производительность DFE является burstier с обнаруженными битами, возвращенными, чем с правильными возвращенными битами. Наконец, во время "несовершенного" фрагмента MLSE симуляции, это показывает и динамически обновляет предполагаемый ответ канала.
Чтобы экспериментировать с этим примером, можно изменить такие параметры как импульсный ответ канала, количество весов касания эквалайзера, фактора упущения рекурсивных наименьших квадратов (RLS), размера шага наименьшее количество среднего квадратичного (LMS), MLSE traceback длина, ошибка в предполагаемой длине канала и максимальное количество ошибок, собранных в каждом значении Eb/No.
Этот пример полагается на несколько других скриптов и функций, чтобы выполнить симуляции ссылки в области значений значений Eb/No. Эти файлы следующие:
eqber_adaptive - скрипт, который запускает симуляции ссылки для линейных и эквалайзеров DFE
eqber_mlse - скрипт, который запускает симуляции ссылки для идеальных и несовершенных эквалайзеров MLSE
eqber_siggen - скрипт, который генерирует сигнал бинарного манипулирования сдвига фазы (BPSK) без импульсного формирования, затем обрабатывает его через канал и добавляет шум
eqber_graphics - функция, которая генерирует и обновляет графики, показывающие производительность линейного, DFE и эквалайзеров MLSE. Введите "редактирование eqber_graphics" в командной строке MATLAB®, чтобы просмотреть этот файл.
Скрипты 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;