高密度脂蛋白视频滤镜
这个例子演示了如何生成一个的HDL代码ITU-R BT.601亮度与8位输入数据和10位输出数据过滤。这个过滤器是一个低通滤波器和一个3 dB点采样频率为3.2 MHz 13.5 MHz指定范围和通带波纹和阻带衰减ITU规范所示。滤波器系数的设计使用DSP系统工具箱™。本例着重于量子化效应和生成HDL代码过滤系统的对象。
设置系数
前面设计的滤波器系数分配给变量b。这是一个halfband过滤,因此,每一个系数是零除滤波器系数的中点,这正是1/2。
检查双精度滤波器设计满足ITU-R BT.601模板通带波纹通带和阻带衰减使用freqz和阴谋。红线显示规范中允许的变化。
[0.00303332064210658 b = 0…-0.00807786494715095,0,…0.0157597395206364,0,…-0.028508691397868,0,…0.0504985344927114,0,…-0.0977926818362618,0,…0.315448742029959,…0.5,…0.315448742029959,0,…-0.0977926818362618,0,…0.0504985344927114,0,…-0.028508691397868,0,…0.0157597395206364,0,…-0.00807786494715095,0,…0.00303332064210658);f = 0:100:2.75e6;H = freqz (b, f, 13.5 e6);情节(f, 20 * log10 (abs (H)));标题(高密度脂蛋白视频滤波器双精度通带的);轴([0 2.75 e6。8。8]);passbandrange = {[2.75 e6;1 e6;0;1 e6;2.75 e6),…(-0.5;-0.5;0;0.5;0.5)};线(passbandrange {:},“颜色”,“红色”);
画出阻带
红线显示了一个“不超过”限制在阻带。
f = 4 e6:100:6.75e6;H = freqz (b, f, 13.5 e6);情节(f, 20 * log10 (abs (H)));标题(高密度脂蛋白视频滤波器双精度阻带的);轴(6.75 [4 e6 e6 -70 -35]);stopbandrange = {[4 e6;6.25 e6;6.75 e6),…(-40;-55;-55]};线(stopbandrange {:},“颜色”,“红色”);
创建量化滤波器
创建一个冷杉过滤系统对象与之前定义的过滤系数。实验系数单词长度为8位得到所需的响应输入数据和10位输出数据。
videoFilter = dsp.FIRFilter;videoFilter。分子= b;videoFilter。结构=直接形成对称的;%尝试10位系数videoFilter。CoefficientsDataType =“自定义”;videoFilter。CustomCoefficientsDataType = numerictype (10);
情节量化滤波器响应
现在检查量化滤波器的通带和阻带响应相对于规范。阴谋,首先检查量子化的通频带。
量化设计满足通频带规范除了在特区,它忽略了规范约0.035 dB。
f = 0:100:2.75e6;H = freqz (videoFilter f 13.5 e6,“算术”,“固定”);情节(f, 20 * log10 (abs (H)));标题(高密度脂蛋白视频滤镜量子化的通带的);轴([0 2.75 e6。8。8]);线(passbandrange {:},“颜色”,“红色”);
情节的量子化的阻带
红线再次显示“不超过”限制在阻带。
阻带限制违反了,这表明量化设置的问题。
f = 4 e6:100:6.75e6;H = freqz (videoFilter f 13.5 e6,“算术”,“固定”);情节(f, 20 * log10 (abs (H)));标题(高密度脂蛋白视频滤镜量子化的阻带的);轴(6.75 [4 e6 e6 -70 -35]);线(stopbandrange {:},“颜色”,“红色”);
变化的系数量化器设置
添加更多的位字长使滤波器的系数满足规范。增加单词长度和改建阻带。
这只是忽略了规范的阻带。这个小偏离规范可能是可接受的,如果你知道一些其他的一部分系统适用于这个信号的低通滤波器。
videoFilter。CustomCoefficientsDataType = numerictype (11);f = 4 e6:100:6.75e6;H = freqz (videoFilter f 13.5 e6,“算术”,“固定”);情节(f, 20 * log10 (abs (H)));标题(高密度脂蛋白视频滤镜量子化的阻带的);轴(6.75 [4 e6 e6 -70 -35]);线(stopbandrange {:},“颜色”,“红色”);
设置最后的系数量化字长
加多一位系数量化字长和改建阻带。这应该符合规范。
videoFilter。CustomCoefficientsDataType = numerictype (12);f = 4 e6:100:6.75e6;H = freqz (videoFilter f 13.5 e6,“算术”,“固定”);情节(f, 20 * log10 (abs (H)));标题(高密度脂蛋白视频滤镜最后量子化的阻带的);轴(6.75 [4 e6 e6 -70 -35]);线(stopbandrange {:},“颜色”,“红色”);
在通带响应执行最终检查
重新检查确保通频带附近的变化提高了响应的问题。现在通过规范的响应。
f = 0:100:2.75e6;H = freqz (videoFilter f 13.5 e6,“算术”,“固定”);情节(f, 20 * log10 (abs (H)));标题(高密度脂蛋白视频滤镜最后量子化的通频带的);轴([0 2.75 e6。8。8]);线(passbandrange {:},“颜色”,“红色”);
生成HDL代码和试验台的量子化的过滤器
从量化的过滤器,生成硬件描述语言(VHDL)或Verilog代码。
创建一个临时工作目录。后生成HDL(选择硬件描述语言(VHDL)在这种情况下),在编辑器中打开生成的硬件描述语言(VHDL)文件。
生成一个硬件描述语言(VHDL)试验台,以确保在MATLAB完全匹配的响应。选择默认输入的刺激,这对冷杉是冲动,一步,坡道,唧唧喳喳,噪声输入。
生成Verilog代码和Verilog试验台相反,改变为“开发”属性值从“硬件描述语言(VHDL)”到“Verilog”。
警告表明,通过选择对称结构的过滤和产生高密度脂蛋白,可能导致较小的区域或更高的时钟频率。
假设一个输入8位字长和7位小数部分。
workingdir = tempname;generatehdl (videoFilter“名字”,“hdlvideofilt”,…“InputDataType”numerictype (7),…“开发”,硬件描述语言(VHDL)的,…“TargetDirectory”workingdir,…“GenerateHDLTestbench”,“上”);
# # #开始硬件描述语言(VHDL)过滤器的代码生成过程:hdlvideofilt # # #生成:/ tmp / Bdoc23a_2213998_491196 / tpf775bc5c_8389_41bc_938f_f0d9cd6296c1 / hdlvideofilt。vhd # # # # # #开始代hdlvideofilt VHDL的实体开始代hdlvideofilt硬件描述语言(VHDL)架构# # #成功完成硬件描述语言(VHDL)过滤器的代码生成过程:hdlvideofilt # # # HDL延迟是2 # # #样品开始一代的硬件描述语言(VHDL)试验台。刺激# # # # # #生成输入生成输入刺激;3261个样本长度。# # #生成试验台:/ tmp / Bdoc23a_2213998_491196 / tpf775bc5c_8389_41bc_938f_f0d9cd6296c1 / hdlvideofilt_tb。vhd # # #创造刺激向量……# # #完成生成硬件描述语言(VHDL)试验台。
编辑(fullfile (workingdir,“hdlvideofilt.vhd”));
试验台的刺激
情节默认试验台刺激使用上面的命令,使用generatetbstimulus函数。
tbstim = generatetbstimulus (videoFilter,“InputDataType”7)numerictype(8日);情节(tbstim);标题(高密度脂蛋白视频滤试验台刺激的);
结论
你设计了一个双精度过滤来满足ITU-R BT.601亮度过滤器规格,然后创建了一个冷杉过滤系统对象,也符合规范。你生成VHDL代码和功能验证了滤波器的硬件描述语言(VHDL)试验台。
您可以使用硬件描述语言(VHDL)模拟器,比如ModelSim®,以验证这些结果。你也可以用Verilog实验。您可以使用许多优化得到更小、更快的HDL的结果通过删除约束MATLAB生成的高密度脂蛋白是完全正确。当你使用这些优化,高密度脂蛋白试验台可以检查在指定的滤波器响应误差的MATLAB的回应。