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
          ⋮
    
    

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

    Получите информацию от 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 объектная функция.

    Создайте Консультативный Комитет по Системам передачи и обработки данных Пробела (CCSDS) Системный объект Telemetry(TM). Установите тип формы волны как 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
                    ChannelCoding: "LDPC"
        NumBitsInInformationBlock: 1024
                         CodeRate: "1/2"
                     IsLDPCOnSMTF: false
    
       Digital modulation and filter
                       Modulation: "QPSK"
               PulseShapingFilter: "root raised cosine"
                    RolloffFactor: 0.3500
              FilterSpanInSymbols: 10
                 SamplesPerSymbol: 10
    
      Use get to show all properties
    

    Задайте количество передаваемых кадров.

    numTF = 20;

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

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

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

    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 ложь)

      • "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