В этом примере показано, как реализовать физический уровень (PHY) спецификации интерфейса услуг передачи данных по кабелю (DOCSIS ®) в [1][2] рабочего режима TDMA в восходящем направлении.
DOCSIS определяет международные стандарты для высокоскоростных систем передачи данных по кабелям и определяет различные режимы работы. Этот пример фокусируется на восходящем режиме множественного доступа с временным разделением каналов (TDMA), где используется квадратурная амплитудная модуляция одной несущей (SC-QAM). Этот режим доступа совместим со всеми версиями DOCSIS, включая 4.0. Пример реализует гибкую цепочку обработки PHY-сигнала путем включения объекта конфигурации, который задает множество конфигурируемых параметров. Он также включает в себя формат заголовка уровня управления доступом к среде (MAC) и моделирует пакеты данных, соответствующие параметрам конфигурации MAC.
Используя функции, доступные в Communications Toolbox™ и Signal Processing Toolbox™, пример:
Моделирование основной полосы PHY системы связи DOCSIS
Включает вспомогательные функции для настройки объектов и использует эти объекты для задания, проверки и организации параметров конфигурации
Создает статистику для сравнения производительности модели по частоте ошибок с теоретическими результатами.
На этом рисунке показан поток моделирования высокого уровня. Отдельные блоки будут объяснены более подробно в следующих параграфах.

Формат заголовка 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')

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

Это изображение показывает идеальную цепочку обработки сигнала приемника, которая предполагает идеальную синхронизацию. Входные принятые символы основной полосы частот подвергаются обработке, которая изменяет на обратную операции передатчика для восстановления переданных битов данных и вычисления частоты битовых ошибок (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)

Смоделированная сквозная линия связи соответствует передачам, указанным 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


Анализатор спектра показывает спектральную плотность мощности сигналов на выходе фильтра передачи и на выходе кабельного канала. Выходной сигнал фильтра передачи предварительно выровнен, и, таким образом, его спектр имеет обратную форму отклика канала (см. модель канала) в основном лепестке. Боковые лепестки и выемки обусловлены повышенной косинусной фильтрацией. После канальной фильтрации выходной сигнал канала имеет плоский спектр в своей полосе пропускания, и мощность внеполосного сигнала увеличивается из-за AWGN.
Диаграмма созвездий показывает три набора символов: выходной канал, выходные символы преамбулы фильтра приема и выходные символы полезной нагрузки фильтра приема. Выходные символы канала не выравниваются с опорными совокупностями; после того как приемник повысил косинусную фильтрацию, они разделяются на кластеры, центрированные в опорных точках созвездия. Символы преамбулы всегда модулируются с помощью QPSK, и они могут отличаться от модуляции символов полезной нагрузки. Обратите внимание, что биты преамбулы примера из DOCSIS не распределены независимо и равномерно - они приводят к меньшему количеству символов созвездий в верхнем левом кластере, чем три других кластера. Биты полезной нагрузки, однако, в основном генерируются случайным образом, поэтому они приводят к равномерно распределенным кластерам точек.
Постройте график эмпирически найденного 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')

Изменение параметров 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.