В этом примере показано, как реализовать физический уровень (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, показанный в этом изображении, выполняет 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')
% 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: [-8.0000 - 8.0000i ... ] PayloadModulationOrder: 16 PayloadModulationBitsPerSymbol: 4 PayloadModulationSymbolMap: [-4.0000 - 4.0000i ... ] 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: 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.