主要内容

dsp。HDLFIRFilter

有限脉冲响应滤波器优化的HDL代码生成

描述

dsp。HDLFIRFilter系统对象™模型为HDL代码生成优化的有限脉冲响应滤波器体系结构。该对象每次接受一个输入样本,并提供可编程系数的选项。它提供了一个硬件友好的接口与输入和输出控制信号。为了提供对生成的HDL代码的精确周期模拟,对象模型体系结构延迟包括管道注册和资源共享。

该对象提供三种过滤器结构。直接形式的systolic架构提供了一个完全并行的实现,可以有效地利用Intel®和Xilinx®DSP块。直接形式转置结构是一种完全并行实现,适用于FPGA和ASIC应用。部分串行收缩结构提供了一个可配置的串行实现,使FPGA DSP块的有效利用。对于将乘法器、流水线寄存器和预加法器匹配到FPGA供应商的DSP配置的过滤器实现,在生成HDL代码时指定目标设备。

这三种结构都通过共享对称或反对称滤波器的乘法器来优化硬件资源。并行实现还去除了零值系数的乘数,如半带滤波器和希尔伯特变换。

有效输入数据和相应的有效输出数据之间的延迟取决于过滤器结构、序列化选项、系数的数量以及系数值是否提供优化机会。

对于具有多通道或基于帧的输入的FIR滤波器,使用dsp。FIRFilter系统对象,而不是这个系统对象。

用hdl优化的FIR滤波器过滤输入数据:

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

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

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

创建

描述

firFilt= dsp。HDLFIRFilter创建一个hdl优化的离散FIR滤波器firFilt,具有默认属性。

firFilt = dsp.HDLFIRFilter (num)属性创建过滤器分子属性设置为全国矿工工会

firFilt= dsp。HDLFIRFilter (___名称,值使用一个或多个名称-值对设置属性。将每个属性名用单引号括起来。

例如:

分子= firpm (10, [0, 0.1, 0.5, 1], [1 1 0,0]);冷杉= dsp。HDLFIRFilter(分子,“FilterStructure”“直接形式转置”);...[dataOut, validOut] =冷杉(dataIn validIn);

属性

全部展开

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

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

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

主要

您可以输入常数过滤系数作为属性,或者使用输入参数提供时变过滤系数。

将此属性设置为'输入端口(并行接口)'使多项式系数论点,NumeratorPrototype财产。指定一个原型,使对象能够根据系数的对称性优化过滤器实现。使用'输入端口(并行接口)',设置FilterStructure财产直接形成收缩的

离散FIR滤波器系数,指定为实值或复值向量。您还可以将向量指定为工作区变量,或作为对筛选器设计函数的调用。当输入数据类型是浮点类型时,对象将系数转换为与输入相同的数据类型。当输入数据类型为整数类型或定点类型时,可以使用CoefficientsDataType财产。

例子:dsp。HDLFIRFIlter('Numerator',firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0]))使用线性相位滤波器设计函数定义系数。

依赖关系

要启用此属性,请设置NumeratorSource“属性”

数据类型:||int8|int16|int32|uint8|uint16|uint32

原型滤波器系数,指定为实值或复值向量。原型指定了一个样本系数向量,它代表了期望输入系数的对称性和零值位置。如果你所有的输入系数向量都具有相同的对称性和零值系数位置,设置NumeratorPrototype到其中一个向量。如果你的系数是未知的或不期望共享对称或零值位置,设置NumeratorPrototype[].该对象使用原型来优化滤波器,通过共享对称或反对称系数的乘数,并去除零值系数的乘数。

系数优化影响的预期规模多项式系数输入参数。只提供非重复系数作为参数。例如,如果您设置NumeratorPrototype属性为对称的14-tap过滤器,对象在每对重复系数之间共享一个乘数,因此对象期望一个值为7的向量多项式系数论点。您仍然必须在输入中提供零多项式系数非重复零值系数的向量。

依赖关系

要启用此属性,请设置NumeratorSource'输入端口(并行接口)'

数据类型:||int8|int16|int32|uint8|uint16|uint32

HDL过滤器结构,指定为以下结构之一:

  • 直接形成收缩的-该架构提供了一个完全并行的滤波器实现,使英特尔和Xilinx DSP块的有效利用。有关架构和性能的详细信息,请参见完全平行收缩结构

  • “直接形式转置”—该架构是完全并行实现,适用于FPGA和ASIC应用。有关架构和性能的详细信息,请参见完全平行转置建筑

  • 的部分串行收缩压-此体系结构提供了串行过滤器实现和在吞吐量和资源利用率之间进行权衡的选项。它有效地利用了Intel和Xilinx DSP块。该对象实现了串行过滤器l系数滤波器,并要求输入样本至少是N循环分开,这样lN×.你可以指定N.对于这个实现,对象提供了一个输出信号,准备好的,指示对象何时准备好接受新的输入数据。有关架构和性能的详细信息,请参见部分序列收缩结构(1 < N < L)全系列收缩结构(N≥L)

所有实现共享对称和反对称系数的乘子。的直接形成收缩的“直接形式转置”结构也可以去除零值系数的乘数。

指定对象用于序列化过滤器的规则为:

  • “有效输入样本之间的最小循环次数”参数指定输入数据定时要求循环数财产。

  • “最大乘数数”—通过使用NumberOfMultipliers财产。

对于具有l系数,该对象实现了一个不超过的串行滤波器并要求输入样本至少是N循环分开,这样lN×.对象在序列化后应用系数优化,因此N最终筛选器实现的值可以低于您指定的值。

依赖关系

要启用此属性,请设置FilterStructure的部分串行收缩压

输入计时的序列化要求,指定为一个正整数。这个属性表示N,有效输入样本之间的最小循环次数。在本例中,对象进行计算l/N.要实现全串行架构,请设置循环数为大于滤波器长度的值,l,或者

对象在序列化后应用系数优化,因此N最终筛选器的值可以低于您指定的值。

依赖关系

要启用此属性,请设置FilterStructure的部分串行收缩压并设置SerializationOption“有效输入样本之间的最小循环次数”

资源使用的序列化要求,指定为正整数。这个属性表示,筛选器实现中的最大乘数。在本例中,对象进行计算Nl/.如果输入数据比较复杂,则对象进行分配楼(/ 2)乘以滤波器实部的乘数楼(/ 2)滤波器虚部的乘数。要实现全串行架构,请设置NumberOfMultipliers1真正的输入,或者2对于复杂的输入。

对象在序列化后应用系数优化,因此N最终筛选器的值可以低于您指定的值。

依赖关系

要启用此属性,请设置FilterStructure的部分串行收缩压,并设置SerializationOption“最大乘数数”

数据类型

对输出进行类型转换的舍入方法,指定为“地板”“天花板”“收敛”“最近的”“圆”,或“零”. 将输出转换为OutputDataType财产。当输入数据类型为浮点数时,对象忽略RoundingMethod财产。有关详细信息,请参见舍入模式

输出类型转换的溢出处理,指定为“包装”“饱和”。将输出强制转换为OutputDataType财产。当输入数据类型为浮点数时,对象忽略溢流作用财产。有关详细信息,请参见溢出处理

离散FIR滤波系数的数据类型,规定为“与输入的字长相同”或者一个数字类型(定点设计师)对象。指定一个数字类型对象,调用数字类型(s、w、f),地点:

  • 年代1签署和0无符号。

  • w是以位为单位的字长。

  • f为小数位数。

对象类型——将离散FIR滤波器的滤波系数转换为指定的数据类型。量化四舍五入到最接近的可表示值,并在溢出时达到饱和。当输入数据类型为浮点数时,对象忽略系数财产。

依赖关系

要启用此属性,请设置NumeratorSource“属性”

离散FIR滤波器输出数据类型,指定为“与输入的字长相同”“全精度”,或者一个数字类型(定点设计师)对象。指定一个数字类型对象,调用数字类型(s、w、f),地点:

  • 年代1签署和0无符号。

  • w是以位为单位的字长。

  • f为小数位数。

对象类型——将离散FIR滤波器的输出转换为指定的数据类型。量化使用的设置RoundingMethod溢流作用属性。当输入数据类型为浮点数时,对象忽略OutputDataType财产。

该对象在每次筛选器点击中增加单词长度以达到全精度,并将最终输出强制转换为指定的类型。最大最终内部数据类型(WF)取决于输入数据类型(WI),系数数据类型(WC),以及系数的个数(l),是由

WFWI+WC+装天花板(log2 (l))

当您指定一组固定的系数时,通常实际的全精度内部字长小于WF因为系数的值限制了潜在增长。当您使用可编程系数时,对象不能计算动态范围,并且内部数据类型总是WF

控制参数

选项启用重置输入参数,指定为真正的.当您将此属性设置为真正的的值,对象期望重置输入参数。复位信号实现数据路径寄存器的本地同步复位。

有关更多重置注意事项,请参见提示

选择连接数据路径寄存器生成的HDL全局复位信号,指定为真正的.将此属性设置为真正的将生成的HDL全局复位信号连接到数据路径寄存器。这个属性不会改变对象的参数或修改MATLAB中的模拟行为®.当您将此属性设置为,生成的HDL全局重置只清除控制路径寄存器。生成的HDL全局重置可以是同步的,也可以是异步的,这取决于您的HDL代码生成设置。

有关更多重置注意事项,请参见提示

使用

描述

dataOutvalidOut) = firFilt (dataInvalidIn仅在以下情况下过滤输入数据:validIn真正的

例子

dataOutvalidOut准备好的) = firFilt (dataInvalidIn返回准备好的设置为真正的当对象准备好在下一次调用中接受新的输入数据时。

对象返回准备好的参数仅在设置FilterStructure财产的部分串行收缩压.例如:

firFilt = dsp。HDLFIRFilter (分子,...“FilterStructure”的部分串行收缩压...“SerializationOption”“有效输入样本之间的最小循环次数”...“NumberOfCycles”, 8)...k=1:length(dataIn) [dataOut,validOut,ready] = firFilt(dataIn(k),validIn(k));

dataOutvalidOut) = firFilt (dataInvalidIn多项式系数使用系数过滤数据,多项式系数.对象期望多项式系数参数仅在设置NumeratorSource财产'输入端口(并行接口)'.例如:

firFilt = dsp。HDLFIRFilter (分子Source,'输入端口(并行接口)'...k=1:length(dataIn) Numerator = myGetNumerator();%计算系数[dataOut, validOut] = firFilt (dataIn (k), validIn (k),分子);

dataOutvalidOut) = firFilt (dataInvalidIn重置过滤数据重置.当重置真正的,对象将重置筛选器寄存器。对象期望重置参数仅在设置ResetInputPort财产真正的.例如:

firFilt = dsp。HDLFIRFilter (分子,“ResetInputPort”,真正的)...%重置过滤器firFilt(0,假的,真正的);k=1:length(dataIn) [dataOut,validOut] = firFilt(dataIn(k),validIn(k),false);
有关更多重置注意事项,请参见提示

输入参数

全部展开

输入数据,指定为实标量或复标量。当输入数据类型是整数类型或定点类型时,对象使用定点算法进行内部计算。

模拟支持数据类型,但不支持HD万博1manbetxL代码生成。

数据类型:fi|||int8|int16|int32|uint8|uint16|uint32
复数的支持:万博1manbetx是的

输入数据的有效性,指定为逻辑标量。的dataIn参数仅当validIn1真正的).

数据类型:逻辑

过滤系数,指定为实值或复值向量。你可以随时改变输入系数。向量的大小取决于中指定的样本系数的大小和对称性NumeratorPrototype财产。原型指定了一个样本系数向量,它代表了期望输入系数的对称性和零值位置。该对象使用原型来优化滤波器,通过共享对称或反对称系数的乘数,并去除零值系数的乘数。因此,在参数中只提供非重复系数。例如,如果您设置NumeratorPrototype属性设置为对称的14-tap过滤器,对象期望的矢量值为7多项式系数论点。您仍然必须在输入中提供零多项式系数非重复零值系数的向量。

模拟支持数据类型,但不支持HD万博1manbetxL代码生成。

依赖关系

要启用此参数,请设置NumeratorSource财产'输入端口(并行接口)'

数据类型:fi|||int8|int16|int32|uint8|uint16|uint32

重置参数是真正的时,对象将停止当前计算并清除筛选器的内部状态。复位信号是同步的,清除数据路径和控制路径状态。有关更多重置注意事项,请参见提示

依赖关系

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

数据类型:逻辑

输出参数

全部展开

过滤的输出数据,作为实标量或复标量返回。当输入数据是浮点数时,输出数据继承输入数据的数据类型。当输入数据是整数类型或定点类型时,OutputDataType属性确定输出数据类型。

数据类型:fi||
复数的支持:万博1manbetx是的

作为逻辑标量返回的输出数据的有效性。对象集validOut1真正的的每个有效输出数据dataOut论点。

数据类型:逻辑

指示对象是否已准备好接受新的输入数据,以逻辑标量的形式返回。对象将此值设置为真正的指示它已准备好在下一次调用中接受新的输入数据。

当使用部分串行架构时,对象一次处理一个示例。如果您的设计等待对象返回准备好的设置为之前de-assertingvalidIn,然后一个额外的数据输入值到达该对象。对象在处理当前数据时存储这些额外的数据,然后不进行设置准备好的真正的直到额外的输入被处理。

依赖关系

对象仅在FilterStructure属性设置为的部分串行收缩压

数据类型:逻辑

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

创建一个具有默认设置的HDL FIR滤波器系统对象。

firFilt = dsp.HDLFIRFilter;

创建一个随机噪声输入信号,并为输出分配内存。

L = 100;dataIn = randn (L, 1);dataOut = 0 (L, 1);validOut = false (L, 1);

在输入信号上调用对象,断言输入数据总是有效的。对象每次处理一个数据样本。

k=1:L[dataOut(k),validOut(k)]=firFilt(dataIn(k),true);结束

这个例子展示了如何配置dsp。HDLFIRFilter系统对象™作为一个部分串行31-tap低通滤波器。

设计滤波器系数。然后创建一个HDL FIR滤波器System对象。设置FilterStructure的部分串行收缩压.默认情况下,SerializationOption属性是“有效输入样本之间的最小循环次数”,因此必须使用循环数财产。为了共享10个系数之间的每个乘数,设置循环数到10。

分子= firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0]);numCycles = 10;firFilt = dsp。HDLFIRFilter (“分子”分子,...“FilterStructure”的部分串行收缩压“NumberOfCycles”, numCycles);

这个串行滤波器的实现需要10个时间步骤来计算每个输出。创建输入信号dataInvalidIn这样,新数据只应用于每一个循环数时间的步骤。

L = 16;x = fi (randn (L, 1), 1, 16);dataIn = 0 (L * numCycles 1“喜欢”, x);dataIn = x (1: numCycles:结束);validIn = false (L * numCycles, 1);validIn (1: numCycles:结束)= true;

创建一个LogicAnalyzer对象来查看输入和输出信号。

la = dsp。logicAnalyzer(“NumInputPorts”5....“SampleTime”,1,“时间间隔”长度(dataIn));标签= getDisplayChannelTags (la);modifyDisplayChannel (la、标签{1}“名字”“dataIn”);modifyDisplayChannel (la、标签{2}“名字”“validIn”);modifyDisplayChannel (la、标签{3}“名字”“dataOut”);modifyDisplayChannel (la标记{4},“名字”“validOut”);modifyDisplayChannel (la标记{5},“名字”“准备好了”);

在输入信号上调用filter System对象,并在Logic Analyzer中查看结果。对象建模HDL管道注册和资源共享,因此波形在对象返回有效输出样本之前显示一个初始延迟。

k=1:length(dataIn) [dataOut,validOut,ready] = firFilt(dataIn(k),validIn(k));洛杉矶(dataIn (k), validIn (k), dataOut, validOut,准备好了)结束

要从System对象™生成HDL代码,创建一个包含并调用该对象的函数。

创建函数

编写一个函数来创建和调用一个11-tap HDL FIR filter System对象。您可以从这个函数生成HDL代码。

函数[dataOut,validOut]=HDLFIR11Tap(dataIn,validIn)% HDLFIR11Tap%使用dsp处理一个数据样本。HDLFIRFilter系统%的对象。% dataIn是一个定点标量值。你可以从这个函数生成HDL代码。持续的冷杉如果isempty(fir) Numerator = firpm(10,[0 0.1 0.5 1],[1 10 0]);冷杉= dsp。HDLFIRFilter (“分子”、分子);结束[dataOut, validOut] =冷杉(dataIn validIn);结束

创建函数测试台

清除工作区,创建随机噪声的输入信号,并为输出分配内存。

清楚的变量清楚的HDLFIR11TapL = 200;dataIn = fi (randn (L, 1), 1, 16);validIn = 1 (L,“逻辑”);dataOut = 0 (L, 1);validOut = false (L, 1);

在输入信号上调用函数。

k = 1:L [dataOut(k),validOut(k)] = HDLFIR11Tap(dataIn(k), validIn(k)));结束

用逻辑分析仪绘制信号。

la = dsp。logicAnalyzer(“NumInputPorts”3,“SampleTime”,1,“时间间隔”L);标签= getDisplayChannelTags (la);modifyDisplayChannel (la、标签{1}“名字”“dataIn”“格式”“模拟”“高度”, 50);modifyDisplayChannel (la、标签{2}“名字”“dataOut”“格式”“模拟”“高度”, 50);modifyDisplayChannel (la、标签{3}“名字”“validOut”);洛杉矶(dataIn dataOut validOut)

延迟dsp。HDLFIRFilter系统对象™随过滤器结构、序列化选项以及系数值是否提供优化机会而变化。使用getLatency函数查找特定配置的延迟。延迟是第一个有效输入和第一个有效输出之间的周期数。

创建一个dsp。HDLFIRFilter系统对象™和请求延迟。默认的结构是完全平行收缩的。系数的默认数据类型是“与输入的字长相同”.因此,当你调用getLatency对象函数时,必须指定输入数据类型。该对象将系数值转换为输入数据类型,然后检查对称系数。这分子有31个对称系数,因此该对象优化共享系数,并实现16个乘数。

分子= firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0]);要= numerictype(15) 1, 16日;对象只使用单词长度进行系数类型转换hdlfir = dsp。HDLFIRFilter (“分子”、分子);L_sysp = getLatency (hdlfir要发送)
L_sysp = 23

检查同一过滤器的部分串行收缩实现的延迟。默认情况下,SerializationOption属性是“有效输入样本之间的最小循环次数”,因此必须使用循环数财产。要在8个系数之间共享每个乘数,设置循环数8。对象然后优化基于系数对称,所以有16个独特的系数共享8倍每2乘数。这个串行滤波器实现需要每8个周期有效的输入样本。

hdlfir = dsp。HDLFIRFilter (“分子”分子,“FilterStructure”的部分串行收缩压“NumberOfCycles”8);L_syss = getLatency (hdlfir要发送)
L_syss = 19

检查非对称完全平行收缩过滤器的延迟。这个分子有31个系数。

分子= sinc (0.4 * [30:0]);hdlfir = dsp。HDLFIRFilter (“分子”、分子);L_sysp = getLatency (hdlfir要发送)
L_sysp = 37

检查与部分串行收缩过滤器相同的非对称过滤器的延迟。在本例中,指定SerializationOption乘以乘数。该对象实现了一个过滤器,它有2个乘数,在输入样本之间需要8个周期。

hdlfir = dsp。HDLFIRFilter (“分子”分子,“FilterStructure”的部分串行收缩压...“SerializationOption”“最大乘数数”“NumberOfMultipliers”,2); L_syss=getLatency(hdlfir,输入类型)
L_syss = 37

检查完全并行转置架构的延迟。这个过滤器结构的延迟总是6个周期。

hdlfir = dsp。HDLFIRFilter (“分子”分子,“FilterStructure”“直接形式转置”);L_trans = getLatency (hdlfir要发送)
L_trans = 6

提示

重置行为

  • 默认情况下,dsp。HDLFIRFilter对象只将生成的HDL全局重置连接到控制路径寄存器。这两个重置属性,ResetInputPortHDLGlobalReset,将重置信号连接到数据路径寄存器。由于重置信号上的额外路由和加载,重置数据路径寄存器会降低合成性能。

  • ResetInputPort属性使重置对象的参数。复位信号实现数据路径寄存器的本地同步复位。为了优化FPGA资源的使用,该选项不将复位信号连接到针对FPGA的DSP块的寄存器。

  • HDLGlobalReset属性将生成的HDL全局复位信号连接到数据路径寄存器。这个属性不会改变对象的参数或修改MATLAB中的模拟行为。生成的HDL全局重置可以是同步的,也可以是异步的,这取决于您的HDL代码生成设置。根据您的设备,使用全局重置可能会将寄存器移出DSP块并增加资源使用。

  • 当你同时设置ResetInputPortHDLGlobalReset属性真正的,全局和局部复位信号清除控制和数据路径寄存器。

算法

该系统对象实现了上面描述的算法离散FIR滤波器HDL优化块引用页面。

兼容性的考虑

全部展开

行为在R2019a中改变

介绍了R2017a