二相fir滤波器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二相FIR滤波器

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

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

(以上内容来自陈弘毅、白国强等,VLSL数字信号处理系统--设计与实现,机械工业出版社) 因此为了实现并行处理,我们需要将序列以奇偶形式分为两个并行序列,滤波器则需要调用4个阶数为一半的ip核(自己写的仿真没通过),相应的滤波器系数也需要分奇偶分别送入。本实验以32阶低通滤波器,处理一路20M与80M的混频信号为例。

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

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

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

(3)接下来,我们用matlab的fdatool仿真FIR滤波

在MATLAB Command Window中输入fdatool并按回车键,得到fdatool工具框。再设置单位Units为MHz,采样频率为Fs为500,通带Fpass为20,阻带

Fstop为60;再点击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 使用xilinx的ip核设计两相滤波器

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

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

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

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

4 使用modelsim仿真

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

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

成分。

了高频而保留的低频。只是经过滤波器的乘加运算,数据的幅度值已经发生了变化。

相关文档
最新文档