文档

HDL逆Sinc滤波器

这个示例演示了如何为逆sinc (sinx /x)峰值滤波器生成HDL代码,该滤波器添加了预强调,以补偿数模转换器(DAC)固有的sinc响应。输入是一个10位视频信号,输出按比例调整以适应逆sinc响应的增益。

设计过滤器

使用27 MHz的视频采样率和7.2 MHz的通带边缘频率。设置允许的峰到峰通带纹波为0.1 dB,阻带衰减为-66 dB。然后,利用firceqrip对滤波器进行设计,得到一个对称FIR滤波器。最后,使用fvtool检查响应。

Fs = 27e6;%采样频率,单位为MHzN = 20;%的顺序Fpass = 7.2e6;通带频率,单位为MHz斜率= 0;%阻带坡度spectype =“passedge”频率规格类型Isincffactor = 1;%逆正弦频率因子Isincpower = 1;%逆Sinc幂Dstop = 10^(-66/20);%阻带衰减-66 dBRipple = 10^(0.1/20);%通带纹波0.1 dB p-pDpass = (ripple - 1) / (ripple + 1);使用FIRCEQRIP函数计算系数。b = firceqrip(N, Fpass/(Fs/2), [Dpass, Dstop],“坡”坡,...spectype,“invsinc”, isincffactor, isincpower);inverseSincFilter = dsp。FIRFilter (“分子”b“结构”“直接形式对称”);fvtool (inverseSincFilter“Fs”Fs);轴([0 Fs/2e6 -80 10]);

创建量化过滤器

使用freqz的无穷范数来找到最大逆sinc增益,然后将这个增益缩放成位,四舍五入。接下来,对过滤器应用定点设置。使用fvtool检查响应。

Gbits = ceil(log2(norm(freqz(inverseSincFilter), inf));specifyall (inverseSincFilter);inverseSincFilter。customcoefficients sdatatype = numerictype(1,16,15);inverseSincFilter。CustomOutputDataType = numerictype(1,10+Gbits,9);inverseSincFilter。CustomProductDataType = numerictype(1,32,30);inverseSincFilter。CustomAccumulatorDataType = numerictype(1,33,30); fvtool(inverseSincFilter,“Fs”Fs,“算术”“固定”);轴([0 Fs/2e6 -80 10]);

从量化滤波器生成HDL代码

从量化过滤器开始,生成VHDL或Verilog代码。您还可以选择生成VHDL或Verilog测试台,以验证HDL设计是否与MATLAB®滤波器匹配。

要生成VHDL,将属性'TargetLanguage'的值从'Verilog'更改为'VHDL'。

生成一个Verilog测试平台,以确保结果与您在MATLAB中看到的响应完全匹配。因为这是一个视频过滤器,所以构建并指定一个类似于一行视频的刺激作为测试刺激。

创建临时工作目录。在生成HDL代码(在本例中选择Verilog)和测试平台之后,在编辑器中打开生成的Verilog文件。

Workingdir = tempname;Fsub = 5e6*63/88;% 3.579545 MHzvoltperire = (7 + 1/7)/1000;% IRE阶跃为7.14mVNsamples = 1716;% 27ms /s视频线路userstim = 0 (1,Nsamples);预定义数组% 8样品升高余弦-40 IREsyncedge = ((cos(π/ 2 *(0:7)/ 8)。^ 2)- 1)* 40 * VoltsperIRE;(2*pi * Fsub/Fs * (0:Fs/(Fsub/9)));Userstim(33:40) =同步;userstim(41:170) = repmat(-40 * volperire, 1,130);Userstim (171:178) = syncedge(end:-1:1);Userstim (180:247) = burst;%斜坡,色度超过1416个样品,从7.5到80 IRE,色度为20 IREActlen = 1416;Active = 1:actlen;Userstim (260:1675) = (((active/actlen * 72.5)+7.5) +...20 * sin(2*pi * Fsub/Fs *有源))*电压perire;userstim(1676:Nsamples) = 72.5 * volvolsperire * (41:-1:1)/41;generatehdl (inverseSincFilter“名字”“hdlinvsinc”“开发”“Verilog”...“GenerateHDLTestbench”“上”...“TestBenchUserStimulus”userstim,...“TargetDirectory”workingdir,...“InputDataType”, numerictype(1、10、9));
生成:/tmp/Bdoc19b_1305395_158845/tp685ca497_9968_4226_806c_6f213f27ffc7/hdlinvsinc。##开始生成hdlinvsinc Verilog模块##开始生成hdlinvsinc Verilog模块主体###成功完成Verilog代码生成过程的过滤器:hdlinvsinc ## HDL延迟是2个样本## Verilog测试台开始生成。###已生成输入刺激;长度1716个样品。生成测试台:/tmp/Bdoc19b_1305395_158845/tp685ca497_9968_4226_806c_6f213f27ffc7/hdlinvsinc_tb。v ###创建刺激向量…完成VERILOG测试台的生成。
编辑(fullfile (workingdir,“hdlinvsinc.v”));编辑(fullfile (workingdir,“hdlinvsinc_tb.v”));

ModelSim®仿真结果

下面的显示显示了运行测试台架后ModelSim HDL模拟器的波形。将ModelSim的结果与下面的MATLAB结果进行比较。

xrange = 0:Nsamples-1;y = inverseSincFilter(fi(userstim.',1,10,9));次要情节(2,1,1);情节(xrange userstim);轴([0 500 -0.4 1.1]);标题(“刺激中的HDL逆Sinc滤波器。”);包含(示例#的);次要情节(2,1,2);情节(xrange y);轴([0 500 -0.4 1.1]);标题('HDL逆Sinc过滤响应。');包含(示例#的);

结论

您设计了一个逆sinc滤波器来满足给定的规范。您使用近似的视频线作为测试刺激,生成了Verilog代码和Verilog测试台。

您可以使用HDL模拟器来验证这些结果。您还可以使用VHDL和Verilog进行过滤器和测试台的实验。