版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要 dsp 技术一般指将 dsp 处理器用于完成数字信号处理的方法与技术。目前的 dsp 芯片 以其强大的数据处理功能在通信和其他信号处理领域得到广泛注意并已成为开发应用的热 点技术。主要应用是实时快速的实现各种数字信号处理算法,如卷积及各种变换等。其中 利用 dsp 来实现数字滤波器就是很重要的一种应用,本文深入研究 dsp 芯片的滤波器系统 软件实现方法,用窗口设计法实现 fir 滤波器,实验结果表明滤波结果效果良好,达到了 预期的性能指标。 一、实验目的一、实验目的 1 掌握 fir 数字滤波器的原理。 2 2 掌握 fir 数字滤波器的 dsp 实现方法。 二、实验原理二、实验原理
2、 数字滤波器一直以来就是数字信号处理器最广为人知的应用。数字滤波器有别于模拟 滤波器的优点是:1)可重复设计,不需更改任何硬件电路的设计,就可以将一个低通滤 波器重新设计成一个高通滤波器。2)执行阶段可以直接更新滤波器的系数,形成适应性 滤波器。滤波器分成两种形态:有限长度脉冲响应(fir)滤波器。fir 指的是单一采样 响应的期间是有限长的,iir 指的是单一采样响应的期间是无限长的。fir 滤波器的特性 可以用一个差分方程来描述: ).2()2() 1() 1 ()()0()(nxhnxhnxhny 其中是滤波器的系数。 ., 210 aaa 常用的滤波器有:低通、高通、带通及带阻滤波器。
3、滤波器特性可以由很多的参数来决定, 这些参数包括带通涟波、带阻涟波、带通截止频率及带阻截止频率。在设计 fir 滤波器 时,必须根据这些参数来确定 fir 滤波器的系数及阶数。这个过程可以通过几种方法来完成。一是通过 matlab 软件来 完成,二是通过专门的数字滤波器设计的软件包来完成。这一过程本实验不详述,本实验 假定该过程已经完成,并得到了滤波器的阶数及系数。 本设计是基于 fir 算法的 dsp 高通滤波器的设计,采用dsp 芯片。其中采样频率为 64000hz,高通滤波器的边界频率为 2000hz,阶数为 101 阶。 三、算法设计 1采用 matlab 设计 fir 数字滤波器 采
4、用 matlab 设计 fir 数字滤波器的方法有多种,本实验采用 fir1 函数,使用方法简介如下: 设计高通滤波器,格式为:b=fir1(n,wn, high) 其中 n+1 为滤波器阶数,b 为返回的长度为 n+1 的系数向量。wn 为归一化边界频率,0 wn daram .text: daram .stack: daram .sysstack: daram .cinit: daram2 .pinit: daram2 .bss: daram2 .const: daram2 /*firhigh.cmd/ ; fir.asm 该程序用于实现 fir 滤波器,可被 c 语言程序调用 ; int
5、 fir(int *,int *, unsigned int,int) ; 参数 0: ar0 输入信号缓冲区指针 ; 参数 1: ar1 - fir 滤波器系数向量指针 ; 参数 2: t0 - fir 滤波器的阶数 l ; 参数 3: t1 - 输入信号当前值在循环缓冲区的序数 ; 返回值: t0 - 输出信号当前值 .global _fir .def _fir _fir pshm st1_55 ;现场 st1,st2 和 st3 入栈 pshm st2_55 pshm st3_55 or #0 x340,mmap(st1_55) ;设置 frct,sxmd,satd bset smul
6、;置位 smul mov mmap(ar0),bsa01 ;ar0=输入信号循环缓冲区的起始地址 mov mmap(ar1),bsa23 ;ar1=滤波器系数循环缓冲区的起始地址 mov mmap(t0),bk03 ;设置循环缓冲区大小 or #0 x5,mmap(st2_55) ;ar0 和 ar2 为循环缓冲区指针 mov t1,ar0 ; ar0 从 index 偏移量开始 mov #0,ar2 ; ar2 从 0 偏移量开始 sub #2,t0 ;t0=l-2 mov t0,csr ;设置外部循环次数为 l-1 mpym *ar0+,*ar2+,ac0 ;执行第一次运算 | rpt c
7、sr ;启动循环 macm *ar0+,*ar2+,ac0 mov hi(ac0),t0 ; 用 q15 格式存放结果 popm st3_55 ; 恢复 st1, st2 和 st3 popm st2_55 popm st1_55 ret .end /* main.c/ #include math.h #define fs 64000 /* 采样频率 */ #define t 1/fs /* 采样时间 */ #define f1 500 /* 正弦信号 1 频率 */ #define f2 2500 /* 正弦信号 2 频率 */ #define f3 3300 /* 正弦信号 3 频率 */
8、 #define pi 3.1415926 #define w1 (2*pi*f1*t) /* 正弦信号 1 数字频率=2*pi*f1/fs */ #define w2 (2*pi*f2*t) /* 正弦信号 2 数字频率=2*pi*f2/fs */ #define w3 (2*pi*f3*t) /* 正弦信号 3 数字频率=2*pi*f3/fs */ #define a1 0.333 /* 正弦信号 1 幅度 */ #define a2 0.30 /* 正弦信号 2 幅度 */ #define a3 0.30 /* 正弦信号 3 幅度 */ extern int fir(int *,int
9、*,unsigned int,int ); /* low-pass fir filter coefficients */ int coeff101= 6 , 3 , 0 , -4 , -8 , -13 , -19 , -25, -31 , -38 , -44 , -49 , -52 , -53 , -51 , -45, -34 , -20 , 0 , 24 , 53 , 85 , 120 , 155, 189 , 221 , 247 , 266 , 274 , 270 , 251 , 216, 163 , 91 , 0 , -110 , -238 , -381 , -538 , -705, -
10、879 , -1055 , -1229 , -1397 , -1554 , -1695 , -1817 , -1915, -1988 , -2033 , 30713 , -2033 , -1988 , -1915 , -1817 , -1695, -1554 , -1397 , -1229 , -1055 , -879 , -705 , -538 , -381, -238 , -110 , 0 , 91 , 163 , 216 , 251 , 270, 274 , 266 , 247 , 221 , 189 , 155 , 120 , 85, 53 , 24 , 0 , -20 , -34 ,
11、 -45 , -51 , -53, -52 , -49 , -44 , -38 , -31 , -25 , -19 , -13, -8 , -4 , 0 , 3 , 6 ; int in101; /* input buffer */ int out101; /* output buffer */ main() unsigned int l=101; unsigned int i; float signal; unsigned int n=0; int index=0; for(i=0;i2 以后,yk能用 yk-1和 yk-2算出,这是一个递归的差分方程。式中 ,2cos2cos(2* */)
12、 s atnff 1b sinsin(2* */) s ctnff fs 为采样频率,f 为正弦波频率。a 为正弦波幅度。可见用数字频率振荡器产生正弦波的实质就 是用程序实现上述的递归差分方程。 如要产生振荡器的频率为 2khz 正弦波,设采样速率为 40k,通过定时器设置,每隔 25us 中断一 次,即产生一个 yn。则递归差分方程系数为: 2cos2cos(2*/) s atff2cos(2*2000/40000)2*0.95105652 b=-1 sinsin(2*/)sin(2*2000/40000)0.30901699 s ctff 为了便于定点 dsp 处理,将所有系数除以 2,然
13、后用 16 位定点格式表示为: a=79bch,b=c000h,c=13c7h,这便是产生 2khz 正弦信号的三个系数。 主程序初始化时先计算出 y1和 y2,然后开放定时器中断,以后每次进入定时器中断服务程序 时,利用前面计算出的 y1和 y2计算出新的 y。 初始化 y1和 y2 ssbx frct ;置 frct=1,准备进行小数乘法运算 st #0 x79bc,aa ;将常数装入变量 aa st #0 xc000h,bb ;将常数装入变量 bb st #0 x13c7h,cc;将常数装入变量 cc pshd cc ;将 cc 压入堆栈 popd y2 ; 初始化 y2=cc ld a
14、a,t ; 将 aa 装到 t 寄存器 mpy y2,a ;y2 乘以系数 a,结果放入 a 寄存器 sth a,y1 ;将 a 寄存器的高 16 位存入变量 y1 ;中断服务程序段: ld bb,t ;将系数 b 装入 t 寄存器 mpy y2,a ;y2 乘系数 b,结果放入 a 寄存器 ltd y1 ;将 y1 装入 t 寄存器,同时复制到 y2 mac aa,a ;完成新正弦数据计算,a 寄存器 ;中为 y1*aa+y2*bb sth a,1,y1 ;将新数据存入 y1,因所有系数都 ;除过 2,在保存结果时转移一位, ;恢复数据正常大小 sth a,1,y0 ;将新正弦数据存入 y0
15、 vc5402 的片内定时器利用 clkout 时钟计数,用三个寄存器(tim、prd、tcr)来控制定时器。到 定时器实际上可以有 20 个比特的周期寄存器。它对 clkout 信号计数,先将 psc 减 1,直到 psc 为 0,然后用 tddr 重新装入 psc,同时将 tim 减 1,直到 tim 减为 0。这时 cpu 发出 tint 中断,同时在 tout 引脚输出一个脉冲信号,脉冲宽度为 clkout 一致。然后用 prd 重新装入 tim,重复下去直到系 统或定时器复位。因而定时器中断的频率由下面的公式决定: tint 的频率=,其中 tc表示 clkout 的周期。设置 pr
16、d 寄存器值为 11 1 prdtddrtc 12499,tint 中断频率为 40khz。 定时器初始化程序段为: stm #10h,tcr ;停止定时器 stm #2499h,prd;设置prd 寄存器值为2499, ;tint 中断频率为foutclk =(2499+1)= 100mhz/2500 = 40 khz stm #20h,tcr ;重新装入tim 和psc,然后; ;启动定时器,在开放中断屏蔽寄存器imr后,就可以产生频率为2000hz的正弦波。 三、实验内容与步骤三、实验内容与步骤 .使用 c54x 汇编语言实现数字振荡器,并通过 ccs 提供的显示窗口观察输出信号波形以及
17、频谱。 .根据确定数字振荡器的频率,确定系数。数字振荡器系数的确定在前面已经说明, 3. 启动 ccs,新建工程文件,如文件名为sinewave.pjt。并建立如下文件: 汇编源程序exer3.asm .title for test int service program .(25 us) .mmregs .global _c_int00,_tint,vector off_intimer .set 04ch ; vector of inttimer at vector+off_intimer init_a .set 079bch ; a/2=0.9510498 init_b .set 0c00
18、0h ; b/2=-0.5 init_c .set 013c7h ; c/2=0.1545105 .bss y0,1 .bss y1,1 .bss y2,1 .bss temp,1 .bss aa,1 .bss bb,1 .bss cc,1 .text _c_int00: ld #0,dp ssbx intm ; disable all interrupt ! st #1fffh,sp ld #vector, a ; get vector table address ! and #0ff80h, a andm #007fh, pmst or pmst, a stlm a, pmst ; 设置i
19、ptr stm #10h,tcr ; init timer stm #2499,prd ; f=100m/(2499+1)=40khz stm #20h,tcr ; reset timer ldm imr,a ; read back imr or #08h,a ; enable timer interrupt stlm a,imr ; set imr ld #temp,dp ; set dp ssbx frct ; prepare for fraction mpy st #init_a,aa ; init aa,bb,cc st #init_b,bb ; st #init_c,cc ; psh
20、d cc popd y2 ; init y2,y2=cc ld aa,t ; t=aa mpy y2,a ; y2*aa - a sth a,y1 ; y2*aa - y1 stm #0h,tcr ; enable timer nop rsbx intm ; enable all int ! again: nop b again nop nop nop nop nop nop ;- ; interrupt for int_timer ! ;- _tint: ld #bb,dp ld bb,t ; t=bb mpy y2,a ; a=y2*bb ltd y1 ; t=y1,y2=y1 mac a
21、a,a ; a=a+y1*aa sth a,1,y1 ; new cos data - y1 sth a,1,y0 ; new cos data - y0 nop ; set breakpoint in ccs ! int1_end: nop rete .end vec_table.asm文件 .mmregs .ref _ret .ref _c_int00 .ref _tint .global vector ._table ;- ; interrupte vector table ! ;- vector: rs b _c_int00 nop nop nmi b _ret nop
22、 nop sint17 b _ret nop nop sint18 b _ret nop nop sint19 b _ret nop nop sint20 b _ret .word 0,0 sint21 b _ret .word 0,0 sint22 .word 01000h .word 0,0,0 sint23 .word 0ff80h .word 0,0,0 sint24 .word 01000h .word 0,0,0 sint25 .word 0ff80h .word 0,0,0 sint26 .word 01000h .word 0,0,0 sint27 .word 0ff80h .
23、word 0,0,0 sint28 .word 01000h .word 0,0,0 sint29 .word 0ff80h .word 0,0,0 sint30 .word 01000h .word 0,0,0 int0 b _ret nop nop int1 b _ret nop nop int2 b _ret nop nop tint b _tint nop nop brint0 b _ret nop nop bxint0 b _ret nop nop trint b _ret nop nop dmac1 b _ret nop nop int3 b _ret nop nop hpint
24、b _ret nop nop q26 .word 0ff80h .word 0,0,0 q27 .word 01000h .word 0,0,0 dmac4 b _ret nop nop dmac5 b _ret nop nop q30 .word 0ff80h .word 0,0,0 q31 .word 01000h .word 0,0,0 ;- ; end of interrupte vector table ! ;- _ret rete 链接定位sinewave.cmd memory page 1: int_d: origin=80h, length=1f80h page 0: ext_
25、p: origin=2000h, length=2000h sections .text : ext_p page 0 .int_table : (ext_p align (128) page (0) .data : int_d page 1 选择project 菜单中的add file to project 选项,将汇编源程序exer3.asm、vec_table.asm 和连接 定位sinewave.cmd文件依次添加到工程文件中。注意,你可以在添加文件对话框中选择显示不同的文 件类型来加快文件选择速度。你也可以使用鼠标右键单击工程文件名(如sinewave.pjt)并选择add files 项来添加需要的文件。其中,exer3.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 正直之剑斩断荆棘
- 2025年度个人股权并购与整合合同8篇
- 2025年度个人分红协议书针对知识产权交易分红3篇
- 2025年度个人小产权房屋买卖合同范本与租赁权优先购买权4篇
- 2025年度城市公共停车场租赁与车位分配服务合同范本
- 2025年个人房屋抵押贷款保证合同模板
- 2025年度个人与个人间租赁合同(含租赁双方权利义务)
- 2025年全球及中国可充18650锂电池行业头部企业市场占有率及排名调研报告
- 2025年全球及中国抗紫外线永久性乳液粘合剂行业头部企业市场占有率及排名调研报告
- 2024年全国青少年禁毒知识竞赛小学组题库及答案(共60题)
- 2025-2030年中国草莓市场竞争格局及发展趋势分析报告
- 第二章《有理数的运算》单元备课教学实录2024-2025学年人教版数学七年级上册
- 华为智慧园区解决方案介绍
- 奕成玻璃基板先进封装中试线项目环评报告表
- 广西壮族自治区房屋建筑和市政基础设施全过程工程咨询服务招标文件范本(2020年版)修订版
- 人教版八年级英语上册期末专项复习-完形填空和阅读理解(含答案)
- 2024新版有限空间作业安全大培训
- GB/T 44304-2024精细陶瓷室温断裂阻力试验方法压痕(IF)法
- 年度董事会工作计划
- 《退休不褪色余热亦生辉》学校退休教师欢送会
- 02R112拱顶油罐图集
评论
0/150
提交评论