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

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

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

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

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

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

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

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

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

Зависимости

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

Примечание

Когда вводимое значение Output word length находится в области значений 2 - 6, существуют возможности переполняемых выходных данных.

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

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

Описание

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

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

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

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

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

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

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

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

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

Очищает внутренние состояния, заданные как логический скаляр.

Когда этим значением является 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-код от функции.

Настройте параметры входных данных.

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

numFrames = 2;
dataSamples = cell(1,numFrames);
refOutput = [];

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

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

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

function [dataOut,validOut] = HDLCIC_R8(dataIn,validIn,resetIn)
%HDLCIC_R8
% Performs CIC decimation with a decimation factor of 8. 
% dataIn is a scalar fixed-point value.
% validIn is a logical scalar value.
% resetIn is a logical scalar value.
% You can generate HDL code from this function.

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

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

latency = 3+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_R8(...
            dataSamples{ij}(ii),...
            true,false);
    end
    for ii = 1:latency
        idx = idx+1;
        [dataOut(idx),validOut(idx)] = HDLCIC_R8(...
            fi(0,1,16,8),...
           false,true);
    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:

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

L_def = getLatency(hdlcic)
L_def = 5

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

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

Алгоритмы

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

Ссылки

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

Введенный в R2019b

Для просмотра документации необходимо авторизоваться на сайте