可编程滤波器系数FIR滤波器
请注意
滤波器设计高密度脂蛋白编码器™产品在将来的版本将会停止。相反,你可以硬件行为模型,生成HDL代码通过使用对象或仿真软件系统金宝app®块从DSP HDL工具箱™。这些对象和块包括hardware-friendly控制信号和体系结构的选择。从DSP高密度脂蛋白HDL代码生成工具箱对象和块,你还必须有HDL编码器™产品。
对建模可编程数字滤波器对硬件的例子,看看FPGA可编程滤波器和可编程滤波器优化资源(DSP HDL工具箱)。这些示例使用离散冷杉滤波器(DSP HDL工具箱)块。等效的功能也是可用的dsphdl.FIRFilter
(DSP HDL工具箱)系统对象™。
默认情况下,编码器获得滤波器系数的滤波器对象,并将生成的代码。一个高密度脂蛋白过滤器实现生成以这种方式不能使用一组不同的系数。
直接形成FIR滤波器,编码器提供UI选项和相应的命令行属性,让你:
为从内存加载系数生成一个接口。系数存储在内存中被称为可编程的系数。
测试接口。
可编程滤波器系数是支持这些直接形成冷杉滤波器类型:金宝app
直接的形式
直接形成对称的
直接形式反对称
使用可编程的系数,一个端口接口(称为处理器接口)为过滤器生成实体或模块。装载系数被认为是一个外部的微处理器的控制下生成的过滤器。过滤器使用加载系数处理输入样本。
可编程滤波器系数是支持这些滤波器架构:金宝app
完全平行
全系列
部分系列
级联序列
当你选择一个串行冷杉过滤器体系结构中,您还可以指定系数是如何存储的。您可以选择一个双端口RAM或广泛或注册文件。看到可编程滤波器系数FIR滤波器。
你也可以生成一个处理器接口加载IIR滤波器系数。看到可编程滤波器对IIR滤波器系数。
UI选择可编程的系数
这些UI选项允许您指定可编程的系数。
的系数来源在生成HDL工具允许您选择系数是否经过滤对象和硬编码(
内部
),或者从内存(处理器接口
)。默认值是内部
。相应的命令行属性
CoefficientSource
。的系数的刺激选择在试验台面板产生的高密度脂蛋白工具指定如何试验台测试生成的存储器接口。
相应的命令行属性
TestBenchCoeffStimulus
。
生成一个试验台可编程冷杉系数
本节描述如何使用TestBenchCoeffStimulus
属性来指定如何试验台驱动系数港口。您还可以使用系数的刺激选择这一目的。
当一个系数内存接口已经生成了一个过滤器,有相关的测试向量系数的端口。的TestbenchCoeffStimulus
属性决定了试验台驱动系数港口。
的TestBenchStimulus
属性决定了滤波器的输入刺激。
的TestbenchCoeffStimulus
属性选择从两种类型的测试的长椅。TestbenchCoeffStimulus
接受一个向量参数。有效的值是:
[]
:空向量。(默认)时的值
TestbenchCoeffStimulus
是一个空向量,试验台加载系数从过滤器对象,然后输入刺激力量。这个测试验证接口写一组系数到内存中没有遇到一个错误。(
coeff1
,coeff2
,……coeffN
]:向量的N
系数,N
决定如下:对于对称过滤器,
N
必须等于装天花板(长度(filterObj.Numerator) / 2)
。为反对称的过滤器,
N
必须等于地板(长度(filterObj.Numerator) / 2)
。对于其他过滤器,
N
必须等于过滤器对象的长度。
在这种情况下,两次过滤过程输入的刺激。首先,试验台加载系数从过滤器对象和力量输入刺激的反应。然后,滤波器加载系数中指定的集合
TestbenchCoeffStimulus
向量,并显示相同的输入刺激的反应处理第二次。在这种情况下,滤波器的内部状态,作为输入的首次运行设定的刺激,就留下了。试验台验证接口编写两套不同的系数系数的记忆。该试验台还提供了如何使用内存接口的一个例子程序不同的滤波器系数。
请注意
如果一个系数存储接口没有以前生成的过滤器,TestbenchCoeffStimulus
属性将被忽略。
例如,看到的试验台的冷杉滤波器系数可编程。
使用可编程的系数和串行数字滤波器架构
本节讨论特殊考虑使用可编程滤波器和FIR滤波器系数的串行架构。
全系列
部分系列
级联序列
指定内存可编程的系数
默认情况下,处理器接口可编程系数从寄存器文件加载系数。的系数的记忆下拉菜单允许您指定替代基于ram存储可编程的系数。
你可以设置系数的记忆当:
过滤器是一个冷杉过滤器。
你设置系数来源来
处理器接口
。你设置体系结构来
全系列
,部分系列
,或级联序列
。
图中显示的系数的记忆选择一个完全串行冷杉过滤器。你可以使用下拉列表中选择一个选项。
表总结了系数的记忆选项。
系数的记忆选择 | 描述 |
---|---|
寄存器 |
默认的:可编程系数存储在寄存器文件。 |
单独的端口公羊 |
在广泛的RAM存储可编程的系数。 程序员编写每个内存及其接口一个单独的文件中。生成的公羊的数量取决于过滤分区。 |
双端口公羊 |
在双端口RAM存储可编程的系数。 程序员编写每个内存及其接口一个单独的文件中。生成的公羊的数量取决于过滤分区。 |
时间的考虑
在串行实现的滤波器系统时钟的速率(clk
)通常是一个多个输入的数据速率(滤波器的采样率)。精确的时钟频率和数据速率之间的关系取决于你选择的串行架构和分区选项。
可编程系数加载到coeffs_in
港口在系统时钟频率(速度)或输入数据(慢)率。如果你的设计需要加载速度系数,观察这些点。
当
write_enable
断言,系数的负载coeffs_in
港口到系数内存中指定的地址write_address
。write_done
可以为许多时钟周期维护。如果write_done
断言至少两个clk
周期到来之前下一个数据输入值,新的系数与下一个数据样本将被应用。否则,新系数将申请后下一个样本的数据。
这两个例子说明串行分区如何影响系数的时间加载。
创建一个与11直接形式滤波器系数。
rng (13893“v5uniform”);b =兰德(11);filt = dsp.FIRFilter (“分子”b“结构”,直接形成的);
生成VHDL代码filt
使用串行的部分串行架构分区4 [7]
。集CoefficientSource
生成一个处理器接口。
generatehdl (filt“InputDataType”15)numerictype(16日,…“SerialPartition”7 [4],“CoefficientSource”,“ProcessorInterface”);
# # #输入采样率的时钟频率是7倍这个架构。# # # HDL延迟是3样本
这个分区结果的时钟频率输入采样率的七倍。
计时图演示了加载速率系数相对于输入数据的样本。而write_enable
断言,11个系数值加载,通过吗coeffs_in
11连续的内存地址。在下一个clk
周期,write_enable
deasserted和write_done
断言为一个时钟周期。装载作业的系数是两个周期内完成数据的输入,允许2clk
周期多长时间到来之前的数据值07年fff
。因此新加载系数应用于数据样本。
现在定义一个连环的分区(6 - 5)
同样的过滤器。这个分区导致较慢的时钟频率,六次输入采样率。
generatehdl (filt“InputDataType”15)numerictype(16日,…“SerialPartition”(6 - 5),“CoefficientSource”,“ProcessorInterface”);
# # #时钟频率是6乘以这个架构的输入采样率。# # # HDL延迟是3样本
计时图说明write_done
deasserts太晚的系数应用到到达的数据值278 e
。他们被应用到下一个样本,7 fff
。