dvbs2BitRecover

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

    Описание

    пример

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

    пример

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

    пример

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

    Примеры

    свернуть все

    Восстановите пользовательские пакеты (ВЗЛЕТЫ) для нескольких систем координат физического уровня (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.

    nFrames = 2;
    s2WaveGen = dvbs2WaveformGenerator;

    Создайте битовый вектор информационных битов, data, из конкатенированных ВЗЛЕТОВ TS.

    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);

    Восстановите ВЗЛЕТЫ. Отобразите потерянное количество кадров и состояние контроля циклическим избыточным кодом (CRC) UP.

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

    Восстановите пользовательские биты в мультивходном Втором поколении Спутника Цифрового телевидения типового потока (GS) (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) на поток.

    nFrames = 1;

    Создайте Системный объект DVB-S2 с переменной настройкой кодирования и модуляции для мультивхода 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
    

    Восстановите пользовательские пакеты (ВЗЛЕТЫ) в мультивходном Втором поколении Спутника Цифрового телевидения транспортного потока (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 с постоянной настройкой кодирования и модуляции для мультивхода TS. Задайте короткий формат системы координат прямого исправления ошибок (FEC) и включите входную потоковую синхронизацию (ISSY).

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

    Создайте немного вектора информационных битов конкатенированных ВЗЛЕТОВ TS.

    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);

    Восстановите ВЗЛЕТЫ. Отобразите потерянное количество кадров и количество битовых ошибок в каждом потоке.

    [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 ложь). Когда установлено в 1 TRUE), декодер LDPC отключен, когда всем проверкам четности удовлетворяют.

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

    Типы данных: логический

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

    свернуть все

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

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

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

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

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

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

    Зависимости

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

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

    Ссылки

    [1] EN 302 307-1 V1.4.1 Стандарта ETSI (2014-11). Цифровое телевидение (DVB); Структура Структурирования Второго поколения, Кодирование Канала и Системы Модуляции для Широковещательной передачи, Interactive Services, Сбора Новостей и других Широкополосных Спутниковых Приложений (DVB-S2).

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

    Генерация кода C/C++
    Генерация кода C и C++ с помощью MATLAB® Coder™.

    Смотрите также

    Введенный в R2021a