Десятикратно уменьшите сигнал с помощью каскадного интегрально-гребенчатого фильтра — оптимизированный для генерации HDL-кода
dsp.HDLCICDecimation Система object™ десятикратно уменьшает входной сигнал при помощи децимирующего фильтра каскадной расчески интегратора (CIC). CIC-фильтры являются классом КИХ-фильтров линейной фазы, состоящих из части расчески и части интегратора. Структура децимирующего фильтра CIC состоит из разделов N каскадных интеграторов, фактора изменения уровня R, и затем разделов N каскадных гребенчатых фильтров. Для получения дополнительной информации о децимирующих фильтрах CIC, см. Алгоритмы.
Поддержки Системного объекта фиксируемые и переменные ставки децимации для скалярных входных параметров и только зафиксированной децимации для векторных входных параметров. Для обоих типов входных параметров Системный объект обеспечивает скалярный выход. Системный объект обеспечивает архитектуру, подходящую для аппаратного развертывания и генерации HDL-кода.
Системный объект поддерживает действительные и комплексные входные параметры фиксированной точки.
Отфильтровать входные данные с оптимизированным HDL децимирующим фильтром CIC:
Создайте dsp.HDLCICDecimation объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.
создает оптимизированный HDL Системный объект децимирующего фильтра CIC, cicDecFilt = dsp.HDLCICDecimationcicDecFilt, со свойствами по умолчанию.
создает фильтр с набором свойств с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.cicDecFilt = dsp.HDLCICDecimation(Name,Value)
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.
VariableDownsample — Переменный уровень децимации
false (значение по умолчанию) | (1)
trueУстановите это свойство на true(1 ) управлять Системным объектом с переменным уровнем децимации, заданным decimFactor входной параметр. Установите это свойство на false(0)
управлять объектом с фиксируемой ставкой децимации, заданной DecimationFactor свойство.
Для векторных входных параметров объект не поддерживает переменный уровень децимации.
DecimationFactor — Фактор децимации (значение по умолчанию) | целое число от 2 до 2 048Задайте фактор децимации как целое число от 2 до 2 048. Это значение представляет уровень, с которым вы хотите десятикратно уменьшить вход.
Когда вы устанавливаете VariableDownsample свойство к true, это наборы свойств верхняя граница области значений допустимых значений для decimFactor аргумент.
DifferentialDelay — Дифференциальная задержка (значение по умолчанию) | 2Задайте дифференциальную задержку части расчески фильтра как любой 1 или 2 циклы.
NumSections — Количество интегратора или разделов расчески (значение по умолчанию) | целое число от 1 до 6Задайте количество разделов или в интеграторе или в части расчески фильтра как целое число от 1 до 6.
OutputDataType — Тип данных выхода'Full precision' (значение по умолчанию) | 'Same word length as input' | 'Minimum section word lengths'Выберите тип данных отфильтрованных выходных данных.
'Full precision' — Тип выходных данных перебрасывается парой слов длина, равная входному размеру слова плюс биты усиления.
'Same word length as input' — Тип выходных данных перебрасывается парой слов длина, равная входному размеру слова.
'Minimum section word lengths' — Тип выходных данных использует размер слова, который вы задаете в свойстве OutputWordLength. Когда вы выбираете эту опцию, Системный объект применяет алгоритм Сокращения внутренне. Для получения дополнительной информации о Сокращении, смотрите Тип Выходных данных. Эта опция не поддерживается когда VariableDownsample true.
OutputWordLength — Размер слова выхода (значение по умолчанию) | целое число от 2 до 104Размер слова выхода в виде целого числа от 2 до 104.
Примечание
Когда это значение меньше 7 значения выходных данных могут переполниться.
Чтобы включить это свойство, установите OutputDataType свойство к 'Minimum section word lengths'.
GainCorrection — Компенсируйте выходное усилениеfalse (значение по умолчанию) | trueУстановите это свойство на true компенсировать выходное усиление фильтра.
В зависимости от типа децимации вы задаете и значение этого свойства, задержка объектных изменений. Здесь, N означает количество разделов, и vecLen означает длину вектора.
Для скалярного входа с фиксированной децимацией (VariableDownsample false):
С коррекцией усиления прочь, задержка объекта равняется 3 + такты N.
С коррекцией усиления на задержка объекта равняется 3 + N + 9 тактов.
Для скалярного входа с переменной децимацией (VariableDownsample true):
С коррекцией усиления прочь, задержка объекта равняется 4 + такты N.
С коррекцией усиления на задержка объекта равняется 4 + N + 9 тактов.
Для векторного входа с фиксированной децимацией (VariableDownsample false):
С коррекцией усиления прочь, задержкой объекта является floor((vecLen – 1) * (N/vecLen)) + 1 + N + (2 + (vecLen + 1) * такты N.
С коррекцией усиления на задержкой объекта является floor((vecLen – 1) * (N/vecLen)) + 1 + N + (2 + (vecLen + 1) * N) + 9 тактов.
Примечание
Для векторных входных параметров объект не поддерживает переменную децимацию.
ResetIn — Включите аргумент сбросаfalse (значение по умолчанию) | trueКогда вы устанавливаете это свойство на true, Системный объект ожидает reset входной параметр.
[ фильтрует входные данные с помощью заданного переменного фактора децимации, dataOut,validOut] = cicDecFilt(dataIn,validIn,decimFactor)decimFactor. VariableDownsample свойство должно быть установлено в true.
[ фильтрует входные данные когда dataOut,validOut] = cicDecFilt(dataIn,validIn,decimFactor,reset)reset false и очищает внутренние состояния фильтра когда reset true. Системный объект ожидает reset аргумент только, когда вы устанавливаете свойство ResetIn на true. VariableDownsample свойство установлено в true.
dataIn — Входные данныеЗадайте входные данные как скаляр или вектор-столбец длины 1 - 64. Входные данные должны быть целым числом со знаком или подписанной фиксированной точкой с размером слова, меньше чем или равным 32. DecimationFactor свойство должно быть целочисленным кратным размер входного кадра.
Типы данных: int8 | int16 | int32 | fi
Поддержка комплексного числа: Да
validIn — Индикация относительно допустимых входных данныхУправляющий сигнал, который указывает, допустимо ли входные данные.
Когда validIn 1 TRUE), Системный объект получает значение от dataIn входной параметр. Когда validIn 0 ложь), Системный объект игнорирует dataIn входное значение.
Типы данных: логический
decimFactor — Переменный уровень децимацииЗадает уровень децимации.
decimFactor значение должно иметь тип данных ufix12 тип данных и целое число в диапазоне от 2 до DecimationFactor значение свойства.
Чтобы включить этот аргумент, установите свойство VariableDownsample на true.
Типы данных: fi(0,12,0)
reset — Очистите внутренние состоянияОчистите внутренние состояния в виде логического скаляра.
Когда этим значением является 1 TRUE), Системный объект останавливает текущее вычисление и очищает все внутренние состояния. Когда этим значением является 0 ложь) и validIn 1 TRUE), Системный объект запускает новую операцию фильтрации.
Чтобы включить этот аргумент, установите свойство ResetIn на true.
Типы данных: логический
dataOut — CIC-подкошенные выходные данныеCIC десятикратно уменьшил выходные данные, возвращенные как скаляр.
Наборы свойств OutputDataType тип выходных данных этого аргумента. Смотрите OutputDataType.
Типы данных: int8 | int16 | int32 | fi
Поддержка комплексного числа: Да
validOut — Индикация относительно допустимых выходных данныхУправляющий сигнал, который указывает если данные из dataOut выходной аргумент допустим. Когда этим значением является 1 TRUE), Системный объект возвращает допустимые данные из dataOut выходной аргумент. Когда этим значением является 0 ложь), значения dataOut выходной аргумент не допустим.
Типы данных: логический
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:
release(obj)
getLatency | Задержка децимирующего фильтра CIC |
В этом примере показано, как использовать dsp.HDLCICDecimation Система object™, чтобы отфильтровать и проредить данные. Этот скаляр поддержки объектов и векторные входные параметры. В этом примере две функции обеспечиваются, чтобы работать со скалярными и векторными входными данными отдельно. Можно сгенерировать HDL-код от этих функций.
Сгенерируйте системы координат случайных входных выборок
Настройте эти переменные рабочей области для объекта использовать. Поддержка объектов фиксируемые и переменные ставки децимации для скалярных входных параметров и только фиксируемая ставка децимации для векторных входных параметров. Пример запускает HDLCIC_maxR8 функционируйте, когда вы установите скалярную переменную на true и запускает HDLCIC_vec функционируйте, когда вы установите скалярную переменную на false. Для скалярных входных параметров выберите область значений входа varRValue значения и установите значение фактора децимации, R, к максимальному ожидаемому фактору децимации. Для векторных входных параметров входные данные должны быть вектор-столбцом размера 1 - 64, и R должен быть целочисленным кратным размер входного кадра.
R = 8; % decimation factor M = 1; % differential delay N = 3; % number of sections scalar = false; % true for scalar; false for vector if scalar varRValue = [2, 4, 5, 6, 7, 8]; vecSize = 1; else varRValue = R; fac = (factor(R)); vecSize = fac(randi(length(fac),1,1)); end numFrames = length(varRValue); dataSamples = cell(1,numFrames); varRtemp = cell(1,numFrames); framesize = zeros(1,numFrames); refOutput = []; WL = 0; % Word length FL = 0; % Fraction length
Сгенерируйте ссылочный Выход от dsp.CICDecimation Система Object™
Сгенерируйте системы координат случайных входных выборок и примените выборки к dsp.CICDecimation Системный объект. Выход, сгенерированный от этого Системного объекта, используется в качестве справочных данных для сравнения. Системный объект не поддерживает переменный уровень децимации, таким образом, необходимо создать и выпустить объект для каждого изменения в значении фактора децимации.
totalsamples = 0; for i = 1:numFrames framesize(i) = varRValue(i)*randi([5 20],1,1); dataSamples{i} = fi(randn(vecSize,framesize(i)),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 Системный объект
Установите свойства Системного объекта совпадать с параметрами входных данных и запустить соответствующую функцию на основе входного типа. Эти функции работают с потоком выборок данных, а не системы координат. Можно сгенерировать HDL-код от этих функций.
Пример использует HDLCIC_maxR8 функция для скалярного входа.
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
Пример использует HDLCIC_vec функция для векторного входа.
function [dataOut,validOut] = HDLCIC_vec(dataIn,validIn) %HDLCIC_vec % Performs CIC decimation with an input vector. % sampleIn is a fixed-point vector. % validIn is a logical scalar value. % You can generate HDL code from this function. persistent cicVec; if isempty(cicVec) cicVec = dsp.HDLCICDecimation('DecimationFactor',8,... 'VariableDownsample',false,... 'DifferentialDelay',1,... 'NumSections',3); end [dataOut,validOut] = cicVec(dataIn,validIn); end
Чтобы сбросить остающиеся данные, запустите объект путем вставки необходимого количества неактивных циклов после каждой системы координат через latency переменная. Для получения дополнительной информации смотрите свойство GainCorrection.
Инициализируйте выход к размеру, достаточно большому, чтобы вместить выходные данные. Итоговый размер, как ожидают, будет меньшим, чем totalsamples из-за децимации.
latency = floor((vecSize - 1)*(N/vecSize))+ 1+ N +(2+(vecSize + 1)*N)+ 9; dataOut = zeros(1,totalsamples+numFrames*latency); validOut = zeros(1,totalsamples+numFrames*latency); idx=0; for ij = 1:numFrames if scalar % scalar input with variable decimation 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 else % vector input with fixed decimation for ii = 1:size(dataSamples{ij},2) idx = idx+1; [dataOut(idx),validOut(idx)] = HDLCIC_vec(... dataSamples{ij}(:,ii),... true); end for ii = 1:latency idx = idx+1; [dataOut(idx),validOut(idx)] = HDLCIC_vec(... fi(zeros(vecSize,1),1,16,8),... false); end 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
Включите коррекцию усиления на объекте фильтра с векторным входным размером 2. Проверяйте получившееся изменение в задержку.
hdlcic.GainCorrection = true; vecSize = 2; L_wgain = getLatency(hdlcic,vecSize)
L_wgain = 25
Передаточная функция децимирующего фильтра CIC
где
H я - передаточная функция части интегратора CIC-фильтра.
H C является передаточной функцией части расчески CIC-фильтра.
N является количеством разделов. Количество разделов в CIC-фильтре задано как количество разделов или в части расчески или в части интегратора фильтра. Это значение не представляет общее количество разделов в целом фильтре.
R является фактором децимации.
M является дифференциальной задержкой.
dsp.HDLCICDecimation Системному объекту показали структуру CIC-фильтра в этом рисунке. Структура состоит из разделов N каскадных интеграторов, фактора изменения уровня R и разделов N каскадных гребенчатых фильтров [1].

Проекты могут поместить единичную задержку в часть интегратора CIC-фильтра или в feedforward или в пути к обратной связи. Эти две настройки дают к идентичной частотной характеристике фильтра. Однако числовые выходные параметры от этих двух настроек отличаются из-за задержки путей. Этот Системный объект помещает единичную задержку в путь прямого распространения интегратора.
Системный объект прореживает этап интегратора выход с помощью R, или фиксируемая ставка децимации обеспечила, использование свойства DecimationFactor или переменного уровня децимации обеспечило использование decimFactor входной параметр. На этапе downsampler Системный объект использует в противоречии с количеством допустимые входные выборки, которые зависят от уровня децимации. Каждый раз, когда уровень децимации изменяется, объект сбрасывает и запускает новое вычисление со следующей выборки. Этот механизм препятствует тому, чтобы Системный объект накопил недопустимые значения. Затем Системный объект предоставляет подкошенный выход части расчески.
Усилением Системного объекта дают .
где:
R является DecimationFactor значение свойства.
M является DifferentialDelay значение свойства.
N является NumSections значение свойства.
Системный объект реализует коррекцию усиления в двух частях: крупное усиление и прекрасное усиление. В крупной коррекции усиления Системный объект вычисляет значение сдвига, добавляет значение сдвига к дробным битам, чтобы создать числовой тип, и затем выполняет оставленный сдвиг разряда. В прекрасной коррекции усиления Системный объект делит остающееся усиление с крупным усилением, если усиление не является степенью 2 и затем умножается, крупное усиление откорректировало значение обратным значением прекрасного усиления. Весь возможный сдвиг и прекрасные значения усиления предварительно вычисляются первоначально и хранятся в массиве, прежде чем Системный объект начнет обрабатывать.
Можно изменить это уравнение как , где cGain означает крупное усиление, и fGain означает прекрасное усиление.
Выполнять GainCorrection когда VariableDownsample свойство включено, Системный объект устанавливает тип выходных данных, сконфигурированный с максимальным уровнем децимации, и сдвиги разряда уехали во все значения под максимальным уровнем децимации. Значение сдвига разряда равно .
Этот раздел объясняет, как Системный объект определяет тип выходных данных. Например, рассмотрите фильтр с DecimationFactor, DifferentialDelay, и NumSections значения 8, 1, и 3, соответственно, с входом width 16 битов.
Выходной размер слова вычисляется как: ,
где:
B IN является входным размером слова.
B OUT является выходным размером слова.
Когда вы устанавливаете OutputDataType свойство к 'Full precision', Системный объект возвращает данные с размером слова 25 битов путем добавления девяти битов усиления во входной размер слова.

Когда вы устанавливаете OutputDataType свойство к 'Same word length as input', объектные выходные данные с размером слова 16, который является той же длиной как входной размер слова. Внутренний интегратор и этапы расчески используют тип данных полной точности с 25 битами.

Когда вы устанавливаете OutputDataType свойство к 'Minimum section word lengths' и OutputWordLength свойство к 16, Системный объект возвращает данные с размером слова 16 битов. В этом случае объект изменяет битную ширину на каждом этапе, на основе алгоритма Сокращения.
Если OutputWordLength значение свойства меньше количества битов, которые требуют при выходе, младшие значащие биты (LSBs) в более ранних стадиях сокращены. Алгоритм Hogenauer обеспечивает количество LSBs, чтобы отбросить на каждом этапе. Этот алгоритм минимизирует потерю информации в выходных данных [1].

Этот раздел показывает задержки Системного объекта для скалярного входа, когда Системный объект управляется с фиксированными и переменными уровнями децимации и для векторного входа, когда Системный объект управляется с фиксируемой ставкой децимации.
Этот рисунок показывает выход Системного объекта для настройки по умолчанию, то есть, с фиксируемой ставкой децимации и DecimationFactor, DifferentialDelay, и NumSections значения 2, 1, и 2, соответственно. Системный объект возвращает допустимые выходные данные в каждом втором цикле на основе фиксированного значения DecimationFactor 2. Задержка Системного объекта является 5 тактами, вычисленными как 3 + N.

Этот рисунок показывает выход Системного объекта с фиксируемой ставкой децимации, DecimationFactor, DifferentialDelay, и NumSections значения 8, 1, и 3, соответственно и GainCorrection установите на true. Системный объект возвращает допустимые выходные данные в каждом восьмом цикле на основе фиксированного значения DecimationFactor 8. Задержка объекта является 15 тактами и вычисляется как 3 + N + 9.

Этот рисунок показывает выход Системного объекта для переменной decimFactor значения 2, 4, и 8 наряду с M и значениями N 1 и 3. GainCorrection свойство установлено в false. Системный объект возвращает допустимые выходные данные во-вторых, в-четвертых, и восьмые циклы, соответствующие decimFactor значения 2, 4, и 8, соответственно. Системный объект принимает decimFactor значение аргумента изменяется только когда вход validIn 1 TRUE). Задержка Системного объекта является 7 тактами, вычисленными как 4 + N.

Задержка Системного объекта для векторного входа вычисляется с помощью этой формулы: floor((vecLen – 1) * (N/vecLen)) + 1 + N + 9 * GainCorrection + (2 + (vecLen + 1) * N), то, где vecLen является длиной вектора и N, является количеством разделов.
Этот рисунок показывает выход Системного объекта для двухэлементного входа вектор-столбца с настройкой по умолчанию, то есть, с фиксируемой ставкой децимации и DecimationFactor, DifferentialDelay, и NumSections значения 2, 1, и 2, соответственно. Задержка блока является 12 тактами.

Этот рисунок показывает выход Системного объекта для входа вектор-столбца с восемью элементами с фиксируемой ставкой децимации и R, M и значениями N 8, 1, и 3, соответственно и GainCorrection установите на true. Задержка блока является 44 тактами.

Эффективность синтезируемого HDL-кода меняется в зависимости от вашей цели и опций синтеза. Эта таблица показывает результаты синтеза данных ресурсов и данных о производительности блока для скалярного входа с фиксированными и переменными уровнями децимации и для двухэлементного входа вектор-столбца с фиксируемой ставкой децимации DecimationFactor, DifferentialDelay, и NumSections значения равняются 2, 1, и 2, соответственно. Сгенерированный HDL предназначен на оценочную плату Xilinx® Zynq®-7000 ZC706.
| Входные данные | Тип децимации | Срез LUTs | Регистры среза | Максимальная частота в МГц |
|---|---|---|---|---|
| Скаляр | Фиксированная процентная ставка | 101 | 166 | 711.74 |
| Плавающий курс | 206 | 186 | 441.70 | |
| Вектор | Фиксированная процентная ставка | 218 | 627 | 624.61 |
Ресурсы и частоты варьируются на основе типа входных данных и R, M, и значений N и других выбранных значений свойств. Используя векторный вход может увеличить пропускную способность, однако эта опция также увеличивает число аппаратных ресурсов, которые использует Системный объект.
[1] Hogenauer, E. “Экономичный Класс Цифровых фильтров для Децимации и Интерполяции”. Транзакции IEEE на Акустике, Речи и Обработке сигналов 29, № 2 (апрель 1981): 155–62. https://doi.org/10.1109/TASSP.1981.1163535.
dsp.CICCompensationDecimator | dsp.CICCompensationInterpolator | dsp.CICDecimator | dsp.CICInterpolatorУ вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.