dsp.HDLCICDecimation

Десятикратно уменьшите сигнал с помощью каскадного интегрально-гребенчатого фильтра — оптимизированный для генерации HDL-кода

Описание

dsp.HDLCICDecimation Система object™ десятикратно уменьшает входной сигнал при помощи децимирующего фильтра каскадной расчески интегратора (CIC). CIC-фильтры являются классом КИХ-фильтров линейной фазы, состоящих из части расчески и части интегратора. Структура децимирующего фильтра CIC состоит из разделов N каскадных интеграторов, фактора изменения уровня R, и затем разделов N каскадных гребенчатых фильтров. Для получения дополнительной информации о децимирующих фильтрах CIC, см. Алгоритмы.

Системный объект поддерживает и фиксируемые и переменные ставки децимации. Это обеспечивает архитектуру, подходящую для аппаратного развертывания и генерации HDL-кода.

Системный объект поддерживает действительные и комплексные входные параметры фиксированной точки.

Отфильтровать входные данные с оптимизированным HDL децимирующим фильтром CIC:

  1. Создайте dsp.HDLCICDecimation объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

cicDecFilt = dsp.HDLCICDecimation создает оптимизированный HDL Системный объект децимирующего фильтра CIC, cicDecFilt, со свойствами по умолчанию.

пример

cicDecFilt = dsp.HDLCICDecimation(Name,Value) создает фильтр с набором свойств с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Установите это свойство на true(1 ) управлять Системным объектом с переменным уровнем децимации, заданным decimFactor входной параметр. Установите это свойство на false(0) управлять объектом с фиксируемой ставкой децимации, заданной DecimationFactor свойство.

Задайте фактор децимации как целое число от 2 до 2 048. Это значение представляет уровень, с которым вы хотите десятикратно уменьшить вход.

Когда вы устанавливаете VariableDownsample свойство к true, установите это свойство на ожидаемый из максимума уровень децимации.

Задайте дифференциальную задержку части расчески фильтра как любой 1 или 2 циклы.

Задайте количество разделов или в интеграторе или в части расчески фильтра как целое число от 1 до 6.

Выберите тип данных отфильтрованных выходных данных.

  • 'Full precision' — Тип выходных данных перебрасывается парой слов длина, равная входному размеру слова плюс биты усиления.

  • 'Same word length as input' — Тип выходных данных перебрасывается парой слов длина, равная входному размеру слова.

  • 'Minimum section word lengths' — Тип выходных данных использует размер слова, который вы задаете в свойстве OutputWordLength. Когда вы выбираете эту опцию, Системный объект применяет алгоритм сокращения внутренне. Для получения дополнительной информации о сокращении, смотрите Тип Выходных данных. Эта опция не поддержана когда VariableDownsample true.

Размер слова выхода в виде целого числа от 2 до 104.

Примечание

Когда это значение меньше 7 значения выходных данных могут переполниться.

Зависимости

Чтобы включить это свойство, установите OutputDataType свойство к 'Minimum section word lengths'.

Установите это свойство на true компенсировать выходное усиление фильтра.

В зависимости от типа децимации вы задаете и значение этого свойства, задержка объектных изменений.

Для фиксированной децимации (VariableDownsample false):

  • С коррекцией усиления прочь, задержка объекта равняется 3 + такты N.

  • С коррекцией усиления на задержка объекта равняется 3 + N + 9 тактов.

Для переменной децимации (VariableDownsample true):

  • С коррекцией усиления прочь, задержка объекта равняется 4 + такты N.

  • С коррекцией усиления на задержка объекта равняется 4 + N + 9 тактов.

Когда вы устанавливаете это свойство на true, Системный объект ожидает reset входной параметр.

Использование

Описание

[dataOut,validOut] = cicDecFilt(dataIn,validIn) фильтры и десятикратно уменьшают входные данные с помощью фиксированного фактора децимации только когда validIn true.

[dataOut,validOut] = cicDecFilt(dataIn,validIn,decimFactor) фильтрует входные данные с помощью заданного переменного фактора децимации, decimFactor. VariableDownsample свойство должно быть установлено в true.

[dataOut,validOut] = cicDecFilt(dataIn,validIn,reset) фильтрует входные данные когда reset false и очищает внутренние состояния фильтра когда reset true. Системный объект ожидает reset аргумент только, когда вы устанавливаете свойство ResetIn на true.

[dataOut,validOut] = cicDecFilt(dataIn,validIn,decimFactor,reset) фильтрует входные данные когда reset false и очищает внутренние состояния фильтра когда reset true. VariableDownsample свойство установлено в true. Системный объект ожидает reset аргумент только, когда вы устанавливаете свойство ResetIn на true.

Входные параметры

развернуть все

Входные данные в виде целого числа со знаком или подписанного значения фиксированной точки с размером слова, меньше чем или равным 32.

Типы данных: int8 | int16 | int32 | fi
Поддержка комплексного числа: Да

Управляющий сигнал, который указывает, допустимо ли входные данные.

Когда validIn 1 TRUE), Системный объект получает значение от dataIn входной параметр. Когда validIn 0 ложь), Системный объект игнорирует dataIn входное значение.

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

Задает уровень децимации.

decimFactor значение должно иметь ufix12 тип данных и в диапазоне от 2 до DecimationFactor значение свойства.

Зависимости

Чтобы включить этот аргумент, установите свойство VariableDownsample на true.

Типы данных: fi(0,12,0)

Очистите внутренние состояния в виде логического скаляра.

Когда этим значением является 1 TRUE), Системный объект останавливает текущее вычисление и очищает все внутренние состояния. Когда этим значением является 0 ложь) и validIn 1 TRUE), Системный объект запускает новую операцию фильтрации.

Зависимости

Чтобы включить этот аргумент, установите свойство ResetIn на true.

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

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

развернуть все

CIC десятикратно уменьшил выходные данные, возвращенные как скаляр.

Наборы свойств OutputDataType тип выходных данных этого аргумента. Смотрите OutputDataType.

Типы данных: int8 | int16 | int32 | fi
Поддержка комплексного числа: Да

Управляющий сигнал, который указывает если данные из dataOut выходной аргумент допустим. Когда этим значением является 1 TRUE), Системный объект возвращает допустимые данные из dataOut выходной аргумент. Когда этим значением является 0 ложь), значения dataOut выходной аргумент не допустим.

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

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

getLatencyЗадержка децимирующего фильтра CIC
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

В этом примере показано, как использовать dsp.HDLCICDecimation Система object™, чтобы отфильтровать и проредить данные. Пример выполняет эти шаги:

  1. Сгенерируйте системы координат случайных входных выборок.

  2. Сгенерируйте ссылочные выходные данные от dsp.CICDecimation Система object™.

  3. Запустите функцию, которая содержит dsp.HDLCICDecimation Система object™. Эта функция работает с потоком выборок данных, а не системы координат.

  4. Сравните выход функции со справочными данными.

Можно сгенерировать HDL-код от функции.

Настройте параметры входных данных. Фактор децимации переменной поддержки объектов, заданный в качестве аргумента. Выберите область значений для входного фактора децимации.

M = 1; % Differential delay
N = 3; % Number of sections
R = 8; % Decimation factor

varRValue = [4,5,6,7,8];

numFrames = length(varRValue);
dataSamples = cell(1,numFrames);
varRtemp = cell(1,numFrames);
refOutput = [];
WL = 0; FL = 0;

Сгенерируйте системы координат случайных входных выборок с фактором децимации изменение каждой системы координат. Чтобы сгенерировать ссылочные выходные данные для сравнения, примените выборки к dsp.CICDecimation Системный объект. Этот объект не поддерживает переменный уровень децимации, таким образом, необходимо создать и выпустить объект для каждого изменения в факторе децимации.

totalsamples = 0;
for i = 1:numFrames
    framesize(i) = varRValue(i)*randi([5 20],1,1);
    dataSamples{i} = fi(randn(framesize(i),1),1,16,8);
    ref_cic = dsp.CICDecimator('DifferentialDelay',M,...
                                'NumSections',N,...
                                'DecimationFactor',varRValue(i));
    refOutput = [refOutput,ref_cic(dataSamples{i}).'];
    release(ref_cic);
end

Запишите функцию, которая создает и вызывает dsp.HDLCICDecimation Система object™. Можно сгенерировать HDL от этой функции. Установите свойства объекта совпадать с параметрами входных данных. Установите decimationFactor свойство объекта к максимальному входному фактору децимации.

function [dataOut,validOut] = HDLCIC_maxR8(dataIn,validIn,R)
%HDLCIC_maxR8
% Performs CIC decimation with an input decimation factor up to 8. 
% sampleIn is a scalar fixed-point value.
% validIn is a logical scalar value.
% You can generate HDL code from this function.

  persistent cic8;
  if isempty(cic8)
    cic8 = dsp.HDLCICDecimation('DecimationFactor',8,...
                                'VariableDownsample',true,...
                                'DifferentialDelay',1,...
                                'NumSections',3);
  end    
  [dataOut,validOut] = cic8(dataIn,validIn,R);
end

Вызовите функцию для каждой входной выборки, передав соответствующий допустимый сигнал и уровень децимации. Входной уровень децимации должен быть 12-битным значением фиксированной точки без знака. Объект имеет задержку 2+N циклы. Чтобы сбросить остающиеся данные прежде, чем изменить уровень децимации, вызовите объект с недопустимыми входными параметрами для 2+N циклы после каждой системы координат.

Инициализируйте выходные векторы к размеру, достаточно большому, чтобы разместить выходные данные. Итоговый размер будет меньшим, чем totalsamples из-за децимации.

latency = 2+N;
dataOut = zeros(1,totalsamples+numFrames*latency);
validOut = zeros(1,totalsamples+numFrames*latency);
idx=0;
for ij = 1:numFrames
    for ii = 1:length(dataSamples{ij})
        idx = idx+1;
        [dataOut(idx),validOut(idx)] = HDLCIC_maxR8(...
            dataSamples{ij}(ii),...
            true,...
            fi(varRValue(ij),0,12,0));
    end
    for ii = 1:latency
        idx = idx+1;
        [dataOut(idx),validOut(idx)] = HDLCIC_maxR8(...
            fi(0,1,16,8),...
            false,...
            fi(varRValue(ij),0,12,0));
    end
end

Сравните результаты с выходом от dsp.CICDecimation объект.

cicOutput = dataOut(validOut==1);

fprintf('\nHDL CIC Decimation\n');
difference = (abs(cicOutput-refOutput(1:length(cicOutput)))>0);
fprintf('\nTotal number of samples differed between Behavioral and HDL simulation: %d \n',sum(difference));
HDL CIC Decimation

Total number of samples differed between Behavioral and HDL simulation: 0 

Задержка dsp.HDLCICDecimation Система object™ варьируется в зависимости от того, сколько интегратора и разделы расчески ваш фильтр имеет, и разрешаете ли вы коррекцию усиления. Используйте getLatency функционируйте, чтобы найти задержку особой настройки фильтра. Задержка является количеством циклов между первым допустимым входом и первым допустимым выходом, принимая, что вход постоянно допустим.

Создайте dsp.HDLCICDecimation Система object™ и запрос задержка. Фильтр по умолчанию имеет два раздела, и коррекция усиления отключена.

hdlcic = dsp.HDLCICDecimation
hdlcic = 
  dsp.HDLCICDecimation with properties:

    VariableDownsample: false
      DecimationFactor: 2
     DifferentialDelay: 1
           NumSections: 2
        OutputDataType: 'Full precision'
        GainCorrection: false
               ResetIn: false

L_def = getLatency(hdlcic)
L_def = 5

Измените объект фильтра, чтобы иметь три интегратора и разделы расчески. Проверяйте получившееся изменение в задержку.

hdlcic.NumSections = 3;
L_3sec = getLatency(hdlcic)
L_3sec = 6

Включите коррекцию усиления на объекте фильтра. Проверяйте получившееся изменение в задержку.

hdlcic.GainCorrection = true;
L_wgain = getLatency(hdlcic)
L_wgain = 15

Алгоритмы

развернуть все

Ссылки

[1] Hogenauer, E. “Экономичный Класс Цифровых фильтров для Децимации и Интерполяции”. Транзакции IEEE на Акустике, Речи и издании 29 Обработки сигналов, № 2, апрель 1981, стр 155–162.

Введенный в R2019b