主要内容

dsp。HDLCICDecimation

使用级联积分器梳状滤波器抽取信号-为HDL代码生成而优化

描述

dsp。HDLCICDecimation系统对象™使用级联积分器梳(CIC)抽取滤波器抽取输入信号。CIC滤波器是由梳状滤波器和积分器组成的一类线性相位FIR滤波器。CIC抽取滤波器结构包括N级联积分器的分段,速率变化因子R,然后N级联梳状滤波器部分。有关CIC抽取滤波器的更多信息,请参见算法

System对象对标量输入支持固定和金宝app可变抽取率,对矢量输入只支持固定抽取率。对于这两种类型的输入,System对象提供一个标量输出。System对象提供了适合于HDL代码生成和硬件部署的体系结构。

System对象支持真实的和复杂的定金宝app点输入。

用hdl优化的CIC抽取滤波器过滤输入数据:

  1. 创建dsp。HDLCICDecimation对象,并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

cicDecFilt= dsp。HDLCICDecimation创建一个hdl优化的CIC抽取滤波器cicDecFilt,带有默认属性。

例子

cicDecFilt= dsp。HDLCICDecimation(名称,值创建具有使用一个或多个名称-值对设置属性的筛选器。将每个属性名用单引号括起来。

属性

全部展开

除非另有说明,属性是nontunable,这意味着您不能在调用对象之后更改它们的值。对象在调用时锁定,而释放函数打开它们。

如果一个属性是可调,您可以随时更改它的值。

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象进行系统设计

将此属性设置为真正的1)来操作System对象,并使用由decimFactor输入参数。将此属性设置为(0)以指定的固定抽取率操作对象DecimationFactor财产。

对于向量输入,对象不支持可变抽取率。金宝app

将抽取因子指定为从2到2048的整数。这个值表示您想要抽取输入的速率。

当你设置VariableDownsample财产真正的属性的有效值范围的上限decimFactor论点。

指定滤波器梳状部分的微分延迟为12周期。

将滤波器的积分器或梳状滤波器部分的节数指定为从1到6的整数。

选择筛选输出数据的数据类型。

  • “充分精确”—输出数据类型的字长等于输入字长加上增益位。

  • “与输入的字长相同”—输出数据类型的字长等于输入字长。

  • “最小节字长”-输出数据类型使用在OutputWordLength财产。当您选择这个选项时,System对象在内部应用一个Pruning算法。有关剪枝的更多信息,请参见输出数据类型.不支持此选项金宝appVariableDownsample真正的

输出的字长,指定为从2到104的整数。

请注意

当该值小于7输出数据值可能溢出。

依赖关系

要启用此属性,请设置OutputDataType财产“最小节字长”

将此属性设置为真正的来补偿滤波器的输出增益。

根据您指定的抽取类型和此属性的值,对象的延迟会发生变化。在这里,N表示分段数和vecLen表示向量的长度。

对于具有固定抽取的标量输入(VariableDownsample):

  • 当增益校正关闭时,对象的延迟为3 +N时钟周期。

  • 加上增益校正,对象的延迟为3 +N+ 9个时钟周期。

对于具有可变抽取的标量输入(VariableDownsample真正的):

  • 当增益校正关闭时,对象的延迟为4 +N时钟周期。

  • 加上增益校正,对象的延迟为4 +N+ 9个时钟周期。

以固定抽取的矢量输入(VariableDownsample):

  • 当增益校正关闭时,对象的延迟为地板上((vecLen- 1) * (N/vecLen+ 1 +N+ (2 + ()vecLen+ 1) *N时钟周期。

  • 在进行增益校正后,对象的延迟为地板上((vecLen- 1) * (N/vecLen+ 1 +N+ (2 + ()vecLen+ 1) *N+ 9个时钟周期。

请注意

对于向量输入,对象不支持变量抽取。金宝app

当您将此属性设置为真正的时,System对象期望a重置输入参数。

使用

描述

dataOutvalidOut) = cicDecFilt (dataInvalidIn只有在以下情况下,才使用固定的抽取因子过滤和抽取输入数据validIn真正的

dataOutvalidOut) = cicDecFilt (dataInvalidIndecimFactor使用指定的变量抽取因子过滤输入数据,decimFactor.的VariableDownsample属性必须设置为真正的

dataOutvalidOut) = cicDecFilt (dataInvalidIn重置过滤输入数据重置并清除过滤器内部状态时重置真正的.System对象期望重置参数仅在设置ResetIn财产真正的

dataOutvalidOut) = cicDecFilt (dataInvalidIndecimFactor重置过滤输入数据重置并清除过滤器内部状态时重置真正的.System对象期望重置参数仅在设置ResetIn财产真正的.的VariableDownsample属性设置为真正的

输入参数

全部展开

将输入数据指定为长度为1到64的标量或列向量。输入数据必须是字长小于等于32的有符号整数或有符号固定点。DecimationFactor属性必须是输入帧大小的整数倍。

数据类型:int8|int16|int32|fi
复数的支持:金宝app是的

指示输入数据是否有效的控制信号。

validIn1真正的)时,System对象从dataIn输入参数。当validIn0)时,System对象将忽略dataIn输入值。

数据类型:逻辑

指定抽取率。

decimFactor值必须是数据类型ufix12数据类型,取值范围为2到DecimationFactor属性值。

依赖关系

要启用此参数,请设置VariableDownsample财产真正的

数据类型:fi (0 12 0)

清除指定为逻辑标量的内部状态。

当这个值为1真正的), System对象停止当前计算并清除所有内部状态。当这个值为0),validIn1真正的)时,System对象开始一个新的过滤操作。

依赖关系

要启用此参数,请设置ResetIn财产真正的

数据类型:逻辑

输出参数

全部展开

CIC抽取输出数据,作为标量返回。

OutputDataType属性设置此参数的输出数据类型。看到OutputDataType

数据类型:int8|int16|int32|fi
复数的支持:金宝app是的

控制信号,指示数据是否来自dataOut输出参数有效。当这个值为1真正的)时,System对象返回有效数据dataOut输出参数。当这个值为0的价值dataOut输出参数无效。

数据类型:逻辑

对象的功能

要使用对象函数,请指定System对象作为第一个输入参数。例如,释放名为system的对象的系统资源obj,使用下面的语法:

发行版(obj)

全部展开

getLatency CIC抽取滤波器的延迟
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 使内部状态复位系统对象

例子

全部折叠

这个例子展示了如何使用dsp。HDLCICDecimation系统对象™用于过滤和取样数据。这个对象支持标量和向量输金宝app入。在本例中,提供了两个函数分别处理标量和矢量输入数据。您可以从这些函数生成HDL代码。

生成随机输入样本帧

设置对象要使用的这些工作区变量。该对象对标量输入支持固金宝app定和可变抽取率,对矢量输入只支持固定抽取率。示例运行HDLCIC_maxR8当将标量变量设置为时真正的和运行HDLCIC_vec当将标量变量设置为时.对于标量输入,选择输入varRValue值的范围,并将抽取因子值R设置为最大预期抽取因子。对于向量输入,输入数据必须是大小为1到64的列向量,并且R必须是输入帧大小的整数倍。

R = 8;%大量毁灭的因素M = 1;%微分延迟N = 3;%分段数标量= false;%对于标量为真;假的向量如果标量varRValue = [2,4,5,6,7,8];vecSize = 1;其他的varRValue = R;fac =(因子(R));vecSize = fac (randi(长度(fac), 1, 1));结束numFrames =长度(varRValue);dataSamples =细胞(1、numFrames);varRtemp =细胞(1、numFrames);numFrames framesize = 0 (1);refOutput = [];王= 0;%字长FL = 0;%部分长度

生成参考输出dsp。C我CDecimation系统对象™

生成随机输入样本帧并将样本应用于dsp。C我CDecimation系统对象。System对象生成的输出用作比较的参考数据。System对象不支持变量抽取率,因此必须为抽取因子值金宝app的每个更改创建和释放对象。

totalsamples = 0;i = 1:numFrames framesize(i) = varRValue(i)*randi([5 20],1,1);dataSamples{我}= fi (randn (vecSize, framesize(我)),1,16日8);ref_cic = dsp。CICDecimator (“DifferentialDelay”米,...“NumSections”N...“DecimationFactor”varRValue(我));refOutput = [refOutput ref_cic (dataSamples{我}(:))。');释放(ref_cic);结束

运行包含dsp。HDLCICDecimation系统对象

设置System对象的属性以匹配输入数据参数,并根据输入类型运行相应的函数。这些函数对数据样本流而不是帧进行操作。您可以从这些函数生成HDL代码。

示例使用HDLCIC_maxR8函数的标量输入。

函数[dataOut, validOut] = HDLCIC_maxR8 (dataIn validIn, R)% HDLCIC_maxR8%执行CIC抽取,输入抽取因子高达8。% sampleIn是一个标量定点值。% validIn是一个逻辑标量值。你可以从这个函数生成HDL代码。持续的cic8;如果Isempty (cic8) cic8 = dsp。HDLCICDecimation (“DecimationFactor”8...“VariableDownsample”,真的,...“DifferentialDelay”,1,...“NumSections”3);结束[dataOut, validOut] = cic8 (dataIn validIn, R);结束

示例使用HDLCIC_vec函数的矢量输入。

函数[dataOut, validOut] = HDLCIC_vec (dataIn validIn)% HDLCIC_vec%使用输入向量执行CIC抽取。% sampleIn是一个定点向量。% validIn是一个逻辑标量值。你可以从这个函数生成HDL代码。持续的cicVec;如果isempty(cicVec) cicVec = dsp。HDLCICDecimation (“DecimationFactor”8...“VariableDownsample”假的,...“DifferentialDelay”,1,...“NumSections”3);结束[dataOut, validOut] = cicVec (dataIn validIn);结束

要刷新剩余的数据,通过在每一帧之后插入所需的空闲周期数来运行对象延迟变量。有关更多信息,请参见GainCorrection财产。

将输出初始化为足以容纳输出数据的大小。预计最终尺寸将小于totalsamples由于大量毁灭。

延时= floor((vecSize - 1)*(N/vecSize))+ 1+ N +(2+(vecSize + 1)*N)+ 9;dataOut = 0(1、totalsamples + numFrames *延迟);validOut = 0(1、totalsamples + numFrames *延迟);idx = 0;ij = 1: numFrames如果标量%标量输入与可变抽取ii = 1:length(dataSamples{ij}) idx = idx+1;[dataOut (idx), validOut (idx)] = HDLCIC_maxR8 (...dataSamples {ij} (ii),...真的,...fi (varRValue (ij), 0, 12日0));结束Ii = 1:延迟idx = idx+1;[dataOut (idx), validOut (idx)] = HDLCIC_maxR8 (...fi(0, 1, 16日8),...假的,...fi (varRValue (ij), 0, 12日0));结束其他的%向量输入与固定抽取ii = 1:size(dataSamples{ij},2) idx = idx+1;[dataOut (idx), validOut (idx)] = HDLCIC_vec (...dataSamples {ij}(:,(二),...真正的);结束Ii = 1:延迟idx = idx+1;[dataOut (idx), validOut (idx)] = HDLCIC_vec (...fi (0 (vecSize 1) 1, 16日8),...假);结束结束结束

比较函数输出和参考数据

的输出比较函数结果dsp。C我CDecimation对象。

cicOutput = dataOut (validOut = = 1);流(“\ nHDL中投大批杀害\ n”);差= (abs (cicOutput-refOutput(1:长度(cicOutput))) > 0);流(行为模拟和HDL模拟之间的样本总数差异:%d \n'和(差));
高密度脂蛋白CIC抽取总样本数在行为和高密度脂蛋白模拟之间的差异:0

延迟dsp。HDLCICDecimation系统对象™的变化取决于滤波器有多少积分器和梳状结构,输入矢量大小,以及是否启用增益校正。使用getLatency函数查找特定过滤器配置的延迟。延迟是第一个有效输入和第一个有效输出之间的周期数,假设输入是连续有效的。

创建一个dsp。HDLCICDecimation系统对象™和请求延迟。默认过滤器有两个部分,增益校正是禁用的。

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。G一个我nCorrection = true; vecSize = 2; L_wgain = getLatency(hdlcic,vecSize)
L_wgain = 25

算法

全部展开

参考文献

[1] Hogenauer E。用于抽取和插值的经济型数字滤波器。IEEE声学、语音和信号处理汇刊29日,没有。2(1981年4月):155-62。https://doi.org/10.1109/TASSP.1981.1163535。

扩展功能

介绍了R2019b