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) Системный объект Digital Video Broadcasting, а затем укажите его свойства.

    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 UPs.

    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;

    Создайте Digital Video Broadcasting Satellite Second Генерации extended (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 функция объекта.

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