【《IIR数字滤波器的设计分析案例》1500字】_第1页
【《IIR数字滤波器的设计分析案例》1500字】_第2页
【《IIR数字滤波器的设计分析案例》1500字】_第3页
【《IIR数字滤波器的设计分析案例》1500字】_第4页
【《IIR数字滤波器的设计分析案例》1500字】_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IIR数字滤波器的设计分析案例目录TOC\o"1-3"\h\u9243IIR数字滤波器的设计分析案例 1320891.1MATLABIIR数字滤波器系数的设计与量化 1111851.2直接型IIR结构数字滤波器的FPGA代码实现 156011.3QuartusII软件中FPGA模块的设计 3197981.1.1OSC模块设计 39901.1.2Digital_Add混频模块设计 4196491.1.3IIR模块设计 51.1MATLABIIR数字滤波器系数的设计与量化根据第一章中对IIR数字滤波器的相应要求可知,在设计IIR数字滤波器时,主要应用了MATLAB的butter函数。[ba]=butter(3,fc/(FS/2),'low');其中b,a为IIR数字低通滤波器的系数,fc为截止频率,FS为采样率,‘low’为选择低通滤波器。在FPGA的设计前需要对MATLAB函数计算出来的IIR数字滤波器的系数进行量化,在设计中量化位数为16bit。具体量化代码如下:c=[b,a];b_16=round(c/max(abs(c))*(2^(Q-1)-1));%滤波器系数量化Mab=max(max(abs(a),abs(b)));%16bit量化Qb=round((b/Mab)*(2^(Q-1)-1));Qa=round((a/Mab)*(2^(Q-1)-1));系数量化后就可以进行FPGAverilog代码的设计。1.2直接型IIR结构数字滤波器的FPGA代码实现对于IIR滤波器的FPGA实现,与FIR滤波器相比,相对复杂一些,最大的不同就是IIR数字滤波器的反馈结构。根据IIR公式:a1*y(n)=b1*[x(n)+x(n-3)]+b2*[x(n-1)+x(n-2)]+a2*y(n-1)-a3*y(n-2)+a4*y(n-3)套入b,a系数可得:8192*y(n)=3*[x(n)+x(n-3)]+8*[x(n-1)+x(n-2)]+22243*y(n-1)-20231*y(n-2)+6159*y(n-3)由以上公式IIR数字滤波器的verilog代码实现可分为5个时钟来处理,具体代码如下:if(i==1)begin r_x1<=b1*(xn+xn3); r_x2<=b2*(xn1+xn2);//Zero(n) r_y<=a2*yn1+a3*yn2+a4*yn3;//Pole(n) $display("r_x1=%d,r_x2=%d,r_y=%d",r_x1,r_x2,r_y); end if(i==2)begin r_s<=r_x1+r_x2-r_y;//8192y(n)=Zero(n)-Pole(n) $display("%d",r_s); end if(i==3)r_s1<=(r_s>>13); if(i==4)yn<=r_s1[31:0]; if(i==5)begin//pipeline xn1<=xn; xn2<=xn1; xn3<=xn2; yn1<=yn; yn2<=yn1; yn3<=yn2; end1.3QuartusII软件中FPGA模块的设计在QuartusII软件实现过程中主要的设计模块包括OSC模块,Digital_add模块和IIR模块,其中OSC模块是波形产生模块,主要负责产生1000HZ和3000HZ,digital_add模块是混频模块,IIR模块是IIR数字滤波器模块。1.1.1OSC模块设计图3-1OSC模块如图3-1所示,OSC模块主要产生正弦波信号通过kfreq来改变频率,通过amp来调整幅度,mclk为模块主时钟,sin为输出的正弦波信号,设计中osc分为两个模块分别产生1khz和3khz正弦波信号。wire[17:0]kfreq1=18'h00333;//1khzsine信号wire[17:0]kfreq3=18'h00999;//3khzsine信号wire[14:0]amp=15'h7000;幅度OSC模块管脚的具体描述如表3-1所示表3-1OSC模块的管脚描述名称位宽输入输出功能描述Mclk1bit输入系统主时钟Reset_n1bit输入系统复位kfreq18bit输入频率值amp15bit输入幅度值sin32bit输出正弦信号输出1.1.2Digital_Add混频模块设计图3-2DigitalAdd模块如图3-2所示,经过经过OSC模块产生1000HZ和3000HZ正弦信号后输入到DigitalAdd模块,输出为1000hz与3000HZ相加的混频信号。实现代码如下:localparamLAST_CYCLE=1023;//采样点时间间隔reg[9:0]i;//10bit计数器regsigned[32:0]pcm_r;//混频信号寄存器assignpcm_out=pcm_r[32:1];//混频信号输出always@(posedgemclkornegedgereset_n)beginif(!reset_n)begini<=0; pcm_r<=33'b0;endelsebegini<=i+1; if(i==0)pcm_r<=pcm_in1+pcm_in2;//1000HZsine加3000HZsineendendDigitalAdd模块管脚的具体描述如表3-2所示表3-2DigitalAdd模块的管脚描述名称位宽输入输出功能描述Mclk1bit输入系统主时钟Reset_n1bit输入系统复位Pcm_in132bit输入正弦信号1输入Pcm_in232bit输入正弦信号2输入Pcm_out32bit输出混频信号输出1.1.3IIR模块设计图3-3IIR模块如图3-3所示,IIR模块的输入为pcm_in,输出为pcm_out信号。其中IIR滤波器的b,a量化系数和IIR的具体实现代码如下://coffebassignb1=3;assignb2=8;assignb3=8;assignb4=3;//coffeaassigna2=-22243;assigna3=20231;assigna4=-6159;begini<=i+1; if(i==1)begin r_x1<=b1*(xn+xn3); r_x2<=b2*(xn1+xn2);//Zero(n) r_y<=a2*yn1+a3*yn2+a4*yn3;//Pole(n) $display("r_x1=%d,r_x2=%d,r_y=%d",r_x1,r_x2,r_y); end if(i==2)begin r_s<=r_x1+r_x2-r_y;//8192y(n)=Zero(n)-Pole(n) $display("%d",r_s); end if(i==3)r_s1<=(r_s>>13); if(i==4)yn<=r_s1[31:0]; if(i==5)begin//pipeline xn1<=xn; xn2<=xn1; xn3<=xn2; yn1<=yn; yn2<=yn1; yn3<=yn2; endendIIR模块管脚的具体描述如表3-3所示表3-3IIR模块的管脚描述名称位宽输入输出功能描述Mclk1bit输入系统主时钟Reset_n1bit输入系统复位Pcm_in32bit输入滤波器前信号输入Pcm_out32bit输出滤波后信号输出1.4QuartusII软件实现整个工程在每个单独模块设计完成之后,利用QuartusII对IIR的所有模块进行连接,然后再进行综合和实现,如图3-4所示是整个工程的RTL级电路图,两个OSC模块分别产生1khz和3KHZ正弦波,然后对波形进行从新采样(44100HZ),再到digital_add模块进行数字混频,最后再进入IIR数字低通滤波器模块进行滤波。图3-4IIR整体工程RTL框图IIRQuartusII工程实现总模块管脚的描述如表3-4所示表3-4IIR验证系统总体管脚描述名称位宽输入输出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论