欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    分布式FIR数字滤波器设计.doc

    • 资源ID:1032954       资源大小:106.50KB        全文页数:11页
    • 资源格式: DOC        下载积分:15积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要15积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    分布式FIR数字滤波器设计.doc

    1、VLSI结课设计报告分布式算法FIR滤波器 学院:班级:姓名:学号:指导老师:一、设计目的1熟悉FPGA设计基本方法2掌握用Verilog语言设计一个数字滤波器二、设计原理与方法 目前FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用DSP器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好。但长期以来,FPGA一直被用于系统逻

    2、辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA中缺乏实现乘法运算的有效结构。现在这个问题得到了解决,使FPGA在数字信号处理方面有了长足的发展。分布式算法(Distributed Arithmetic,DA)是一种已实现乘加运算为目的的运算方法。它与传统实现乘加运算算法的不同之处在于:执行部分积运算的先后顺序不同。简单地说,分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先进行相加形成相应部分积,然后再对各部分积进行累加形成最终结果;而传统算法是等到所有乘积产生之后再进行相加来完成乘加运算的。与传统算法相比,分布式算法可极大地减少硬件电路规模,很容易实

    3、现流水线处理,提高电路的执行速度。在实际中,不仅是对于滤波器方面,在卷积、相关、DFT等有乘累加运算的地方,都可以使用这种方法实现。DA设计的先决条件是滤波器的系数hi可以通过运算得到,那么在技术部分乘积项hi*xn-1就变成了一个常数乘法(也就是缩放)。DA算法的主要特点是,巧妙地利用查找表将固定系数的MAC运算转化为查表操作,其运算速度不随系数和输入数据位数的增加而降低,而且相对直接实现乘法器而言,在硬件规模上得到了极大的改善。分布式FIR算法原理分布式算法是在30年前被首次提出的,但直到Xilinx公司发明FPGA的查找表结构以后,DA算法才广泛应用在计算乘积和之中。对于FIR(有限长单

    4、位冲激响应)滤波器,其基本结构是一个分节的延时线,每一节的输出加权累加,得到滤波器的输出。其输出y就是输入x和系数h的内积: (1)输入数据xn可以采用B+1位补码来表示,即 (2)因为系数h为已知常数,则内积y可以写成: (3)将式(3)中的第二部分展开,重新分别求和,这也是“分布式算法”名称的由来,可以得到:(4) 这样就可以将式(3)化简为 (5)计算hnxbn,就是用查找表实现一个映射,然后再将此映射经过相应的二次幂加权,最后即可得到滤波器的输出。分布式FIR的实现结构 图1给出了分布式FIR滤波器最直接的实现结构,虚线为流水线寄存器。对于小位宽的数据来讲,Da算法不仅速度快,而且所占

    5、用的芯片资源也很少。XB-10 X10 X00XB-11 X11 X01XB-1N-1 X1N-1 X0N-1LUT+/-寄存器Z-1图1 移位加法DA结构对于式(4)括号中的每一个乘积项都代表了输入变量的某一位与常量的二进制“与”操作,加号代表了算术和操作,指数因子对括号中的值加权。如果事先构造一个查找表,该表储存了括号中所有可能的组合值,就可以通过所有输入变量相对应的组合向量(xbN-1, xbN-2, ,xb0)对该表进行寻址。该表结构如表1所示。表1 构造规则 在LUT实现分布式算法是,由于LUT的规模随着N的增加而呈指数增加,如果滤波器系数N过多,则查表的规模十分庞大。为了减小规模,

    6、可以利用部分表计算。由于FIR滤波器是线性滤波器,因此低阶滤波器输出可以相加,由此定义一个高阶滤波器的输出。例如,可以把16输入的查找表分割成4个并行的查找表,如图2所示。依次类推,可以将更大的LUT分割成多个小LUT。如果加上流水线,这一结构的改变并不会降低速度,却可以大大减小设计规模。XB-10 X10 X00XB-13 X13 X03LUT+/-寄存器Z-1XB-10 X10 X00XB-13 X13 X03XB-10 X10 X00XB-13 X13 X03XB-10 X10 X00XB-13 X13 X03LUTLUTLUT+图2 简化规模的DA结构三、FIR滤波器的具体设计方法本设

    7、计是使用Verilog实现一个8阶对称系数的FIR滤波器,其系数分别是41,132,341,510,341,132,41。该本滤波器的输入为12比特,先把相同系数对应的数据相加,输入到滤波器的数据经过符号位的扩展后变成13比特。这样可以看成是一个阶的FIR滤波器,减小了构造表的复杂度。 设计程序:module fir1(clk,reset,fir_in,fir_in_reg,fir_out,divfre_count_4b,divfre13_clk);parameter S0=1d0; /初始状态parameter S1=1d1; /处理状态input clk;input reset;input

    8、11:0fir_in;output12:0fir_out;output11:0fir_in_reg;output3:0divfre_count_4b;output divfre13_clk;reg12:0fir_out;reg11:0fir_in_reg;reg12:0shift_buf7:0;reg12:0add_buf3:0;/reg12:0state_shift_buf4-1:0; reg12:0state_shift_buf0;reg12:0state_shift_buf1;reg12:0state_shift_buf2;reg12:0state_shift_buf3;wire3:0t

    9、able_4b;wire11:0table_out_12b;reg12:0sum;reg STATE;reg3:0divfre_count_4b;reg divfre13_clk;integer i,j,k,l,m,n,p;always(posedge clk or negedge reset)begin if(!reset) begin divfre13_clk=1b0; divfre_count_4b=4b0000; /14分频 end else begin if(divfre_count_4b=13) begin divfre_count_4b=4b0000; divfre13_clk=

    10、1b1; end else begin divfre_count_4b=divfre_count_4b+1b1; /计数 divfre13_clk=1b0; end endendalways (posedge clk or negedge reset) /数据输入begin if(!reset) fir_in_reg=12b0000_0000_0000; else if(divfre13_clk) fir_in_reg=fir_in;end always (posedge clk or negedge reset)begin if(!reset) for(i=0;i=7;i=i+1) shif

    11、t_bufi=13b0000_0000_00000; else if(divfre13_clk) beginfor(j=0;j8-1;j=j+1)shift_bufj+1= shift_bufj;shift_buf0=fir_in_reg11,fir_in_reg; endendalways (posedge clk or negedge reset)begin if(!reset) for(k=0;k=4-1;k=k+1) add_bufk=13b0000_0000_00000; else if(divfre13_clk) for(l=0;l=3;l=l+1) add_bufl=shift_

    12、bufl+shift_buf7-1;endalways (posedge clk or negedge reset) /有限状态机初始化,比特移位begin if(!reset) begin /for(m=0;m=4-1;m=m+1) /state_shift_bufm=13b0000_0000_00000;state_shift_buf0=13b0000_0000_00000;state_shift_buf1=13b0000_0000_00000;state_shift_buf2=13b0000_0000_00000;state_shift_buf3=13b0000_0000_00000;

    13、STATE=S0; end else case(STATE) S0:begin /初始状态 / for(n=0;n=4-1;n=n+1) /state_shift_bufn= add_bufn;state_shift_buf0=add_buf0;state_shift_buf1=add_buf1;state_shift_buf2=add_buf2;state_shift_buf3=add_buf3; STATE=S1; end S1:begin /处理状态 if(divfre_count_4b=4b1101) STATE=S0; else begin for(p=0;p=11;p=p+1) b

    14、egin state_shift_buf0p=state_shift_buf0p+1; state_shift_buf1p=state_shift_buf1p+1; state_shift_buf2p=state_shift_buf2p+1; state_shift_buf3p=state_shift_buf3p+1; end STATE=S1; end end endcaseend assign table_4b0=state_shift_buf00;assign table_4b1=state_shift_buf10;assign table_4b2=state_shift_buf20;a

    15、ssign table_4b3=state_shift_buf30;DA_table U_DA( .table_in_4b(table_4b), .table_out_12b(table_out_12b) ); wire26:0sign_ex=table_out_12b11,table_out_12b11,table_out_12b11, table_out_12b11,table_out_12b11,table_out_12b11, table_out_12b11,table_out_12b11,table_out_12b11, table_out_12b11,table_out_12b11

    16、,table_out_12b11, table_out_12b11,table_out_12b11,table_out_12b11, table_out_12b; always (posedge clk or negedge reset)begin if(!reset) sum=27b0; else if(divfre_count_4b=4b0000) sum=27b0; else if(divfre_count_4b=4b1101) sum=sum-delta(sign_ex,divfre_count_4b-4b0001); else sum=sum+delta(sign_ex,divfre

    17、_count_4b-4b0001); endalways (posedge clk or negedge reset)begin if(!reset) fir_out=27b0; else if(divfre_count_4b=4b0000) fir_out=sum; /滤波器输出endfunction13-1:0delta; /定义移位寄存器左移 input13-1:0IQ; input3:0pipe; begin case(pipe) 4b0000:delta=IQ; 4b0001:delta=IQ13-2:0,1b0; 4b0010:delta=IQ13-3:0,2b00; 4b0011

    18、:delta=IQ13-4:0,3b000; 4b0100:delta=IQ13-5:0,4b0000; 4b0101:delta=IQ13-6:0,5b00000; 4b0110:delta=IQ13-7:0,6b000000; 4b0111:delta=IQ13-8:0,7b0000000; 4b1000:delta=IQ13-9:0,8b00000000; 4b1001:delta=IQ13-10:0,9b000000000; 4b1010:delta=IQ13-11:0,10b0000000000; 4b1011:delta=IQ13-12:0,11b00000000000; 4b11

    19、00:delta=IQ13-13:0,12b000000000000; /4b1101:delta=IQ13-14:0,13b0000000000000; /4b1110:delta=IQ13-15:0,14b00000000000000; /4b1111:delta=IQ13-16:0,15b000000000000000; default:delta=IQ; endcase endendfunctionendmodulemodule DA_table(table_in_4b,table_out_12b);input 3:0 table_in_4b;output 11:0 table_out

    20、_12b;reg11:0 table_out_12b; always (table_in_4b) begin case(table_in_4b) 4b0000:table_out_12b=0; 4b0001:table_out_12b=41; 4b0010:table_out_12b=132; 4b0011:table_out_12b=173; 4b0100:table_out_12b=341; 4b0101:table_out_12b=382; 4b0110:table_out_12b=473; 4b0111:table_out_12b=514; 4b1000:table_out_12b=5

    21、10; 4b1001:table_out_12b=551; 4b1010:table_out_12b=642; 4b0011:table_out_12b=683; 4b1100:table_out_12b=851; 4b1101:table_out_12b=892; 4b1110:table_out_12b=983; 4b1111:table_out_12b=1024; default:table_out_12b=0; endcaseendendmodule 为了可以方便的判断程序输出结果的正确性,我们在仿真时采用了几个简单的数据作为采样后的数据输入。分别采用:1,2,3作为输入,则经过三次计算对应的输出应为41,241,728,十六进制数为29h,D6h,28Dh。与乘累加方式FIR滤波算法得出的结果完全一致。输入后的波形如下图:本文来自网络,版权归原作者所有,请下载后,尽快删除。11


    注意事项

    本文(分布式FIR数字滤波器设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922