高密度脂蛋白视频滤镜

该实施例说明如何生成HDL代码用于与8位的输入数据和10比特的输出数据的ITU-R BT.601的亮度滤波器。这个滤波器是具有3.2兆赫与13.5MHz的采样频率的-3 dB点和指定的范围为在ITU规范所示的两个通带波纹和阻带衰减的低通滤波器。滤波器系数使用DSP系统工具箱™设计。这个示例集中于量化效应和产生HDL代码System对象的过滤器。

建立系数

分配先前设计的滤波器系数的变量b。这是一个半带过滤器,因此,每一个其他系数为零与系数的在过滤器中点异常,而这正是二分之一。

检查双精度滤波器设计是否符合ITU-R BT.601模板的通带纹波和使用freqz阻带衰减,并绘制通带。红线表示规范中允许的变化。

b = [0.00303332064210658, 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)));标题(“HDL视频滤波器双精度通带”);轴([0 2.75e6 -.8 0.8]);passbandrange = {[2.75e6;1E6;0;1E6;2.75e6]...(-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)));标题(“HDL视频过滤器双精度阻带”);轴([4E6 6.75e6 -70 -35]);stopbandrange = {[4E6;6.25e6;6.75e6]...[-40;-55;-55]};线(stopbandrange {:},“颜色”'红');

创建量化过滤器

创建一个FIR滤波器系统对象滤波器与先前定义的系数。用字长系数进行实验,得到8位输入数据和10位输出数据的期望响应。

videoFilter = dsp.FIRFilter;videoFilter.Numerator = B;videoFilter.Structure =“直接形式的对称”;%尝试10位系数videoFilter。CoefficientsDataType =“自定义”;videoFilter。CustomCoefficientsDataType = numerictype (10);

画出量化的滤波器响应

现在检查相对于说明书的量化的滤波器的通带和阻带的响应。情节与第一检查量化通带。

量化的设计满足通带规格除了在DC,在那里它错过由大约0.035分贝规范。

f = 0:100:2.75e6;H = freqz(videoFilter,F,13.5e6,'算术'“固定”);情节(f, 20 * log10 (abs (H)));标题(“HDL视频滤波器量化通带”);轴([0 2.75e6 -.8 0.8]);线(passbandrange {:},“颜色”'红');

绘制量化的停止带

红线再次表示停止带的“不超过”限制。

停止带限制被违反,这表明量化设置有问题。

f = 4 e6:100:6.75e6;H = freqz(videoFilter,F,13.5e6,'算术'“固定”);情节(f, 20 * log10 (abs (H)));标题(“HDL视频滤波器量化阻带”);轴([4E6 6.75e6 -70 -35]);线(stopbandrange {:},“颜色”'红');

更改系数量化设置

加入更多的比特给系数字长使得过滤器,以满足规范。一个增量的字长和重新绘制阻带。

这只是错过在阻带末端的规范。如果你知道你的系统的其他部分应用低通滤波器,这个信号从规范这个小的偏差是可以接受的。

videoFilter。CustomCoefficientsDataType = numerictype (11);f = 4 e6:100:6.75e6;H = freqz(videoFilter,F,13.5e6,'算术'“固定”);情节(f, 20 * log10 (abs (H)));标题(“HDL视频滤波器量化阻带”);轴([4E6 6.75e6 -70 -35]);线(stopbandrange {:},“颜色”'红');

设置最终系数量化字长

多一个位添加到系数量化字长并重新绘制阻带。这应该符合规范。

videoFilter。CustomCoefficientsDataType = numerictype (12);f = 4 e6:100:6.75e6;H = freqz(videoFilter,F,13.5e6,'算术'“固定”);情节(f, 20 * log10 (abs (H)));标题(“HDL视频滤波器最终量化阻带”);轴([4E6 6.75e6 -70 -35]);线(stopbandrange {:},“颜色”'红');

对通带响应进行最后检查

重新检查通带,确保更改改善了直流附近的响应问题。响应现在通过了规范。

f = 0:100:2.75e6;H = freqz(videoFilter,F,13.5e6,'算术'“固定”);情节(f, 20 * log10 (abs (H)));标题(“HDL视频滤波器最终量化通带”);轴([0 2.75e6 -.8 0.8]);线(passbandrange {:},“颜色”'红');

产生从量化的滤波器HDL代码和测试台

从量化过滤器开始,生成VHDL或Verilog代码。

创建一个临时工作目录。生成HDL之后(在本例中选择VHDL),在编辑器中打开生成的VHDL文件。

生成一个VHDL测试平台,以确保与MATLAB中的响应完全匹配。选择默认的输入刺激,FIR信号为脉冲、阶跃、斜坡、啁啾和噪声输入。

要生成Verilog代码和Verilog测试平台,而不是为“TARGETLANGUAGE”从“VHDL”到“Verilog的”属性变化值。

的警告显示,通过选择对称结构对于在过滤器和产生HDL,可能会导致更小的区域或更高的时钟速率。

假设输入为8位字长和7位小数位。

工作目录= tempname;generatehdl(videoFilter,'名称'“hdlvideofilt”...“InputDataType”,numerictype(1,8,7),...'目标语言'硬件描述语言(VHDL)的...'targetdirectory中'workingdir,...'GenerateHDLTestbench''上');
生成:/tmp/Bdoc20a_1326390_11805/tp850cadf6_af5c_4ddd_9c8a_a11c695ee582/hdlvideofilt。成功完成了VHDL的代码生成过程:hdlvideofilt的延迟是2个样本的VHDL的启动生成测试台。生成输入刺激完成生成输入刺激;3261个样本长度。###生成测试平台:/tmp/Bdoc20a_1326390_11805/tp850cadf6_af5c_4ddd_9c8a_a11c695ee582/hdlvideofilt_tb。创造刺激载体…完成VHDL测试台的生成。
编辑(fullfile (workingdir,'hdlvideofilt.vhd'));

画出试验台刺激

使用generatetbstimulus函数绘制上述命令使用的默认测试工作台刺激。

tbstim = generatetbstimulus (videoFilter,“InputDataType”7) numerictype(8日);情节(tbstim);标题(“HDL视频滤波试验台刺激”);

结论

你设计了一个双精度过滤器,以满足ITU-R BT.601亮度过滤器规范,然后创建了还会见了规范FIR滤波器系统的对象。您生成VHDL代码和VHDL测试平台是功能验证的过滤器。

您可以使用VHDL仿真器,如的ModelSim®,以验证这些结果。您也可以尝试使用Verilog。您可以使用许多优化通过移除约束,生成的HDL是完全正确的,以MATLAB来获得更小,更快HDL结果。当你使用这些优化的HDL测试台可以检查滤波器响应是MATLAB响应的规定误差范围之内。