实时信号处理新方法大作业_第1页
实时信号处理新方法大作业_第2页
实时信号处理新方法大作业_第3页
实时信号处理新方法大作业_第4页
实时信号处理新方法大作业_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、实时信号处理系统设计及实现大作业学院: 班级: 成员姓名 学号 分工:软件版本:Quartus II 9.0sp2 Web Edition第一题:无符号DA卷积解:原理:内积公式为假设系数cn为常数, xn为变量。无符号DA系统假设变量xn可以表示为: 其中xbn表示xn的第b位, xn是x的第n次采样,那么内积y可以表示为: 重新分布求和次序有:内积运算的实现:用1个LUT实现映射f (cn, xbn)。预先对1个2N字的LUT进行设定,输入为N位向量xb = xb0, xb1, , xbn-1,输出为f (cn, xbn)。对每个LUT输出值 f (cn, xbn) 乘以权重2b。用移位-

2、加法器实现累加运算。定义3阶内积: 设系数位宽为4,值为c0=2, c1=3, c2=1,c3=2实现 f (cn, xbn)的LUT为:Xb3 Xb2 Xb1 Xb0 f(cn, Xbn) 0 0 0 0 2 x 0+1x0 + 3x0 + 2x0=010=000020 0 0 1 2 x 0+1x0 + 3x0 + 2x1=210=001020 0 1 0 2 x 0+1x0 + 3x1 + 2x0=310=001120 0 1 1 2 x 0+1x0 + 3x1 + 2x1=510=010120 1 0 0 2 x 0+1x1 + 3x0 + 2x0=110=000120 1 0 1 2

3、 x 0+1x1 + 3x0 + 2x1=310=001120 1 1 0 2 x 0+1x1 + 3x1 + 2x0=410=010020 1 1 1 2 x 0+1x1 + 3x1 + 2x1=610=01102 1 0 0 0 2 x 0+1x0 + 3x0 + 2x0=210=001021 0 0 1 2 x 0+1x0 + 3x0 + 2x1=410=010021 0 1 0 2 x 0+1x0 + 3x1 + 2x0=510=010121 0 1 1 2 x 0+1x0 + 3x1 + 2x1=710=011121 1 0 0 2 x 0+1x1 + 3x0 + 2x0=310=0

4、01121 1 0 1 2 x 0+1x1 + 3x0 + 2x1=510=010121 1 1 0 2 x 0+1x1 + 3x1 + 2x0=610=010121 1 1 1 2 x 0+1x1 + 3x1 + 2x1=810=10002有关xn= x0=1010=10102, x1=910=10012, x2=1210=11002, x3=80=10002的内积如下:步骤t Xt3 Xt2 Xt1 Xt0 ft+ACCt-1=ACCt 0 0 0 1 0 3x20 + 0 =31 0 0 0 1 2x21 + 3=7 2 0 1 0 0 1x22 + 7=11 3 1 1 1 1 8x2

5、3 + 11=75 进行数值校验可以看到:y=c0 x0+ c1x1+ c2x2 + c3x3=2x10+3x9+1x12+2 x 8=75DA体系结构图程序代码:顶层文件:library ieee; use ieee.std_logic_1164.ALL;use ieee.std_logic_arith.ALL;-entity DAjj is port ( clk : in std_logic; -时钟 reset,en: in std_logic; -复位,使能 x_in0, x_in1, x_in2 ,x_in3: in std_logic_vector (3 downto 0); -四

6、阶输入 y : out integer range 0 to 200); -结果输出end DAjj;-architecture con of DAjj is-对lut表进行元件例化-component lutb port ( table_in : in std_logic_vector (3 downto 0); -lut表输入 table_out : out integer range 0 to 8); -lut表输出end component;-type sta_type is (s0, s1); signal state : sta_type; -定义两个状态,用于状态机中 signa

7、l x0, x1, x2,x3,table_in: std_logic_vector (3 downto 0):=0000; signal table_out : integer range 0 to 6; -定义信号与lut表输出相接 begin table_in(0) = x0(0); table_in(1) = x1(0); table_in(2) = x2(0); table_in(3) = x3(0); -输入初始值process(clk,reset,en) variable m : integer range 0 to 200; -输出暂存变量 variable njs : int

8、eger range 0 to 4; -计数变量begin if(reset=0) then state state = s1; njs := 0; m := 0; x0 = x_in0; x1 = x_in1; x2 = x_in2;x3 if njs = 4 then y = m; state = s0; -状态S1时,计数满3次时,返回初始状态3阶 else m := m / 2 + table_out *8; -进行移位累加运算 x0(0) = x0(1); x0(1) = x0(2); x0(2) = x0(3); x1(0) = x1(1); x1(1) = x1(2); x1(2

9、) = x1(3); x2(0) = x2(1); x2(1) = x2(2); x2(2) = x2(3); x3(0) = x3(1); x3(1) = x3(2); x3(2) = x3(3); -将下一个数送入lut表中 njs := njs + 1; -计数加1,以便以后用于判断 state table_out table_out table_out table_out table_out table_out table_out table_out table_out table_out table_out table_out table_out table_out table_ou

10、t table_out table_out = 0;-table_out=c(0)*table_in(0)+c(1)*table_in(1)+c(2)*table_in(2)+c(3)*table_in(3)- end case; end process;end lutjs;Quartus仿真结果由仿真图可分析的:1当xn= x0=1010=10102, x1=910=10012, x2=1210=11002, x3=80=10002 y=c0 x0+ c1x1+ c2x2+ c3x3=2x10+3x9+1x12+2 x8=75 与仿真结果一致;2当xn= x0=510=01012, x1=1

11、210=11002, x2=410=01002, x3=10=00012 y=c0 x0+ c1x1+ c2x2+ c3x3=2x5+3x12+1x4+2 x 1=52 与仿真结果一致所以仿真结果正确所用资源:使用逻辑单元为50个,组合功能14个,专用逻辑存放器36个。RTL图:第二题:Hartley已经引入了一种通过采用公共子表达式交叉系数实现常系数滤波器的概念,例如:滤波器 yn= (3.19)其中,3个系数ak=480,-302,31。3个系数的CSD码如下:从表中可以注意到,结构出现了4次。如果构造一个临时变量hn=2xn-xn-1就可以用yn=256hn-16hn-32hn-1+hn

12、-1 (3.20)计算滤波器的输出。1.代入hn=2xn-xn-1验证。2.得到的直接CSD实现和子表达式共享的实现分别需要多少个加法器?3.用QuartusII实现8位输入的子表达式共享滤波器。4.仿真滤波器的脉冲响应。4.确定LC的使用量和Registered Performance。解: 第一问:1由于ak=480,-302,31,yn=,那么计算即可得yn = 480 xn-302 xn-1+31 xn-2 2由于hn=2xn-xn-1,yn=,那么将hn代入即可得到: yn =256(2xn-xn-1)-16(2xn-xn-1)-32(2xn-1-xn-2)+( 2xn-1-xn-2

13、) =256hn-16hn-32hn-1+hn-1= 480 xn-302 xn-1+31 xn-2 由此3.20得以验证。第二问:直接CSD实现原始滤波器结构图:CSD编码滤波器结构图:由图可看出CSD实现需要7个加法器。利用CSD编码将系数变为2的倍数,即可乘法器换成移位存放器,从而大大减少程序的运算时间。子表达式共享滤波器的结构图:由图可看出CSD实现需要4个加法器,进一步减少了加法器的个数。第三问: 输入为8位,那么输入范围为-128+127。根据系数可以计算输出最大为408*127+302*128+31*127=94409最小为408*-128-302*127-31*128=-945

14、46 那么输出为18位即可表示。程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity firzbd is port ( clk, reset,en : in std_logic; -时钟,复位,使能 input: in integer range -128 to 127; output : out integer range -131072 to 131071); end firzbd;architecture js of firzbd issignal temp_in : integ

15、er range -128 to 217:=0; signal temp_out,temp_zbds,temp_ys: integer range -131072 to 131071:=0; beginprocess(clk , reset , en)begin if reset=0 then temp_out=0; -复位0有效,此时输出为0 elsif(en=1)then -使能1有效 if(clk=1 and clkevent) then -时钟上升沿有效 temp_zbds=2*input-temp_in; -子表达式 temp_out=256*temp_zbds-16*temp_zbds-32*temp_ys+temp_ys; -输出表达式 temp_in = input; temp_ys = temp_zbds; -进行延

温馨提示

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

评论

0/150

提交评论