exponenta event banner

dvbs2BitRecover

Восстановление битов для DVB-S2 кадров PL

    Описание

    пример

    [BITS,NUMFRAMESLOST] = dvbs2BitRecover(RXFRAME,NVAR) восстанавливает пользовательские пакеты (UP) или непрерывный поток данных, BITSи количество потерянных кадров основной полосы частот, NUMFRAMESLOST. Вход RXFRAME - принятые комплексные синфазные квадратурные (IQ) символы в виде кадров физического уровня (PL) передачи цифрового видеовещательного спутника второго поколения (DVB-S2). Вход NVAR - оценка дисперсии шума, используемая для вычисления мягких битов.

    пример

    [BITS,NUMFRAMESLOST,PKTCRCSTATUS] = dvbs2BitRecover(RXFRAME,NVAR) также возвращает состояние проверки циклическим избыточным кодом UP (CRC).

    пример

    [BITS,NUMFRAMESLOST] = dvbs2BitRecover(RXFRAME,NVAR,EARLYTERM) использует критерий завершения декодирования с низкой плотностью проверки на четность (LDPC), EARLYTERM, для восстановления битов данных, BITS.

    Примеры

    свернуть все

    Восстановление пакетов пользователя (UP) для кадров нескольких физических уровней (PL) в одном транспортном потоке Передача спутникового цифрового видеовещания второго поколения (DVB-S2).

    В этом примере используются MAT-файлы с матрицами четности LDPC. Если MAT-файлы недоступны по пути, загрузите и распакуйте MAT-файлы, введя этот код в командной строке MATLAB.

    if ~exist('dvbs2xLDPCParityMatrices.mat','file')
        if ~exist('s2xLDPCParityMatrices.zip','file')
            url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip';
            websave('s2xLDPCParityMatrices.zip',url);
            unzip('s2xLDPCParityMatrices.zip');
        end
    addpath('s2xLDPCParityMatrices');
    end

    Укажите количество кадров PL на поток. Создайте объект DVB-S2 System.

    nFrames = 2;
    s2WaveGen = dvbs2WaveformGenerator;

    Создайте битовый вектор информационных битов, data, конкатенированных TS UP.

    syncBits = [0 1 0 0 0 1 1 1]';    % Sync byte for TS packet is 47 Hex
    pktLen = 1496;                    % UP length without sync bits is 1496
    numPkts = s2WaveGen.MinNumPackets*nFrames;
    txRawPkts = randi([0 1],pktLen,numPkts);
    txPkts = [repmat(syncBits,1,numPkts); txRawPkts];
    data = txPkts(:);

    Формирование DVB-S2 формы сигнала во временной области с использованием входных информационных битов. Промойте фильтр передачи, чтобы обработать задержку фильтра и восстановить полный последний кадр.

    txWaveform = [s2WaveGen(data); flushFilter(s2WaveGen)];

    Добавление аддитивного белого гауссова шума (AWGN) к генерируемому сигналу.

    sps = s2WaveGen.SamplesPerSymbol; 
    EsNodB = 1;
    snrdB = EsNodB - 10*log10(sps);
    rxIn = awgn(txWaveform,snrdB,'measured');

    Создайте фильтр приемника с увеличенным косинусом.

    rxFilter = comm.RaisedCosineReceiveFilter( ...
          'RolloffFactor',s2WaveGen.RolloffFactor, ...
           'InputSamplesPerSymbol',sps,...
           'DecimationFactor',sps);
    s = coeffs(rxFilter);
    rxFilter.Gain = sum(s.Numerator);

    Примените согласованную фильтрацию и удалите задержку фильтра.

    filtOut = rxFilter(rxIn);
    rxFrame = filtOut(rxFilter.FilterSpanInSymbols+1:end);

    Восстановление UP. Отображение количества потерянных кадров и состояния проверки циклическим избыточным кодом UP (CRC).

    [bits,FramesLost,pktCRCStat] = dvbs2BitRecover(rxFrame,10^(-EsNodB/10));
    disp(FramesLost)
         0
    
    disp(pktCRCStat)
        {20×1 logical}
    

    Восстановление пользовательских битов в передаче цифрового широковещательного спутникового вещания второго поколения (DVB-S2) с множеством входных обобщенных потоков (GS) с переменной модуляцией и схемой кодирования.

    В этом примере используются MAT-файлы с матрицами четности LDPC. Если MAT-файлы недоступны по пути, загрузите и распакуйте MAT-файлы, введя этот код в командной строке MATLAB.

    if ~exist('dvbs2xLDPCParityMatrices.mat','file')
        if ~exist('s2xLDPCParityMatrices.zip','file')
            url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip';
            websave('s2xLDPCParityMatrices.zip',url);
            unzip('s2xLDPCParityMatrices.zip');
        end
    addpath('s2xLDPCParityMatrices');
    end

    Укажите количество кадров физического уровня (PL) на поток.

    nFrames = 1;

    Создайте объект DVB-S2 System с переменным кодированием и конфигурацией модуляции для многовходовой GS. Укажите схему модуляции и скорость прямого исправления ошибок (FEC) (MODCOD) и длину поля данных (DFL).

    s2WaveGen = dvbs2WaveformGenerator;
    s2WaveGen.StreamFormat = "GS";
    s2WaveGen.NumInputStreams = 3;
    s2WaveGen.MODCOD = [10 15 6];    % QPSK 8/9, 8PSK 5/6, and QPSK 2/3 
    s2WaveGen.DFL = [44500 51387 42960];

    Создайте битовый вектор входных информационных битов для каждого входного потока.

    data =  cell(s2WaveGen.NumInputStreams,1);
    for i = 1:s2WaveGen.NumInputStreams
       data{i} = randi([0 1],s2WaveGen.DFL(i)*nFrames,1);
    end

    Формирование DVB-S2 формы сигнала во временной области с входными информационными битами. Промойте фильтр передачи, чтобы обработать задержку фильтра и восстановить полный кадр.

    txWaveform = [s2WaveGen(data); flushFilter(s2WaveGen)];

    Добавление аддитивного белого гауссова шума (AWGN) к генерируемому сигналу. Укажите выборки на символ для фильтра основной полосы частот.

    sps = s2WaveGen.SamplesPerSymbol;
    EsNodB = 10;
    snrdB = EsNodB - 10*log10(sps);
    rxIn = awgn(txWaveform,snrdB,'measured');

    Создайте фильтр приемника с увеличенным косинусом.

    rxFilter = comm.RaisedCosineReceiveFilter( ...
          'RolloffFactor',s2WaveGen.RolloffFactor, ...
           'InputSamplesPerSymbol',sps,...
           'DecimationFactor',sps);
    s = coeffs(rxFilter);
    rxFilter.Gain = sum(s.Numerator);

    Примените согласованную фильтрацию и удалите задержку фильтра.

    filtOut = rxFilter(rxIn);
    rxFrame = filtOut(rxFilter.FilterSpanInSymbols+1:end);

    Восстановление пользовательских битов. Разрешить раннее завершение декодера кодов четности низкой плотности (LDPC).

    [bits,FramesLost] = dvbs2BitRecover(rxFrame,10^(-EsNodB/10),1);

    Отображение количества потерянных кадров и количества битовых ошибок в каждом потоке.

    fprintf('Number of frames lost = %d\n',FramesLost)
    Number of frames lost = 0
    
    for i = 1:s2WaveGen.NumInputStreams
            fprintf('Number of bit errors in stream %d = %d\n',i, ...
                sum(data{i}~=bits{i}))
    end
    Number of bit errors in stream 1 = 0
    Number of bit errors in stream 2 = 0
    Number of bit errors in stream 3 = 0
    

    Восстановление пакетов пользователя (UP) в передаче с множеством входных транспортных потоков (TS) цифрового широковещательного спутникового вещания второго поколения (DVB-S2) с постоянным кодированием и модуляцией.

    В этом примере используются MAT-файлы с матрицами четности LDPC. Если MAT-файлы недоступны по пути, загрузите и распакуйте MAT-файлы, введя этот код в командной строке MATLAB.

    if ~exist('dvbs2xLDPCParityMatrices.mat','file')
        if ~exist('s2xLDPCParityMatrices.zip','file')
            url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip';
            websave('s2xLDPCParityMatrices.zip',url);
            unzip('s2xLDPCParityMatrices.zip');
        end
    addpath('s2xLDPCParityMatrices');
    end

    Укажите количество кадров физического уровня (PL) на поток.

    numFrames = 1;

    Создание объекта DVB-S2 System с постоянным кодированием и конфигурацией модуляции для многовходовой TS. Укажите формат кадра с коротким прямым исправлением ошибок (FEC) и включите синхронизацию входного потока (ISSY).

    s2WaveGen = dvbs2WaveformGenerator;
    s2WaveGen.NumInputStreams = 3;
    s2WaveGen.FECFrame = "short";
    s2WaveGen.MODCOD = 10;       % QPSK 8/9
    s2WaveGen.DFL   = 13920;
    s2WaveGen.ISSYI = true;

    Создайте битовый вектор информационных битов конкатенированных TS UP.

    syncBits = [0 1 0 0 0 1 1 1]';      % Sync byte for TS packet is 47 Hex
    pktLen = 1496;                      % UP length without sync bits is 1496
    data =  cell(1,s2WaveGen.NumInputStreams);
    for i = 1:s2WaveGen.NumInputStreams
       numPkts = s2WaveGen.MinNumPackets(i)*numFrames;
       txRawPkts = randi([0 1],pktLen,numPkts);
       ISSY = randi([0 1],16,numPkts);   % ISCRFormat is 'short' by default
                                         % 'short' implies the default length of ISSY as 2 bytes
       txPkts = [repmat(syncBits,1,numPkts); txRawPkts; ISSY]; % ISSY is appended at the end of UP
       data{i} = txPkts(:);
    end

    Формирование DVB-S2 формы сигнала во временной области с использованием входных информационных битов. Промойте фильтр передачи, чтобы обработать задержку фильтра и восстановить полный кадр.

    txWaveform = [s2WaveGen(data); flushFilter(s2WaveGen)];

    Добавление аддитивного белого гауссова шума (AWGN) к генерируемому сигналу. Укажите выборки на символ для фильтра основной полосы частот.

    sps = s2WaveGen.SamplesPerSymbol;
    EsNodB = 12;
    snrdB = EsNodB - 10*log10(sps);
    rxIn = awgn (txWaveform,snrdB,'measured');

    Создайте фильтр приемника с увеличенным косинусом.

    rxFilter = comm.RaisedCosineReceiveFilter( ...
          'RolloffFactor',s2WaveGen.RolloffFactor, ...
           'InputSamplesPerSymbol',sps,...
           'DecimationFactor', sps);
    s = coeffs(rxFilter);
    rxFilter.Gain = sum(s.Numerator);

    Примените согласованную фильтрацию и удалите задержку фильтра.

    filtOut = rxFilter(rxIn);
    rxFrame = filtOut(rxFilter.FilterSpanInSymbols+1:end);

    Восстановление UP. Отображение количества потерянных кадров и количества битовых ошибок в каждом потоке.

    [bits,FramesLost,pktCRCStat] = dvbs2BitRecover(rxFrame,10^(-EsNodB/10));
    fprintf('Number of frames lost = %d\n',FramesLost)
    Number of frames lost = 0
    
    for i = 1:s2WaveGen.NumInputStreams
        fprintf('Number of bit errors in stream %d = %d\n',i, ...
        numel(pktCRCStat{i})-sum(pktCRCStat{i}))
    end
    Number of bit errors in stream 1 = 0
    Number of bit errors in stream 2 = 0
    Number of bit errors in stream 3 = 0
    

    Входные аргументы

    свернуть все

    Принятые IQ символы из кадров PL DVB-S2 передачи с одним входом или с множеством входов, заданные как вектор столбца. RXFRAME может содержать один или несколько кадров PL.

    Длина RXFRAME зависит от значения свойств FECFrame, MODCOD, и HasPilots из dvbs2WaveformGenerator object™ системы.

    Типы данных: double
    Поддержка комплексного номера: Да

    Оценка дисперсии шума, которую функция добавляет к входным IQ символам, заданным как неотрицательный скаляр. NVAR используется в качестве коэффициента масштабирования для вычисления мягких битов из IQ символов.

    При указании NVAR как 0функция использует значение 1e-5, которое соответствует отношению сигнал/шум (SNR) 50 дБ.

    Типы данных: double

    Флаг для досрочного завершения декодера LDPC при выполнении всех проверок четности, указанный как установленный логический 1 (true) или 0 (false). Если установлено значение 1 (true), декодер LDPC завершается, когда выполняются все проверки четности.

    При установке этого значения в значение 0 (false), максимальный предел итерации декодирования равен 50.

    Типы данных: logical

    Выходные аргументы

    свернуть все

    Восстановленные биты данных, возвращенные в виде массива ячеек векторов столбцов. Каждый элемент массива ячеек имеет тип данных int8. Эти выходные данные могут быть либо UP, либо универсальным потоком данных, в зависимости от StreamFormat имущества dvbs2WaveformGenerator Системный объект.

    Для передачи потока с множеством входов каждый элемент матрицы ячеек соответствует индивидуальному входному потоку.

    Типы данных: cell

    Количество потерянных кадров основной полосы, возвращаемых как неотрицательное целое число. Если CRC заголовка основной полосы завершается неуспешно, кадр считается потерянным.

    Типы данных: double

    Состояние UP CRC, возвращаемое в виде массива ячеек векторов столбцов. Каждый элемент массива ячеек имеет тип данных logical. Для передачи потока с множеством входов каждый элемент матрицы ячеек соответствует индивидуальному входному потоку.

    Зависимости

    PKTCRCSTATUS применяется только для входных потоков, где значение UPL имущество dvbs2WaveformGenerator Системный объект не равен нулю.

    Типы данных: cell

    Ссылки

    [1] Стандарт ETSI EN 302 307-1 V1.4.1 (2014-11). цифровое видеовещание (DVB); Структура кадров второго поколения, системы кодирования и модуляции каналов для вещания, интерактивные услуги, сбор новостей и другие широкополосные спутниковые приложения (DVB-S2).

    Расширенные возможности

    Создание кода C/C + +
    Создайте код C и C++ с помощью MATLAB ® Coder™

    .

    См. также

    Представлен в R2021a