毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

基于VHDL语言的FIR滤波器设计 第5页

更新时间:2008-5-26:  来源:毕业论文

基于VHDL语言的FIR滤波器设计 第5页

4-1 8FIR低通滤波器的幅频特性
若图片无法显示请联系QQ752018766

4-2 8FIR低通滤波器的相频特性

4.1.2 FIR滤波器的模块划分

FIR数字滤波器的数字硬件系统主要由输入模块、乘累加模块、进制转换模块、锁存模块和输出显示模块组成。

各模块执行的功能说明如下:

1)输入模块:

输入模块的主要功能主要是完成对输入数据的处理,为后续电路做准备,主要由模拟信号源与A/D转换芯片TLC5510组成。

2)乘累加模块:

乘累加模块的主要功能是实现数据的相乘和累加。

3)进制转换模块

由于乘累加模块输出的数据为二进制的数据,为了方便在数码管上观察,此处将二进制数转化为二-十进制的BCD码。

4)锁存模块:

 锁存模块主要功能是将转化为BCD码的输出结果锁存后输出。

 5)输出显示模块:

 输出显示模块主要功能是将由锁存模块输出的数据在数码管上显示出来。

4.2 FIR滤波器各模块功能的实现

4.2.1 输入模块

 在输入模块中,主要由试验箱集成芯片ICL8038产生模拟信号,输入到TLC5510进行A/D转换,输出数据即为8位数字信号。采样频率选用120KHZ,,使用分频器实现,a6MHZ的时钟信号,对其进行50分频,b,c为分频以后的输出时钟信号,模块框图如下:

若图片无法显示请联系QQ752018766

4-3 分频器模块框图

 

4.2.2 乘累加模块

依据FIR滤波器的直接型结构,假定要求设计的FIR滤波器的阶数为8,即N=8。这时,滤波器的输出序列y(n)为:

y(1)=x(1)h(0)=0+0+0+0+0+0+0+x(1)h(0)

=0h(7)+0h(6)+0h(5)+0h(4)+0h(3)+0h(2)+0h(1)+x(1)h(0)

y(2)=x(1)h(1)+x(2)h(0)=0+0+0+0+0+0+x(1)h(1)+x(2)h(0)

   =0h(7)+0h(6)+0h(5)+0h(4)+0h(3)+0h(2)+x(1)h(1)+x(2)h(0)

    y(8)=x(1)h(7)+x(2)h(6)+x(3)h(5)+x(4)h(4)+x(5)h(3)+x(6)h(2)+x(7)h(1)+x(8)h(0)

可知,当n的值不同时(处于时钟的不同节拍),计算y(n)所需的乘法及加法的次数有所不同。为了实现程序在每次循环中(一个时钟周期内)以相同的运算形式,算出一个y(n)值,可把不同n值时输出的y(n)计算统一为下面的形式:

若图片无法显示请联系QQ752018766

其中,数组r(i)为一组中间变量,其变化规律是相当于每个n值。当 时,r(i)取值为0。当i<n时,r(i)=x(n-i).可以通过移位的方式解决数组r(i)在不同n值下的取值,即实现x(n)信号的延时。在初始化时将数组r(i)全部置为0,当n值递增1(输入x(n)增加一个数据)时,则把新的输入数据x(n)赋给r(0),计算出本拍输出y(n),在下次n值递增之前,把整个r(i)数组的值按r(7),r(6),r(5)…r(1),r(0)的顺序左移,即r(i)r(i+1) (i=6,5,…1,0),为计算下一节拍的y(n)做好准备。

由上可知,直接型FIR滤波器结构简单,整个乘累加模块的运算过程是乘法,加法,延时三种基本运算的组合。

大多数的 EDA 工具软件中都具备宏单元库,利用宏单元库提供的模块,可以大大提高基于 EDA 技术的电子设计的效率和可靠性。在用原理图描述的频率计的设计中,可从器件库中调用计数器、锁存器、译码器、门电路等器件,方便、快捷地完成电路的设计。这里运用 VHDL 进行此模块的设计,需要解决乘法和加法的运算问题。乘法和加法不是 VHDL 语言中所定义的标准运算,但通过引用 IEEE 标准程序包 std_logic_unsigned,仍可运用运算符“*”和“+”,实现乘法和加法运算,该程序包中含有为上述算术运算建模的部分。

为设计 FIR 滤波器,首先进行参数的设置,要求设计的 FIR 滤波器的阶数为 8,而其他参数在程序中应易于修改。假定设计的 FIR 滤波器为线性相位滤波器,其系数具有偶中心对称性,即 h(i)=h(N-1-i),抽头系数 h(n)的值以补码表示。为使设计适应不同的精度(输入、输出和抽头系数的字长),程序更具灵活性,在编写主程序(主设计实体)之前先定义一个供主程序调用的程序包(package);在程序包中预定义上述参数,某些数据类型以及各数据的字长。

在此模块中,xin[7..0]为输入数据,clk为时钟信号,outs[15..0]为输出结果。模块框图如下:

若图片无法显示请联系QQ752018766

4-4 乘累加模块图

具体程序见附录。

4.2.3 进制转换模块

由于乘累加模块输出的outs[15..0]16位的二进制数,为了方便在数码管上观察最终的结果输入,进制转换模块将16位的二进制码转换为二-十进制的BCD码。

实现这种转换传统的方法有:

    (1) 利用组合逻辑网络实现。其速度较快,但随着被转换的二进制码元位数的增加,将需要大量的硬件资源。

(2) 利用移位原理。这种方法速度适中,所需的硬件资源也适中。

(3) 利用计数器实现。这种方法所需的硬件相对较少,但速度慢。

本设计中由于二进制码元为16位,所以采用第一种方法,具体程序见附录,但是有局限性,当二进制码元位数较大时,将不适用,所以另外详细的介绍了用移位的方法实现二进制码到二-十进制BCD码的转换。

对于一个n位二进制码 ,其在十进制编码方式下的值为:

若图片无法显示请联系QQ752018766

把上式写成套乘的形式:

式中的每项乘2,相当于将寄存器中的二进制码左移一位。

设每一组数码(4位)左移1位前的状态为原状态 ,左移一位后的状态为次状态 。数码组左移一位相当于数码组的值被乘以2,所以有以下公式:其中 为串行输入的二进制码元。当原态 小于5时,能满足上式。当 时,左移一位,其次态将超过9,对于BCD码来说,这样的状态属于禁用状态。当 时,左移一位,则会向高一位的BCD码输入一个进位信号F。由于BCD码和二进制码权的不一致性,当发生进位时,虽然码元只是左移一位,但次态 将减少6.基于上述两种情况,在B/BCD转换时需要对结果加以校正。校正过程如下:

时,让 先加上3,然后再左移一位,次态 ,正好补偿由于进位减少的数值,并且向后一个变换单元送入一个进位信号F,此法称为“加3移位法”。

下表给出了一个8位二进制码11101011转换成8421BCD码的时序。当系统时钟开始时,二进制码开始左移,当第3个时钟脉冲作用后,BCD 码的最低位中的数值0111大于5 (二进制码送入时,高位在前,低位在后) , 故需要加3左移。我们用修正后的数据1010代替原来的大于5 的数据,参与下一个脉冲周期内的移位。在第5 、第6 、第7 脉冲周期中,在数据移位的同时,我们同样需要对数值大于5BCD 码进行修正。最后,经过8个脉冲周期的移位,二进制码转换为8421BCD码的数码转换得以实现。

若图片无法显示请联系QQ752018766

4-1 B/BCD的转换

4.2.4 锁存模块

锁存模块的主要功能是对输出结果进行锁存,这主要是为了方便在数码管上观察输出的结果,因为采样频率过快。将输出结果寄存,然后用一个较低的脉冲信号使结果在数码管上显示(本设计中采用了1HZ的脉冲信号)。

4.2.5 输出显示模块

经过进制转换以后,16位的二进制数换为10进制最多是5位数,所以选用了5个数码管来完成最后的显示功能。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

基于VHDL语言的FIR滤波器设计 第5页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。