exponenta event banner

Моделирование восходящего канала TDMA DOCSIS

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

Введение

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

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

  • Моделирование основной полосы PHY системы связи DOCSIS

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

  • Создает статистику для сравнения производительности модели по частоте ошибок с теоретическими результатами.

Модель системы

На этом рисунке показан поток моделирования высокого уровня. Отдельные блоки будут объяснены более подробно в следующих параграфах.

Структура кадров MAC

Формат заголовка MAC, показанный на этом рисунке, соответствует DOCSIS [2]. Поля расширенного заголовка и блока данных пакетного протокола (Packet PDU) в структуре кадра используют случайные биты.

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

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

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

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

Вспомогательная функция helperDocsisChannel моделирует многолучевой канал со статическим откликом канала и стохастическим аддитивным белым гауссовым шумом (AWGN) для воспроизведения практического кабельного канала, показанного на рисунках 40-42 из [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; Спецификация физического уровня. Лаборатории кабельного телевидения, Inc., 2019-2020.

[2] CM-SP-MULPIv4.0-I02-200429: Спецификации интерфейса услуг передачи данных по кабелю DOCSIS ® 4.0; Спецификация интерфейса протоколов MAC и верхнего уровня. Лаборатории кабельного телевидения, Inc., 2019-2020.

[3] CM-GL-PNMP-V03-160725: Передовые практики и рекомендации DOCSIS ®; Передовая практика PNM: сети HFC (DOCSIS 3.0). Лаборатории кабельного телевидения, Inc., 2010-2016.

[4] CM-SP-PHYv3.0-C01-171207: Спецификации интерфейса услуг передачи данных по кабелю DOCSIS ® 3.0; Спецификация физического уровня. Лаборатории кабельного телевидения, Inc., 2006-2017.