




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
27目录一 设计目的2二 设计要求32.1、基本要求32.2、提高部分3三 设计原理43.1、线性fir滤波器原理43.2 设计分析63.3 实验结果分析验证提示73.4 dds原理简介7四 设计思路94.1基于matlab工具的滤波器系数计算10五 设计内容135.1、寄存器模块135.2加法器模块145.3 减法器模块195.4 乘法器模块21六 结果分析29七 参考文献32八 心得体会33基于fpga的fir滤波器的设计一 设计目的为了帮助学生深入理解和消化基本理论、进一步提高综合应用能力并且锻炼独立解决问题的能力,我们将数字信号处理、集成电路原理与应用和fpga系统设计与应用几门课程融合在一起开设的fpga综合实验课程设计。主要从以下两方面考虑:1、设计内容突出fpga及信号处理的理论和技术的综合应用。如在数字滤波实验中,要求学生能够熟悉数字滤波器的基本原理,并能运用vhdl语言实现数字滤波。并采用matlab软件实现的结果与运用vhdl实现的仿真结果进行,来验证其正确性。最后通过实验装置进行硬件实现,并对结果进行综合分析。2、如何将数字信号处理、集成电路原理与应用和fpga系统设计与应用三门课程有机的结合起来,设计一实际的系统。由学生在所学知识的基础上,查阅相关资料,自主设计,通过实验装置进行实现,并对结果进行综合分析,寻找最佳设计方案。希望学生通过完成一个利用fpga实现信号处理相关的课题的理论设计、程序设计和实验调试任务,提高他们分析解决实际问题的能力。本设计要求运用课程所学知识,进行算法实现、 matlab仿真,vhdl程序设计,fpga开发平台上调试,加深对fpga在信号处理知识领域的理解与运用,培养对fpga系统的开发技能。二 设计要求2.1、基本要求利用所学知识,采用vhdl语言完成fir滤波器的设计仿真。要求用vhdl编程设计底层文件,顶层文件可任意(可用原理图方式或文本方式);完成仿真文件(包括matlab和quartusii两种仿真)并对其结果比较。具体设计指标如下:(1)采样频率;(2)截止频率;(3)输入序列为10位(最高位为符号位);(4)窗口类型为kaiser窗,=0.5 ;(5)滤波器长度为16 ;(6)输出结果保留10位。2.2、提高部分 根据所学知识,设计出一个具有频率控制功能dds,要求输出频率分别为10khz和100khz,将输出的两路数字信号进行叠加,并通过所设计的fir滤波器进行滤波,将滤波输出的数字信号通过d/a转换电路输出波形,并用示波器观察输出波形,并完成测试结果分析。结构框图如图1所示。 图1 整体结构框图三 设计原理3.1、线性fir滤波器原理fir滤波器响应(简称fir)系统的单位脉冲响应为有限长序列,系统函数在有限z平面上不存在极点,其运算结构中不存在反馈支路,即没有环路。如果的长度为n,则它的系统函数和差分方程一般具有如下形式:根据差分方程直接画出fir滤波器的结构,称为直接型结构。如图2所示: 图2 fir滤波器直接结构fir滤波器的特点:单位脉冲响应序列为有限个;可快速实现;可得到线性相位;滤波器阶数较高。对线性时不变系统保持线性相位的条件是:单位脉冲响应为偶对称或奇对称。即:为设计线性滤波器,应保证h(n)为对称的。 若n为偶数,其线性相位fir滤波器的对称结构流图如图3:图3 若n为偶数线性相位fir滤波器的对称结构流图图中:“ +1 ” 对应偶对称情况,“ -1 ” 对应奇对称情况。当n为奇数时,支路断开。 若n为奇数,其线性相位fir滤波器的对称结构流图如图4:图4 n为奇数线性相位fir滤波器的对称结构流图3.2 设计分析1. 设计滤波器方案:因为n=16为偶数,可以按照上面第一个原理图设计滤波器,如图5所示。 图5本设计取为偶对称的情况,则图中:应取“ +1 ”。2 由上图可分析得到,要完成滤波器的设计,需要设计的底层文件包括延时单元、加法电路单元、乘以负一单元、乘法器单元及截取10位数单元。由各单元vhdl编程后,生成相应的符号文件。最后连接成顶层原理图。3.3 实验结果分析验证提示1)利用quartusii仿真设,取进行仿真。2)利用matlab仿真求取,/,/,然后,同以上仿真结果进行对比,说明滤波器设计的正确性。3.4 dds原理简介目前使用最广泛的一种dds 方式是利用高速存储器作查找表,然后通过高速dac 输出已经用数字形式存储的波形。图6 dds 系统的基本原理图图6中虚方框部分是dds 的核心单元,它可以采用cpld/fpga 来实现。图中的相位累加器由位全加器和位累加寄存器级联而成,可对频率控制字的二进制码进行累加运算,是典型的反馈电路。频率控制字m和相位控制字分别控制dds 输出正(余)弦波的频率和相位。每来一个时钟脉冲,相位寄存器以步长m递增。相位寄存器的输出与相位控制字相加,其结果作为正(余)弦查找表的地址。正(余)弦查找表的数据存放在rom中,内部存有一个周期的正弦波信号的数字幅度信息,每个查找表的地址对应于正弦波中0360范围内的一个相位点。查找表把输入的址信息映射成正(余)弦波的数字幅度信号,同时输出到数模转换器dac 的输入端,dac输出的模拟信号经过低通滤波器 (lpf),可得到一个频谱纯净的正(余)弦波。dds 具体工作过程如下:每来一个时钟脉冲clk,n 位全加器将频率控制数据m 与累加寄存器输出的累加相位数据n 相加,把相加后的结果送至累加寄存器的输入端。累加寄存器一方面将上一时钟周期作用后所产生的新的数据反馈到加法器的输入端,以使加法器在下一时钟的作用下继续与频率控制数据m 相加;另一方面将这个值作为取样地址值送入幅度/相位转换电路,此电路根据取样地址输出相应的波形数据。最后经d/a 转换器和低通滤波器将波形数据转换成所需要的模拟波形。dds 输出信号的频率由下式决定:q=()clk (代表取样点数,m 为频率控制字、代表存储器中存储数据的多少,n 代表累加器的位数,clk 代表基准时钟频率) 。调节m 可以改变取样的点数,从而改变频率。假定基准时钟为70mhz,累加器为16 位,则clk=70mhz ,y=65536 (n16),设m12 则x=4096,所以q=(4096/65536) 70=4.375mhz。可见,通过设定相位累加器位数n、频率控制字m 和基准时钟的值,就可以产生任一频率的输出。dds 的频率分辨率定义为:q=clk/ 由于基准时钟一般是固定的,因此相位累加器的位数就决定了频率的分辨率。四 设计思路根据课程上老师所讲例题,首先使用matlab计算出符合设计要求的滤波器冲激响应系数。后将整个电路规划为语言编辑和原理图编辑两个单元,其中语言编辑部分负责编辑整个滤波器电路中所需用的单元器件,包括寄存器、加法器、减法器以及乘法器几个单元器件;原理图编辑部分完成单元器件的电气连接工作。整个电路的原理图设置方案如下图所示:图 滤波器整体设计思路4.1基于matlab工具的滤波器系数计算:在matlab命令编辑窗口输入fdatool指令,敲击回车可以打开filter design & analysis tool窗口(如图4-1所示),在该工具的帮助下,我们可以完成f.i.r.滤波器系数的计算工作。图4-1 filter design & analysis tool窗口fdatool界面总共分两大部分,一部分是design filter,在界面的下半部分,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。design filter部分主要分为:response type(响应类型)选项,包括lowpass(低通)、highpass(高通)、bandpass(带通)、bandstop(带阻)和特殊的滤波器。根据本次作业要求,在该选项中选择lowpass选项。design method(设计方法)选项,包括iir滤波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、 chebyshev type ii(切比雪夫ii型) 法、elliptic(椭圆滤波器)法等和fir滤波器的equiripple法、least-squares(最小乘方)法、window(窗函数)法等多种方法。结合本次作业要求,选择fir滤波器的窗函数法进行设计。选定窗函数法后,会在右侧出现options区域,进行窗函数法相关参量的设置,根据作业要求选择kaiser窗并设置beta为:0.5。filter order(滤波器阶数)选项,定义滤波器的阶数,包括specify order(指定阶数)和minimum order(最小阶数)。在specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify ordern-1),如果选择minimum order则matlab根据所选择的滤波器类型自动使用最小阶数。本次作业要求设计16阶滤波器,所以选定specify order并填入15。frenquency specifications选项,可以详细定义频带的各参数,包括采样频率fs和频带的截止频率。它的具体选项由response type选项和design metho选项决定。我们要求的 lowpass(低通)滤波器只需要定义fs、fc。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。magnitude specifications选项,可以定义幅值衰减的情况。采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。本次作业中的参数设定结果如图4-2所示。图 4-2 滤波器参数设定结果参数设定完毕,单击工具窗口下方的design filter按钮,开始进行相关参数计算。五 设计内容5.1、寄存器模块寄存器用于寄存一组二值代码,只要求它们具有置1、置0的功能即可。在本设计中用d触发器组成寄存器,实现寄存功能。本设计中使用带异步复位rst端的d触发器,当rst=1时,输出信号q=0,当rst=0且上升沿脉冲到达时q=d。寄存器源程序如下:library ieee;use ieee.std_logic_1164.all;entity dff16 isport (rst,clk: in std_logic; d:in std_logic_vector (9 downto 0); q:out std_logic_vector (9 downto 0);end dff16;architecture dff16 of dff16 isbegin process (rst,clk) begin if(rst=1)then q0); elsif(clkevent and clk=1)then q=d; end if; end process;end dff16;5.2加法器模块实现两个有符号数的相加运算。即将输入的两数,在时钟脉冲到来时相加运算,输出结果。在本设计中共有8个两个10位有符号数相加产生一个11位有符号数的加法器、一个18位和19位有符号数相加产生20位有符号数的加法器、一个两个20位有符号数相加产生一个21位有符号数的加法器、一个两个19位有符号数相加产生一个20位有符号位数的加法器、一个20位和21位有符号数相加产生22位有符号数的加法器,以及一个20位和22位有符号数相加产生23位有符号数的加法器电路。其中一个20位和22位有符号数相加产生23位有符号数的加法器电路为最后一级,所以在加法器电路中在引入低位舍去功能只保留最终10位输出,最终保留10位输出采用了直接取输出23位数的高十位的方法,因此在输出中近似等于除掉了213即8192以后的结果。10位有符号数相加产生一个11位有符号数的加法器设计源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity sum101011 is port(a,b: in signed(9 downto 0); clk: in std_logic; s:out signed(10 downto 0);end sum101011;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity sum101011 is port(a,b: in signed(9 downto 0); clk: in std_logic; s:out signed(10 downto 0);end sum101011;architecture sum101011 of sum101011 isbegin process(clk) begin if(clkevent and clk=1)then s=(a(9)&a)+(b(9)&b); end if; end process;end sum101011;18位和19位有符号数相加产生20位有符号数的加法器设计源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity sum7023918 is port(a: in signed(17 downto 0); b: in signed(18 downto 0); clk: in std_logic; s:out signed(19 downto 0);end sum7023918;architecture sum7023918 of sum7023918 isbegin process(clk) begin if(clkevent and clk=1)then s=(a(17)&a(17)&a)+(b(18)&b); end if; end process;end sum7023918;两个20位有符号数相加产生一个21位有符号数的加法器设计源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity sum40149919 is port(a: in signed(19 downto 0); b: in signed(19 downto 0); clk: in std_logic; s:out signed(20 downto 0);end sum40149919;architecture sum40149919 of sum40149919 isbegin process(clk) begin if(clkevent and clk=1)then s=(a(19)&a)+(b(19)&b); end if; end process;end sum40149919;两个19位有符号数相加产生一个20位有符号位数的加法器设计:library ieee;use ieee.std_logic_1164.aluse ieee.std_logic_arith.all;entity sum181819 isport(a: in signed(18 downto 0); b: in signed(18 downto 0); clk: in std_logic; s:out signed(19 downto 0);end sum181819;architecture sum181819 of sum181819 isbegin process(clk) begin if(clkevent and clk=1)then s0);begin process(din1,din2,clk) begin if clkevent and clk=1 then dout0);begin process(din1,din2,clk) begin if clkevent and clk=1 then dout=s2-din1-s1; end if; end process;end sub1065417;5.4 乘法器模块 从资源和速度考虑,常系数乘法运算可用移位相加来实现。将常系数分解成几个2的幂的和形式。滤波器系数分别为-31、-88、-106、-54、70、239、401、499、499、401、239、70、-54、-106、-88、-31。算法:其中带负号数先乘去负号的整数部分,在后面的求和中做减法运算。编码方式如下:31被编码为25-20、88被编码为26+24+23、106被编码为26+25+23+21、54被编码为26-23-21、70被编码为26+22+21、239被编码为28-24-20、401被编码为29-27+24+20、499被编码为29-23-22-20。 实现输入带符号数据与固定数据两个二进制数的乘法运算。当到达时钟上升沿时,将两数输入,运算并输出结果。乘31电路设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult31 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (15 downto 0);end mult31;architecture mult31 of mult31 issignal s1 : signed (15 downto 0);signal s2 : signed (10 downto 0);signal s3 : signed (15 downto 0);begin a1:process(din,s1,s2,s3) begin s1=din&00000; s2=din; if (din(10)=0) then s3=(0&s1(14 downto 0)-(00000&s2(10 downto 0);else s3=(1&s1(14 downto 0)-(11111&s2(10 downto 0); end if; end process; a2: process(clk,s3) begin if clkevent and clk=1 then dout=s3; end if; end process;end mult31;乘88电路设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult88 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (17 downto 0);end mult88;architecture mult88 of mult88 issignal s1 : signed (16 downto 0);signal s2 : signed (14 downto 0);signal s3 : signed (13 downto 0);signal s4 : signed (17 downto 0);begin a1:process(din,s1,s2,s3) begin s1=din&000000; s2=din&0000; s3=din&000; if (din(10)=0) then s4=(0&s1(16 downto 0)+(000&s2(14 downto 0)+(0000&s3(13 downto0); else s4=(1&s1(16 downto 0)+(111&s2(14 downto 0)+(1111&s3(13 downto 0); end if; end process; a2: process(clk,s4) begin if clkevent and clk=1 then dout=s4; end if; end process;end mult88;乘106电路设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity mult106 isport( clk : in std_logic; din : in signed (10 downto 0); dout : out signed (17 downto 0);end mult106;architecture mult106 of mult106 issignal s1 : signed (16 downto 0);signal s2 : signed (15 downto 0);signal s3 : signed (13 downto 0);signal s4 : signed (11 downto 0);signal s5 : signed (17 downto 0);begin a1:process(din,s1,s2,s3,s4) begin s1=din&000000; s2=din&00000; s3=din&000; s4=din&0; if (din(10)=0) then s5=(0&s1(16 downto 0)+(00&s2(15 downto 0)+(0000&s3(13 downto 0)+(000000&s4(11 downto 0); else s5=(1&s1(16 downto 0)+(11&s2(15 downto 0)+(1111&s3(13 downto 0)+(111111&s4(11 downto 0); end if; end process; a2: process(clk,s5) begin if clkevent and clk=1 then dout fdatool nn = columns 1 through 12 -0.0153 -0.0432 -0.0517 -0.0265 0.0343 0.1168 0.1956 0.2436 0.2436 0.1956 0.1168 0.0343 columns 13 through 16 -0.0265 -0.0517 -0.0432 -0.0153 f1=round(n*(211)f1 = -31 -88 -106 -54 70 239 401 499 499 401 239 70 -54 -106 -88 -31 f2=303,134,345,98,-78,97,102,-205,412; y=conv(f1,f2); s=y/(213)s = columns 1 through 12 -1.1466 -3.7620 -6.6656 -7.8081 -3.5159 6.9136 20.6246 34.8578 44.3833 44.9141 38.2875 27.8611 columns 13 through 24 17.7001 11.2920 9.9404 12.0692 13.8990 13.0698 8.8079 2.8052 -1.5260 -3.5149 -3.6500 -1.5591仿真结果图经比较结果正确。dds原理图与仿真结果结果如下七 参考文献1 eda技术与cpld/fpga开发应用简明教程m. 北京:清华大学出版社,2007.2 eda技术实用教程m. 北京:清华大学出版社,2006.3 薛年喜. matlab在数字信号处理中的应用m. 北京:清华大学出版社,2003.4 程佩青. 数字信号处理教程m. 北京:清华大学出版社,2003.5 fpga方向课设设计指导书.中原工学院:电子信息教研室.八 心得体会为期三周的方向课程设计结束啦,在整个滤波器的设计实现过程中,学会了不少新的知识,同时也将所学的语言有了进一步的深刻理解,现在在这里谈一下自己的心得体会。作为一个电子信息类专业的学生,fpga是我们重要的专业课,是我们将来从事电子设计的有力工具。通过对该课程的学习,我们对电子设计自动化有了更进一步的理解;通过对数字滤波器的设计,我们也了解了数字滤波器的基本结构和基本特性,而且更加牢固地掌握了相关的理论知识,同时也提高了自己的动手实践能力。这次课程设计,很重要的一部分就是matlab的运用,在做设计实验之初,因为对matlab程序并不熟悉,仅会些基本的操作,就打算直接使用老师在课堂上给出的冲激系数。后经网
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家电公司会计核算管理办法
- 高速养护考试题及答案
- 未来摄影师:全球视角与多元影像-2
- 保密考试题多选及答案
- 合肥二建考试题及答案
- 急救药品考试题及答案
- 新疆维吾尔自治区普通高中2026届化学高一上期中监测试题含解析
- 2026届黑龙江省哈尔滨兆麟中学、阿城一中、尚志中学等六校化学高一上期中监测试题含解析
- 知识题库-电厂灰硫主检修工岗位考试题目及答案
- 一年级上册英语试题-Unit7Letscount练习(含答案)沪教牛津版(深圳用)
- 多学科会诊MDT胃恶性肿瘤
- (33)-钠钾泵细胞生物学
- 抗反转录病毒药物的毒副作用
- 项目档案归档目录一览表(档案室用)
- GB/T 242-2007金属管扩口试验方法
- 路基压实度汇总表
- 【食品生产加工技术】香肠的加工技术
- 小学数学三年级下轴对称、平移和旋转强化练习
- 助产士咨询门诊课件
- 数学基础模块上册课件
- 垂体瘤精品课件
评论
0/150
提交评论