Восходящий поток DOCSIS симуляция ссылки TDMA

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

Введение

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

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

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

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

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

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

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

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

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

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

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

Это изображение показывает цепь обработки сигналов передатчика. Биты входных данных подвергаются кодированию Тростника-Solomon, перемежению, скремблированию, предварительному ожиданию преамбулы, 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) в кодах Тростника-Solomon, усиление кодирования может только появиться в выше области значений 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: Data-Over-Cable Service Interface Specifications DOCSIS® 4.0; спецификация физического уровня. Cable Television Laboratories, Inc., 2019-2020.

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

[3] GL PNMP V03 160725 CM: DOCSIS® Best Practices и инструкции; лучшые практики PNM: сети HFC (DOCSIS 3.0). Cable Television Laboratories, Inc., 2010-2016.

[4] CM SP PHYv3.0 C01 171207: Data-Over-Cable Service Interface Specifications DOCSIS® 3.0; спецификация физического уровня. Cable Television Laboratories, Inc., 2006-2017.

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