DOCSIS в восходящем направлении TDMA Ссылки Симуляции

В этом примере показано, как реализовать физический слой (PHY) спецификации интерфейса обслуживания кабеля данных (DOCSIS ®) в восходящем режиме TDMA [1][2].

Введение

DOCSIS определяет международные стандарты для высокоскоростных систем передачи данных по кабелю и определяет различные режимы работы. Этот пример фокусируется на восходящем режиме множественного доступа с временным делением каналов (TDMA), где используется квадратурная амплитудная модуляция с одной несущей (SC-QAM). Этот режим доступа совместим со всеми версиями DOCSIS, включая 4.0. Пример реализует гибкую цепь обработки сигналов PHY путем включения объекта строения, который задает многочисленные конфигурируемые параметры. Он также включает в себя формат заголовка слоя управления доступом к среде (MAC) и моделирует пакеты данных, совместимые с параметрами конфигурации MAC.

Используя функции, доступные с Communications Toolbox™ и Signal Processing Toolbox™, пример:

  • Моделирует базовую полосу PHY коммуникационной системы DOCSIS

  • Включает вспомогательные функции для конфигурации объектов и использует эти объекты для определения, валидации и организации параметров конфигурации

  • Генерирует статистику, чтобы сравнить эффективность частоты ошибок модели с теоретическими результатами.

Системная модель

Процесс симуляции высокого уровня показан на этом изображении. Более подробное описание отдельных блоков приводится в нижеследующих пунктах.

Структура

Системы координат MAC

Формат заголовка MAC, показанный на этом изображении, соответствует DOCSIS [2]. В полях Extended Header and Packet Protocol Data Unit (Packet PDU) структуры системы координат используются случайные биты.

Если значение поля Extended Header On равно 1, то MAC- Параметра определяет длину Extended Header в байтах. В противном случае MAC- Параметра могут быть зарезервированы для другого использования.

Обработка сигнала передатчика

Это изображение показывает цепь обработки сигнала передатчика. Входные данные проходят кодирование Рида-Соломона, перемежение, скремблирование, предварительное завершение преамбулы, SC-QAM, предварительную эквализацию (для получения дополнительной информации см. «Эффект передающего предварительного эквалайзера») и фильтрацию передачи.

Модель канала

Функция помощника helperDocsisChannel моделирует многолучевой канал со статической характеристикой канала и стохастическим аддитивным белым Гауссовым шумом (AWGN) для воспроизведения практического кабельного канала, показанного на фигуры [3]. Этот код фильтрует импульс модуля через смоделированный канал и строит графики ответвлений канала и частотной характеристики. Ответ величины совпадает с ответом, показанным на Фигуру 40.

% Probe channel with a unit impulse. Pad zeros at the beginning and end to
% account for channel delay.
probeSignal = [zeros(1,12),1,zeros(1,12)];
sampsPerSymbol = 1;
chanTaps = helperDocsisChannel(probeSignal,sampsPerSymbol);
% Remove zero values
chanTaps = nonzeros(chanTaps);
% Time domain tap values
figure
subplot(2,1,1)
stem(abs(chanTaps))
title('Channel Taps')
xlabel('Taps')
ylabel('Amplitude')
legend('Magnitude')
subplot(2,1,2)
stem(real(chanTaps))
hold on
stem(imag(chanTaps))
legend('Real','Imag')
xlabel('Taps')
ylabel('Amplitude')

Figure contains 2 axes. Axes 1 with title Channel Taps contains an object of type stem. This object represents Magnitude. Axes 2 contains 2 objects of type stem. These objects represent Real, Imag.

% Frequency domain response
fvtool(chanTaps,'Analysis','freq')
title('Magnitude and Phase Response')

Figure Filter Visualization Tool - Magnitude Response (dB) and Phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude and Phase Response contains an object of type line.

Обработка сигнала приемника

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

Эффект передающего предварительного эквалайзера

Стандарт DOCSIS задает предварительную эквализацию символов передатчика для противодействия межсимвольной интерференции (ISI), введенной многолучевым каналом. Поскольку используется статическая частотная характеристика канала, краны предэквалайзера в передатчике фиксируются на время симуляции.

Этот код показывает передачу модулированного сигнала QPSK с предварительной эквализацией и без нее. Оба сигнала фильтруются с помощью helperDocsisChannel функция без добавления AWGN. Схема созвездия символов без применённого перед эквализацией показывает искажение ISI после фильтрации канала. Сигнализация созвездия символов с применённым перед эквализацией не показывает искажений после фильтрации канала.

На самом деле, поскольку в канале нет шума, уравненные символы совпадают с ссылкой созвездием настолько хорошо, что их может быть трудно увидеть. Переключите видимость двух наборов символов на схеме созвездия, щелкнув соответствующие метки в легенде для лучшего представления.

% Create a DOCSIS configuration object with the specified parameters. Do
% not use Reed-Solomon encoding or append any preamble bits. 500 bytes of
% data are transmitted in total.
docsisCfg = docsisConfig( ...
    'NumBytes',500, ...
    'RSEnabled',false, ...
    'PreambleLength',0, ...
    'SamplesPerSymbol',1);
% Validate configuration parameters after they're all set
validateConfig(docsisCfg);

% Generate random data bits manually
srcData = randi([0 1],docsisCfg.NumBytes*8,1);

% Get the output from the modulator and pre-equalizer
[~,~,modOut,eqOut] = helperDocsisTx(srcData,[],docsisCfg);

% Pass both signals through the example channel
uneqChanOut = helperDocsisChannel(modOut,docsisCfg.SamplesPerSymbol);
eqChanOut = helperDocsisChannel(eqOut,docsisCfg.SamplesPerSymbol);

% Show received symbols in constellation diagram
constDiagram0 = comm.ConstellationDiagram( ...
    'NumInputPorts',2, ...
    'Title','Zero-noise Channel Output', ...
    'ChannelNames',{'Unequalized','Equalized'}, ...
    'ShowLegend',true, ...
    'XLimits',[-18 18], ...
    'YLimits',[-18 18], ...
    'ShowReferenceConstellation',false);
constDiagram0(uneqChanOut,eqChanOut)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Zero-noise Channel Output contains 2 objects of type line. These objects represent Unequalized, Equalized.

Сквозная симуляция ссылки

Моделируемая сквозная ссылка связи соответствует передачам, заданным DOCSIS. Эти вспомогательные функции и объекты используются:

  • docsisConfig: объект строения, который захватывает все параметры, влияющие на генерацию сигналов

  • docsisMACFrameConfig: объект строения, являющийся подкомпонентом docsisConfig и задает структуру системы координат MAC

  • helperDocsisConstellation: возвращает порядок модуляции (общее количество точек созвездия) и отображение символов, заданное имя модуляции

  • helperDocsisGenerateSourceData: генерирует случайный пакет бит данных, включая MAC системы координат строения, согласно параметрам, заданным объектом строения

  • helperDocsisTxреализует цепь обработки сигналов передатчика; принимает пакетные данные и биты преамбулы в качестве входных параметров и возвращает как выборки передатчика основной полосы, так и другие выходные выходы промежуточных блоков (см. блок-схему передатчика)

  • helperDocsisChannel: применяет пример кабельного канала со статическими значениями отвода, заданными ранее

  • helperDocsisRxреализует цепь обработки сигналов приемника; принимает выход канала за вход и возвращает декодированные биты данных, а также другие выходные выходы промежуточных блоков (см. блок-схему приемника)

Запустите симуляцию ссылки с областью значений значений Eb/No. Для каждого Eb/No сгенерируйте случайные исходные данные, передайте их через передатчик и канал и извлеките биты в приемнике. Затем эти биты сравниваются с исходными данными для проверки на битовые ошибки. Переходите к следующему значению Eb/No, когда собранные битовые ошибки или общее количество отправленных бит превышает заданный порог.

Создайте объект строения и список всех параметров:

docsisCfg = docsisConfig( ...
    'PayloadModulation','16-QAM', ...
    'RSMessageLength',251, ...
    'RSCodewordLength',255)
docsisCfg = 
  docsisConfig with properties:

                           MACFrame: [1x1 docsisMACFrameConfig]
                           NumBytes: 2000
                     ModulationRate: 1280000
                          RSEnabled: 1
                    RSMessageLength: 251
                   RSCodewordLength: 255
                 InterleaverNumRows: 4
                      ScramblerSeed: [1 1 0 1 1 1 1 1 0 0 1 1 0 0 1]
                     PreambleLength: 1536
                 PreambleModulation: 'QPSK0'
                  PayloadModulation: '16-QAM'
                   PreEqualizerTaps: [24x1 double]
                   RaisedCosineSpan: 10
                   SamplesPerSymbol: 2
                         SampleRate: 2560000

   Read-only properties:
                  PreEqualizerDelay: 7
            PreambleModulationOrder: 4
    PreambleModulationBitsPerSymbol: 2
        PreambleModulationSymbolMap: [1x4 double]
             PayloadModulationOrder: 16
     PayloadModulationBitsPerSymbol: 4
         PayloadModulationSymbolMap: [1x16 double]
               SignalPowerPerSample: 80

% Validate configuration parameters after they're all set
validateConfig(docsisCfg);

Пример последовательности преамбулы воспроизводит последовательность, указанную в Приложении I к [4].

load('docsisExamplePreamble.mat')
prmbBits = examplePreamble(end-docsisCfg.PreambleLength+1:end);

Инициализируйте другие релевантные переменные и возможности визуализации:

% Max number of bit errors to collect and max number of bits to send
maxErr = 1e3;
maxBits = 1e6;
% Use an Eb/No range that results in meaningful BERs
EbNoRange = helperDocsisEbNoRange(docsisCfg.PayloadModulationOrder);
ber = zeros(size(EbNoRange));
berUncoded = zeros(size(EbNoRange));
% Initialize spectrum analyzer scope and constellation diagram scope
[specAnalyzer,constDiagram] = helperInitializeScopes(docsisCfg);
% Initialize AWGN channel
awgnChan = comm.AWGNChannel( ...
    'BitsPerSymbol',docsisCfg.PayloadModulationBitsPerSymbol, ...
    'SignalPower',docsisCfg.SignalPowerPerSample, ...
    'SamplesPerSymbol',docsisCfg.SamplesPerSymbol);

Запустите основной цикл:

for i = 1:length(EbNoRange)
    awgnChan.EbNo = EbNoRange(i);
    totalErr = 0; totalBits = 0;
    totalErrUncoded = 0; totalBitsUncoded = 0;
    while totalErr < maxErr && totalBits < maxBits
        % Generate source data bits
        srcData = helperDocsisGenerateSourceData(docsisCfg);
        % Transmitter signal processing
        [txrcOut,modIndexOut] = helperDocsisTx(srcData,prmbBits,docsisCfg);
        % Apply example cable channel and add Gaussian noise
        chanOut = helperDocsisChannel(txrcOut,docsisCfg.SamplesPerSymbol);
        awgnOut = awgnChan(chanOut);
        % Receiver signal processing
        [decoderOut,rxrcOut,demodOut] = helperDocsisRx(awgnOut,docsisCfg);
        
        % Helper function to show visualization on the scopes
        helperShowScopes(specAnalyzer,constDiagram,txrcOut,rxrcOut,awgnOut, ...
            EbNoRange(i),docsisCfg)
        
        % Tally bit errors and total bits sent
        [nErr,nBits,nErrUncoded,nBitsUncoded] = helperBitErrors( ...
            srcData,decoderOut,modIndexOut,demodOut,docsisCfg);
        totalErr = totalErr + nErr;
        totalBits = totalBits + nBits;
        totalErrUncoded = totalErrUncoded + nErrUncoded;
        totalBitsUncoded = totalBitsUncoded + nBitsUncoded;
    end
    % Compute BER
    ber(i) = totalErr / totalBits;
    berUncoded(i) = totalErrUncoded / totalBitsUncoded;
end

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Eb/No = 14 dB contains 2 objects of type line. These objects represent Tx Filter Output, Channel Output.

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Eb/No = 14 dB contains 6 objects of type line. These objects represent Channel Output, Rx Filter Output (Preamble), Rx Filter Output (Payload).

Анализатор спектра показывает степени спектральную плотность сигналов на выходе передающего фильтра и на выходе кабеля канала. Сигнал выхода передающего фильтра был предварительно уравнен, и, таким образом, его спектр имеет возвратно-поступательную форму отклика канала (см. Модель канала) в основной доле. Боковые лепестки и выемки обусловлены фильтрацией приподнятого косинуса. После фильтрации канала выходной сигнал канала имеет плоский спектр в своей полосе пропускания, и степень выходного сигнала увеличивается из-за AWGN.

Схема созвездия показывает три набора символов: выход канала, получение выходных символов преамбулы фильтра и получение выходных символов полезной нагрузки фильтра. Выходные символы канала не совпадают с ссылочными созвездиями; после того, как приемник поднял фильтр косинуса, они разделяются на кластеры с центром в ссылочных точках созвездия. Символы преамбулы всегда модулируются с помощью QPSK, и они могут отличаться от модуляции символов полезной нагрузки. Обратите внимание, что примеры бит преамбулы из DOCSIS не распределены независимо и равномерно - они приводят к меньшему количеству символов созвездий в верхнем левом скоплении, чем другие три кластера. Биты полезной нагрузки, однако, в основном генерируются случайным образом, поэтому они приводят к равномерно распределенным кластерам точек.

Постройте график BER относительно Eb/No

Постройте график эмпирически найденного BER относительно значений Eb/No и сравните их с теоретическими результатами. Рисунок опускает теоретические кривые для порядков модуляции нечетных степеней 2, потому что стандарт DOCSIS использует другие символьные созвездия, чем те, которые приняты в bercoding и berawgn функций. Для четных степеней 2 функции берут те же созвездия, что и симуляции, и, таким образом, симуляция сопоставима с теорией.

Кривые BER показывают, что как закодированные, так и незакодированные частоты ошибок соответствуют теории достаточно хорошо. Для некоторых комбинаций (n, k) в кодах Рида-Соломона коэффициент усиления кодирования может появляться только в более высокой области значений Eb/No, и иногда закодированный BER может даже быть выше, чем незакодированный BER при низком Eb/No. Это ожидаемое поведение кодов R-S.

Чтобы получить более точный моделируемый BER при более высоком Eb/No, где ошибки очень редки, увеличьте значения maxErr и maxBits в предыдущем разделе и повторите симуляцию. Это позволяет системе собирать больше битовых ошибок для каждого Eb/No. Если при значении Eb/No ошибок нет, кривая BER опускает эту точку данных.

% Find theoretical uncoded and coded BER
berUncodedTheoretical = berawgn(EbNoRange, ...
    'qam',docsisCfg.PayloadModulationOrder);
% Theoretical BER with R-S coding is only available when the codeword
% length is of the form 2^m-1.
if mod(log2(docsisCfg.RSCodewordLength+1),1) == 0
    berTheoretical = bercoding(EbNoRange,'RS','hard', ...
        docsisCfg.RSCodewordLength,docsisCfg.RSMessageLength, ...
        'qam',docsisCfg.PayloadModulationOrder);
else
    berTheoretical = [];
end

% Plot the curves
figure
semilogy(EbNoRange,berUncoded,'m*-')
hold on
semilogy(EbNoRange,ber,'go-')
legendText = {'Uncoded simulation','Coded simulation'};
if mod(docsisCfg.PayloadModulationBitsPerSymbol,2) == 0
    semilogy(EbNoRange,berUncodedTheoretical,'r--')
    legendText{end+1} = 'Uncoded theoretical';
    if ~isempty(berTheoretical)
        semilogy(EbNoRange,berTheoretical,'b--')
        legendText{end+1} = 'Coded theoretical';
    end
end
grid on

if docsisCfg.RSEnabled
    title(sprintf('DOCSIS BER - Upstream TDMA, %s, R-S (%d,%d)', ...
        docsisCfg.PayloadModulation, ...
        docsisCfg.RSCodewordLength,docsisCfg.RSMessageLength))
else
    title(sprintf('DOCSIS BER - Upstream TDMA, %s, uncoded', ...
        docsisCfg.PayloadModulation))
end
xlabel('Eb/No (dB)')
ylabel('BER')
legend(legendText,'Location','southwest')

Figure contains an axes. The axes with title DOCSIS BER - Upstream TDMA, 16-QAM, R-S (255,251) contains 4 objects of type line. These objects represent Uncoded simulation, Coded simulation, Uncoded theoretical, Coded theoretical.

Дальнейшие исследования

Измените параметры docsisCfg чтобы увидеть, как они влияют на выход. Например, измените скорость модуляции и кодирования и повторите симуляции, чтобы увидеть, какой эффект они оказывают на эффективность BER системы. Измените фильтр приподнятого косинуса, выборки на символ и частоту дискретизации, чтобы увидеть, как они влияют на визуализацию.

Ссылки

[1] CM-SP-PHYv4.0-I02-200429: Спецификации служебного интерфейса DOCSIS ® 4.0; Спецификация физического слоя. Cable Television Laboratories, Inc., 2019-2020.

[2] CM-SP-MULPIv4.0-I02-200429: Спецификации сервисного интерфейса DOCSIS ® 4.0; Спецификация интерфейса MAC и протоколов верхнего слоя. Cable Television Laboratories, Inc., 2019-2020.

[3] CM-GL-PNMP-V03-160725: DOCSIS ® Лучшие Практики and Guidelines; Лучшие практики ПНМ: сети ГФУ (DOCSIS 3.0). Cable Television Laboratories, Inc., 2010-2016.

[4] CM-SP-PHYv3.0-C01-171207: Спецификации сервисного интерфейса DOCSIS ® 3.0; Спецификация физического слоя. Cable Television Laboratories, Inc., 2006-2017.

Для просмотра документации необходимо авторизоваться на сайте