基于System Generator的数字滤波器(Simulink验证+Block设计+FPGA的仿真验证)

2020-06-29 11:16:15 浏览数 (1)

前两天简单的对Sysem Generator做了下了解和使用,接下来几天将用这个工具来设计一些数字信号处理里的东西,今天搞下数字滤波器的设计。

~Show Time~

首先打开System Generator 2018.2,不清楚咋打开的可以看下我前两天发的,等待MATLAB启动完成后,再打开simulink并且建立一个空白模型(以.slx为后缀),将其存放到自己想要存放的位置,保存好文件后就开始放置相关的模块来进行今天的设计。

首先产生带有两个或多个频率信息的信号,使用Sine Wave产生,然后用Add进行叠加,然后用scope观察信号,设计结果如下图所示,用到的Block可以直接在库的界面进行搜索或者自行百度找对应的位置所在

图中使用了两个Sine Wave模块,分别产生9M和1M的正弦信号,然后叠加,在示波器上看到各个信号的样子。

9M的Sine Wave设置:

1M的Sine Wave设置:

Add使用默认设置“ ”

然后scope就是示波器,需要一下的设置,或者直接放置三个进行查看,我是在示波器上设置了三个PORT,操作依次如下:

如果此时没有将各个通道的信号分开查看,则会出现混在一起,但是分颜色的现象,如下:

为方便看清每个通道的信号,继续如下操作:

上面三个蓝色的框框就是代表设置一列三行的显示框,效果如下:

第一个波形代表9MHz,第三个代表1M,第二个代表两个相叠加的信号,也是后面用于滤波所需的原始信号。

开始设计滤波器,准备将1MHz的信号从叠加的信号中滤出,可以使用Simulink中的FDATool(使用Digital Filter Design模块进行设置的时候就是直接调用的FDATool)或者Lowpass Filter模块实现滤波器的设计,之前发的“模数和数模”已经有介绍过,在数字信号处理前需要将模拟信号转换为数字信号,因此在滤波前需要添加一个转换,该设计使用0阶保持(Zero-Order Hold),将信号变成离散的用于后续的使用,然后为方便直观的观察滤波效果,使用频谱分析仪(Spectrum Analyzer)进行查看滤波后的频率信息。

运行后,可以看到原始的频谱、使用FDATool设计的滤波器以及Lowpass Fiter进行滤波后的所存的频谱信息,示波器就是用于观察滤波后的波形,滤波器的设计都根据以下的参数进行设计,频率参数包括:采样频率20MHz,带通频率1.5MHz,带阻频率8.5MHz,这样就可以将1M很有效的保持,并将9M的信号滤除;幅度参数包括:通带衰减0.01dB,阻带衰减100dB,相应的如下所示;

例如使用FDATool设计的如下,其他的根据以上的参数信息进行设置即可,点击Design Filter后看上方的幅频特性曲线,在1.5M以前都是保持一条线,然后在1.5到8.5M慢慢衰减到了将近-90dB的幅值,符合之前的“模数和数模”里的滤波器设计要求:

设计成功后运行,运行的时间稍微设置下,设置的结果如下,Stop Time使用的是10000/20e6,代表在20M的采样率下有10000个采样点,不然采的点数太多,需要运行很久,太少则无法进行频谱的分析。

各个频谱分析仪以及滤波后的样子所得效果如下:

可以从图中看到叠加的信号中有两个频率信息,经过滤波器后,9M的频率被抑制了。

Simulink已经验证完数字滤波器的效果了,然后就是使用System Generator来实现FPGA的设计了。

和上一篇的一样,先将System Generator中所需的模块添加进来,本次的设计需要有以下模块:

Xilinx Blockset—>DSP—>Digital FIR Filter FDATool

Xilinx Blockset—>BasicElements menu—>Gateway In Gateway Out SystemGenerator

然后再加一个Spectrum Analyzer用于观察滤波后信号的频谱,示波器观察实际滤波后的信号,添加方式举一个例子,其他的类似进行即可,或者直接拖到模型文件中;

连好各个模块之间的线,结果如下:

相关Blocks的配置如下,没写的默认即可:

Gateway In

Implementation这次就不进行设置了,不配置管脚那些,有需要的话可以自己弄。

Digital FIR Filter,下图中箭头所指的内容,代表该滤波器使用FDATool设计的系数。

FDATool,该模块的配置和前面设计数字滤波器时的配置一致

System Generator,Compilation菜单下的IP Catalog 用来确保在输出IP目录的格式,Part我就直接使用默认的FPGA器件,Hardwaredescription language选择Verilog,选择VHDL也可以,然后勾上Create testbench生成激励文件,在VIVADO中进行仿真验证滤波器的设计结果。

然后点击OK就可以保存配置并关闭该模块的配置,其他的模块也是类似。

然后直接点Run,可以看到这部分的频谱分析仪的波形,与Simulink中的FDATool设计的数字滤波器滤波后的信号的频谱进行对比,如下:

可以看到右边窗口的频谱(Spectrum Analyzer SysGen的窗口)和左边窗口即用Simulink的数字滤波器设计所得的(Spectrum Analyzer FDATool)有轻微的不同,这是因为当连续时间系统在离散时间硬件描述时受到量化和采样的影响。

生成VIVADO工程还需要设置一下systemgenerator这个模块,在Clocking菜单下时钟周期-FPGA clock Period为50ns,也就是1/20MHz,Simulink system period也因此是1/20e6(sec),Perform analysis下选择Post Synthesis,Analyzer type选择Resource,这部分的选择是为了在编译好VIVADO工程后得到资源利用率的详情,设置结果如下

然后Apply进行应用一下,再Generate进行编译生成,编译结束后出现资源信息

点击OK退出该窗口,其他弹出的信息窗口同此,直接点叉叉关闭也行。

最终完成的整个设计的结果如下:

然后打开生成的VIVADO工程,打开方式在上一次已经讲过,就不再多述,打开后看下仿真的顶层文件是不是带了_tb的那个,不是的话自己把它设置为TOP层,然后依次二三步骤运行仿真,

然后Run个几百微秒,设置下波形的格式,就出现仿真波形了,gateway_in_net就是叠加了两个频率的原始信号。Gateway_out_net就是滤波后的结果,很明显是将低频的那部分信号滤出来了。

数字滤波器的设计结束了,如果有些不太理解的可以看看之前的几篇文章,之后遇到相同的步骤就不再进行一一讲述了。

0 人点赞