主要内容

高密度脂蛋白巴特沃斯滤波器

这个例子演示了如何生成HDL代码5阶巴特沃斯滤波器。滤波器的截止频率相对于采样率很低,导致一个过滤器,使实际是困难的。也,因为过滤小输入(8位)和输出(9-bit)字大小,量子化的过滤器需要变现比例。

设计滤波器

使用CD 44.1 kHz的采样率和截止频率为500赫兹。首先,创建过滤器设计对象,然后创建一个对象™biquad过滤系统。最后,使用fvtool检查日志的频率响应。

Fs = 44100;F3db = 500;filtdes = fdesign.lowpass (“n, f3db”5 F3db Fs);butterFilter =设计(filtdes,“黄油”,“SystemObject”,真的,“FilterStructure”,“df1sos”,“UseLegacyBiquadFilter”,真正的);fvtool (butterFilter“Fs”Fs,“FrequencyScale”,“日志”);

{“字符串”:“图1图:级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。”、“特克斯”:“级响应(dB)”,“乳胶”:[]}

创建量化滤波器

应用不动点设置过滤器对象。这个示例使用9-bit定点输出数据与12位系数,20位状态,不能产品,32位。s manbetx 845通过使用检查响应fvtool

butterFilter。NumeratorCoefficientsDataType =“自定义”;butterFilter。CustomNumeratorCoefficientsDataType = numerictype ([], 12);butterFilter。CustomDenominatorCoefficientsDataType = numerictype ([], 12);butterFilter。CustomScaleValuesDataType = numerictype ([], 12);butterFilter。SectionInputDataType =“自定义”;butterFilter。CustomSectionInputDataType = numerictype(15)[], 20日;butterFilter。SectionOutputDataType =“自定义”;butterFilter。CustomSectionOutputDataType = numerictype(15)[], 20日;butterFilter。NumeratorProductDataType =“充分精确”;butterFilter。DenominatorProductDataType =“充分精确”;butterFilter。NumeratorAccumulatorDataType =“自定义”;butterFilter。32岁的CustomNumeratorAccumulatorDataType = numerictype ([] 24);butterFilter。DenominatorAccumulatorDataType =“自定义”;butterFilter。32岁的CustomDenominatorAccumulatorDataType = numerictype ([] 25);butterFilter。OutputDataType =“自定义”;butterFilter。CustomOutputDataType = numerictype ([] 9 7);butterFilter。RoundingMethod =“最近的”;butterFilter。OverflowAction =“包装”;fvtool (butterFilter“Fs”Fs,“FrequencyScale”,“日志”,“算术”,“固定”);

{“字符串”:“图2图:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含3线类型的对象。这些对象代表过滤器# 1:量化、过滤# 1:参考。”、“特克斯”:“级响应(dB)”,“乳胶”:[]}

Requantize过滤器

在上面的图中,fvtool表明,量子化的通频带大约是2 dB低于预期的响应。调整系数单词长度从12到16的量子化的反应接近参考双精度响应和放大通带响应。量化滤波器现在刚刚超过0.1 dB低于参考滤波器。

butterFilter。CustomNumeratorCoefficientsDataType = numerictype ([], 16);butterFilter。CustomDenominatorCoefficientsDataType = numerictype ([], 16);butterFilter。CustomScaleValuesDataType = numerictype ([], 16);h = fvtool (butterFilter,“Fs”Fs,“FrequencyScale”,“日志”,“算术”,“固定”);h。变焦(1.0 [0 1 1]);

{“字符串”:“图图3:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含3线类型的对象。这些对象代表过滤器# 1:量化、过滤# 1:参考。”、“特克斯”:“级响应(dB)”,“乳胶”:[]}

检查范围值

硬件实现的滤波器设计的关键步骤是检查刻度值是否合理,如果需要调整刻度值。首先,检查量化规模相对于输入值规范。输入数据与部分长度为7位8位值。自前两个规模与这些输入值小于可以设置,大部分的输入值是量子化的。为了纠正这种行为,必须按比例缩小的过滤器。

尺度= butterFilter.ScaleValues。* 2^7% #好< * NASGU >
尺度=4×10.1588 0.1535 4.4042 128.0000

现在规模过滤器使用频域无穷范数。在这种情况下,缩放后,规模值都等于1。

规模(butterFilter“Linf”);尺度= butterFilter.ScaleValues
尺度=4×11.0000 1.0000 1.0000 1.0000

生成HDL代码和试验台的量子化的过滤器

从正确的量子化的过滤器,生成硬件描述语言(VHDL)®或Verilog®代码。您可以选择生成硬件描述语言(VHDL)或Verilog HDL设计试验台验证匹配的MATLAB®过滤器。

生成Verilog相反,改变的价值开发财产,从硬件描述语言(VHDL)的“Verilog”

自通带滤波器相对于采样率低、自定义输入刺激是一个更好的方法来测试过滤器实现。构建一个周期的测试输入每个50到300赫兹,在50 Hz的步骤。

生成8位和7位签署了定点输入部分的长度。

生成VHDL代码过滤和硬件描述语言(VHDL)试验台验证结果与MATLAB的结果准确。

userstim = [];n = [50、100、150、200、250、300] userstim = [userstim,罪(2 *π* n / f * (0: Fs / n)));% #好吧结束generatehdl (butterFilter“名字”,“hdlbutter”,“开发”,硬件描述语言(VHDL)的,“GenerateHDLTestbench”,“上”,“TestBenchUserStimulus”userstim,“InputDataType”7)numerictype(8日);
# # #开始硬件描述语言(VHDL)过滤器的代码生成过程:hdlbutter # # #生成:/ tmp / Bdoc22b_2134332_443143 / tp3c3a9c7b hdlfilter-ex42204542 / hdlsrc / hdlbutter。vhd # # # # # #开始代hdlbutter VHDL的实体开始代hdlbutter硬件描述语言(VHDL)架构# # #一阶部分,# 1 # # #二阶节# 2 # # #二阶节# 3 # # #成功完成硬件描述语言(VHDL)过滤器的代码生成过程:hdlbutter # # # HDL延迟是2 # # #样品开始一代的硬件描述语言(VHDL)试验台。刺激# # # # # #生成输入生成输入刺激;2166个样本长度。# # #生成试验台:/ tmp / Bdoc22b_2134332_443143 / tp3c3a9c7b hdlfilter-ex42204542 / hdlsrc / hdlbutter_tb。vhd # # #创造刺激向量……# # #完成生成硬件描述语言(VHDL)试验台。

生成HDL代码并使用FDHDLTool试验台

或者,您可以生成HDL代码和测试台上使用fdhdhltool命令。该命令打开一个对话框,允许您自定义和生成Verilog或VHDL代码和测试长椅的量子化的过滤器。

当你指定一个类型的过滤器,只显示相关的工具是定制的选项为滤波器类型。

fdhdltool (butterFilter numerictype (1、8、7));

您可以修改默认设置,然后单击生成生成HDL代码和/或一个试验台。

ModelSim®仿真结果

图像显示了ModelSim HDL模拟器在运行硬件描述语言(VHDL)试验台之后。ModelSim的结果与MATLAB的结果相比较。

xrange =(0:长度(userstim) - 1);y = butterFilter (fi (userstim。', 1, 8日7));次要情节(2,1,1);情节(xrange userstim);轴([0长度(userstim) -1.1 - 1.1]);标题(高密度脂蛋白巴特沃斯滤波器输入刺激的);包含(示例#的);次要情节(2,1,2);情节(xrange y);轴([0长度(userstim) -1.1 - 1.1]);标题(高密度脂蛋白巴特沃斯滤波器输出响应的);包含(示例#的);

图包含2轴对象。坐标轴对象1标题HDL巴特沃斯滤波器输入刺激包含一个类型的对象。坐标轴对象2标题HDL巴特沃斯滤波器输出响应包含一个类型的对象。

结论

你设计了巴特沃斯滤波器满足给定的规范。然后量子化的过滤器,发现通频带的要求没有满足。Requantizing系数和扩展过滤器固定这个问题。然后生成VHDL代码过滤和硬件描述语言(VHDL)试验台。

您可以使用ModelSim HDL模拟器,来验证这些结果。你也可以尝试硬件描述语言(VHDL)和Verilog过滤器和测试长椅。