二相并行FIR滤波器的matlab及使用FIR IP 核的FPGA实现

二相并行FIR滤波器的matlab及modelsim仿真



  二相FIR滤波器即并行FIR滤波器,以面积换取速度,可以在同样的时钟频率下,提高原始滤波器的有效吞吐量,或者降低原始滤波器的功耗。

并行FIR滤波器的多项式分解表示


(以上内容来自陈弘毅、白国强等,VLSL数字信号处理系统--设计与实现,机械工业出版社)

因此为了实现并行处理,我们需要将序列以奇偶形式分为两个并行序列,滤波器则需要调用4个阶数为一半的ip核(自己写的仿真没通过),相应的滤波器系数也需要分奇偶分别送入。本实验以32阶低通滤波器,处理一路20M80M的混频信号为例。



matlab产生混频信号、滤波器系数,并进行仿真


1)产生混频信号的代码如下(混频信号要输出到文件,用于modelsim仿真):


2)产生的正弦波及混频信号波形如下图



3)接下来,我们用matlabfdatool仿真FIR滤波


   MATLAB Command Window中输入fdatool并按回车键,得到fdatool工具框。再设置单位UnitsMHz,采样频率为Fs500,通带Fpass20,阻带Fstop60;再点击Design Filter(滤波器阶数刚好为32阶)。最终工具框如下图所示:



现在我们将此滤波器生成为.m文件,以在MATLAB中调用。点击File,点击Generate M-file,保存为mylowfilter.m。其内容为下图



接下来,可以在MATLAB中调用此.m文件对混频信号进行滤波,其程序如下(还对滤波后数据进行绘制,并输出到文件,再读回,为了全部以16进制表示,做了细微处理)



所有波形图如下


4)输出滤波器系数(用于modelsim仿真)


现需取出滤波器系数。点File,点Export,得到下图



点击Export即可。


此时MATLAB主界面的workplace中会出现Num,如下图,



双击Num,即可在Editor界面中得到滤波器系数,直接将这些系数复制到文本文件Num.txt



接下来,将Num的值量化后以16进制输出到文件,用于modelsim仿真(modelsim读数时,读取正数;故我们将Num的值量化后,需加上偏移量,在modelsim中再将偏移量减去)


此时,我们已用MATLAB产生了混频信号和滤波器系数。


使用xilinxip核设计两相滤波器


根据图9-1的结构框图进行设计。本实验中为了避免不可预料的麻烦(最初是调用两个ip核分别做H0H1,但仿真时发现两个核的工作状态不一致),只生成一个16阶滤波器,通过系数加载的方式得到两个具有不同滤波系数的滤波器,其中H0对应偶系数,H1对应奇系数。


这里不再阐述工程的建立过程。16FIR滤波器IP核的生成过程如下:

另外,由图9-1可见,还需要两个有符号数加法器,这里也调用xilinxIP核。



接下来的工作是例化4FIR2个有符号数加法器,注意数据的对齐。



使用modelsim仿真


这是加载系数时的时序图,我们关注LD, WE, DIN三个信号。在tb中,以最简单的方式加载,给ld一个脉冲,马上给16拍的we高电平和16个系数。


测试代码如下,modelsim的输出结果还要将奇偶合并起来,并输出到文件,再由MATLAB回读后,画出波形。


仿真波形如下,从图中可以看到输入的奇偶序列是有混频的,而输出的波形已经只含有低频成分。



20
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值