exponenta event banner

flushFilter

Фильтр заподлицо

    Синтаксис

    Описание

    пример

    out = flushFilter(obj) пропускает нули через фильтр передачи во входном генераторе формы сигнала для очистки выборок остаточных данных, которые остаются в состоянии фильтра. Функция возвращает выборку остаточных данных.

    Необходимо вызвать системный объект генератора входных сигналов (не только создать объект) перед использованием flushFilter объектная функция. Количество нулей, прошедших через фильтр передачи, зависит от задержки фильтра. Эта объектная функция необходима для моделирования приемника, чтобы восстановить все биты в последнем кадре физического уровня.

    Примеры

    свернуть все

    Получение информации из dvbs2WaveformGenerator Системный объект с помощью info функция. Затем извлеките остаточные выборки фильтра с помощью flushFilter объектная функция.

    В этом примере используются 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), а затем укажите его свойства.

    s2WaveGen = dvbs2WaveformGenerator;
    s2WaveGen.NumInputStreams = 2;
    s2WaveGen.MODCOD = [21 16];
    s2WaveGen.DFL   = 47008;
    s2WaveGen.ISSYI = true;
    s2WaveGen.SamplesPerSymbol = 2;
    disp(s2WaveGen)
      dvbs2WaveformGenerator with properties:
    
               StreamFormat: "TS"
            NumInputStreams: 2
                   FECFrame: "normal"
                     MODCOD: [21 16]
                        DFL: 47008
              ScalingMethod: "outer radius as 1"
                  HasPilots: 0
              RolloffFactor: 0.3500
        FilterSpanInSymbols: 10
           SamplesPerSymbol: 2
                      ISSYI: true
                 ISCRFormat: "short"
    
      Show all properties
    

    Получите характеристическую информацию о генераторе сигнала DVB-S2.

    info(s2WaveGen)
    ans = struct with fields:
          ModulationScheme: {'16APSK'  '8PSK'}
        LDPCCodeIdentifier: {'5/6'  '8/9'}
    
    

    Создайте битовый вектор битов входной информации, 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
    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)
    ans = 20×1 complex
    
       0.0153 + 0.4565i
       0.2483 + 0.5535i
       0.3527 + 0.3972i
       0.3541 - 0.0855i
       0.3505 - 0.4071i
       0.4182 - 0.1962i
       0.5068 + 0.0636i
       0.4856 - 0.1532i
       0.3523 - 0.4153i
       0.1597 - 0.2263i
          ⋮
    
    

    Восстановление пакетов пользователя (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}
    

    Получение информации из dvbs2xWaveformGenerator Системный объект с помощью info функция. Затем извлеките остаточные выборки фильтра с помощью flushFilter объектная функция.

    В этом примере используются 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 = 2;

    Создайте объект цифровой системы спутникового вещания второго поколения (DVB-S2X) и укажите его свойства. Используйте метод квантирования времени и режим конфигурации переменного кодирования и модуляции.

    s2xWaveGen = dvbs2xWaveformGenerator();
    s2xWaveGen.HasTimeSlicing = true;
    s2xWaveGen.NumInputStreams = 2;
    s2xWaveGen.PLSDecimalCode = [135 145];   % QPSK 9/20 and 8PSK 25/36
    s2xWaveGen.DFL = [18048 44656];
    s2xWaveGen.PLScramblingIndex = [0 1];
    disp(s2xWaveGen)
      dvbs2xWaveformGenerator with properties:
    
               StreamFormat: "TS"
             HasTimeSlicing: true
            NumInputStreams: 2
             PLSDecimalCode: [135 145]
                        DFL: [18048 44656]
          PLScramblingIndex: [0 1]
              RolloffFactor: 0.3500
        FilterSpanInSymbols: 10
           SamplesPerSymbol: 4
                      ISSYI: false
    
      Show all properties
    

    Получите характеристическую информацию о генераторе сигнала DVB-S2X.

    info(s2xWaveGen)
    ans = struct with fields:
                  FECFrame: {'normal'  'normal'}
          ModulationScheme: {'QPSK'  '8PSK'}
        LDPCCodeIdentifier: {'9/20'  '25/36'}
    
    

    Создайте битовый вектор битов входной информации, 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
    data =  cell(1, s2xWaveGen.NumInputStreams);
    for i = 1:s2xWaveGen.NumInputStreams
        numPkts = s2xWaveGen.MinNumPackets(i)*numFrames;
        txRawPkts = randi([0 1], pktLen, numPkts);
        txPkts = [repmat(syncBits, 1, numPkts); txRawPkts];
        data{i} = txPkts(:);
    end

    Формирование DVB-S2X формы сигнала во временной области с использованием информационных битов.

    txWaveform = s2xWaveGen(data);

    Проверьте выборки остаточных данных фильтра, которые остаются в задержке фильтра.

    flushFilter(s2xWaveGen)
    ans = 40×1 complex
    
      -0.2412 - 0.0143i
      -0.2619 - 0.0861i
      -0.2726 - 0.1337i
      -0.2511 - 0.1597i
      -0.1851 - 0.1680i
      -0.0780 - 0.1602i
       0.0448 - 0.1288i
       0.1598 - 0.0751i
       0.2482 - 0.0049i
       0.3026 + 0.0702i
          ⋮
    
    

    Получение информации из ccsdsTMWaveformGenerator Системный объект с помощью info функция. Затем извлеките остаточные выборки фильтра с помощью flushFilter объектная функция.

    Создание объекта системы телеметрии (TM) Консультативного комитета по системам космических данных (CCSDS). Установите тип сигнала как synchronization and channel coding с кодированием канала с низкой плотностью контроля четности (LDPC). Отображение свойств.

    tmWaveGen = ccsdsTMWaveformGenerator;
    tmWaveGen.WaveformSource = "synchronization and channel coding";
    tmWaveGen.ChannelCoding = "LDPC";
    tmWaveGen.NumBitsInInformationBlock = 1024;
    tmWaveGen.Modulation = "QPSK";
    tmWaveGen.CodeRate = "1/2";
    disp(tmWaveGen)
      ccsdsTMWaveformGenerator with properties:
    
                   WaveformSource: "synchronization and channel coding"
                    HasRandomizer: true
                           HasASM: true
                        PCMFormat: "NRZ-L"
    
       Channel coding properties:
                    ChannelCoding: "LDPC"
        NumBitsInInformationBlock: 1024
                         CodeRate: "1/2"
                     IsLDPCOnSMTF: false
    
       Digital modulation and filter properties:
                       Modulation: "QPSK"
               PulseShapingFilter: "root raised cosine"
                    RolloffFactor: 0.3500
              FilterSpanInSymbols: 10
                 SamplesPerSymbol: 10
    
      Use get to show all properties
    

    Укажите количество кадров передачи.

    numTF = 20;

    Получите характеристическую информацию о генераторе сигналов CCSDS TM.

    info(tmWaveGen)
    ans = struct with fields:
             ActualCodeRate: 0.5000
           NumBitsPerSymbol: 2
        SubcarrierFrequency: []
    
    

    Генерируют входные биты для генератора формы сигнала CCSDS TM, а затем генерируют форму сигнала.

    bits = randi([0 1], tmWaveGen.NumInputBits*numTF,1);
    waveform = tmWaveGen(bits);

    Проверьте выборки остаточных данных фильтра, которые остаются в задержке фильтра.

    flushFilter(tmWaveGen)
    ans = 100×1 complex
    
      -0.0772 - 0.0867i
      -0.0751 - 0.0859i
      -0.0673 - 0.0788i
      -0.0549 - 0.0654i
      -0.0388 - 0.0469i
      -0.0200 - 0.0250i
       0.0002 - 0.0012i
       0.0208 + 0.0227i
       0.0405 + 0.0453i
       0.0587 + 0.0653i
          ⋮
    
    

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

    свернуть все

    Объект генератора формы сигнала, указанный как dvbs2WaveformGenerator, dvbs2xWaveformGenerator, или ccsdsTMWaveformGenerator object™ системы.

    Для включения flushFilter функция объекта при указании obj в качестве ccsdsTMWaveformGenerator Системный объект, необходимо установить эти зависимости в ccsdsTMWaveformGenerator объект.

    • Установите WaveformSource свойство для "synchronization and channel coding".

    • Установите ChannelCoding к одному из этих значений.

      • "none"

      • "RS"

      • "turbo"

      • "LDPC" - В этом случае необходимо также установить IsLDPCOnSMTF свойство для 0 (false)

      • "convolutional" - В этом случае необходимо также установить ConvolutionalCodeRate свойство для любого из них "1/2" или "2/3"

      • "concatenated" - В этом случае необходимо также установить ConvolutionalCodeRate свойство для любого из них "1/2" или "2/3"

    • Установите Modulation свойство для любого из них "BPSK" или "QPSK".

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

    свернуть все

    Выборки остаточных данных, которые остаются в состоянии фильтра, возвращаемые в виде вектора столбца. Длина вектора столбца равна произведению SamplesPerSymbol и FilterSpanInSymbols свойства входного объекта, obj.

    При указании obj как dvbs2WaveformGenerator или dvbs2xWaveformGenerator Системный объект и NumInputStream Если значение свойства больше 1, поля данных, сгенерированные из различных входных потоков, объединяются методом циклического преобразования в один поток. Остаточные выборки кадра после процесса объединения удаляются.

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

    См. также

    Функции

    Объекты

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