Apollo912的个人空间 https://blog.eetop.cn/1276235 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

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

已有 3317 次阅读| 2016-2-22 08:24 |个人分类:信号处理

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

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


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

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



2 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产生了混频信号和滤波器系数。


3 使用xilinxip核设计两相滤波器


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


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

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



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



4 使用modelsim仿真


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


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


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



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 251

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 05:19 , Processed in 0.024656 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部