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