基于DSP的数字滤波系统设计 (综合实验)(汇编语言).doc_第1页
基于DSP的数字滤波系统设计 (综合实验)(汇编语言).doc_第2页
基于DSP的数字滤波系统设计 (综合实验)(汇编语言).doc_第3页
基于DSP的数字滤波系统设计 (综合实验)(汇编语言).doc_第4页
基于DSP的数字滤波系统设计 (综合实验)(汇编语言).doc_第5页
全文预览已结束

下载本文档

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

文档简介

数字滤波系统设计 (综合实验)一、实验目的.学习数字滤波器的DSP实现原理和C54x的编程技巧;.通过CCS图形显示工具观察输入/输出信号波形以及频谱变化;二、实验原理数字滤波的作用是滤除信号中某一部分频率分量。信号经过滤波处理,就相当于信号频谱与滤波器的频率响应相乘的结果。从时域来看,就是输入信号与滤波器的冲激响应作卷积和。数字滤波器在各种领域由广泛的应用,例如数字音响、音乐和语音合成、躁声消除、数据压缩、频率合成、谐波消除、过载检测、相关检测等。1. FIR 滤波器的实现如果 FIR 滤波器的冲激响应为h(0),h(1),.,h(N-1)。X(n)表示滤波器在n 时刻的输入,则n 时刻的输出为:y(n) = h(0)x(n) + h(1)x(n-1)+ . + h(N-1)xn-(N-1)使用MAC 或FIRS 指令可以方便地实现上面的计算。图10.1说明了使用循环寻址实现FIR 滤波器的方法。为了能正确使用循环寻址,必须先初始化BK,块长为N。同时,数据缓冲区和冲激响应(FIR 滤波器的系数)的开始地址必须是大于N 的2 的最小幂的倍数。例如,N=11,大于N 的最小2 的幂为16,那么数据缓冲区的第一个地址应是16 的倍数,因此循环缓冲区起始地址的最低4 位必须是0。在图10.1中,滤波系数指针初始化时指向h(N-1),经过一次FIR 滤波计算后,在循环寻址的作用下,仍然指向h(N-1)。而数据缓冲区指针指向的是需要更新的数据,如x(n)。在写入新数据并完成FIR 运算后,该指针指向x(n-(N-1)。所以,使用循环寻址可以方便地完成滤波窗口数据的自动更新.使用带 MAC 指令的循环寻址模式实现FIR 滤波器,程序片段如下:(输入数据在AL 中,滤波结果在AH 中)STM #1,AR0 ;AR0=1STM #N,BK ;BK=N,循环寻址BUFFER 大小为NSTL A,*FIR_DATA_P+% ;更新滤波窗口中的采样数据RPTZ A,#(N-1) ;重复MAC 指令N 次,先将A 清零MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ;完成滤波计算。注意FIR 滤波系数存放在;数据存储区图10.1 FIR数字滤波器存储器数据存储方式2.AC01 的初始化DSE3200 使用AC01 作为模拟信号接口。AC01 提供一个14bit 的D/A 和一个14bit的A/D 通道。AC01 与VC5402 通过串口0 连接。DSP 通过串口可以控制AC01 的采样频率、增益、低通/高通滤波器的截止频率等参数。这一步是通过读写AC01 的寄存器来实现的。下面是初始化AC01 的代码,有关AC01 的详细介绍请参考AC01 的技术手册。;-; The following codes are initalized AC01, ALL AC01 setup same !;- idle 1 idle 1 idle 1 idle 1 ; reset two AC01 by software ! ld #600h,a idle 1 ; wait for int . ld #3,a idle 1 ; send #3 ld #00105h,a ; fs=10M/2/A/B= 25k ; flp=10M/2/40/A= 25k (all pass) ; fhp=fs/200= 125Hz (not use !) ; A=05,B=40(0x28) idle 1 ; send 1th regs - 05h ld #3,a idle 1 ; send #3 ld #00228h,a idle 1 ; send 2th regs - 28h ld #3,a idle 1 ; send #3 ld #00300h,a idle 1 ; send 3th regs - 00h ld #3,a idle 1 ; send #3 ld #00405h,a idle 1 ; send 4th regs - 05h (AD & DA 0 dB) ld #3,a idle 1 ; send #3 ld #00505h,a idle 1 ; send 5th regs - 05h (highpass filter disable) ld #3,a idle 1 ; send #3 ld #00600h,a idle 1 ; send 6th regs - 00h ld #3,a idle 1 ; send #3 ld #00700h,a idle 1 ; send 7th regs - 0 ld #3,a idle 1 ; send #3 ld #800h,a idle 1 ; send 8th regs - 0 ld #0h,a3. 1KHz 方波信号的产生利用 AC01 的D/A 通道产生一个1KHz 的方波,作为FIR 滤波器的输入信号。由于串口发送中断将每0.04ms(25KHz)产生一次,所以我们将一个周期的方波信号分25次送出,这样经D/A 变化后便可得到1KHz 的方波。产生方波的数据参见如下:;*; The following data is used by make wave ! when using, must copy to; wave buffer - 0x6000;*wave_data: ; freq about 1k Hz .word 03ffch ; +2 volt .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 03ffch .word 0c000h ; -2 volt .word 0c000h .word 0c000h .word 0c000h .word 0c000h .word 0c000h .word 0c000h .word 0c000h .word 0c000h .word 0c000h .word 0c000h .word 0c000h4.串口的初始化和串口中断服务程序本实验通过 DSP 的串口0 输入/输出数据。在串口通讯中,数据时钟和帧同步信号都由AC01 产生,所以VC5402 将使用外部时钟和帧同步信号。串口设置代码如下,详细介绍请参见串口操作实验:;*; The following codes are used to initalize McBSP0 !;* stm #0,spsa0 ; choose SPCR10 stm #2000h,spcr10 ; receive sign_extend in DRR stm #1,spsa0 ; choose SPCR20 stm #0c0h,spcr20 ; fs - int ! stm #2,spsa0 ; choose RCR10 stm #40h,39h stm #3,spsa0 ; choose RCR20 stm #0,39h stm #4,spsa0 ; choose XCR10 stm #40h,xcr10 stm #5,spsa0 ; choose XCR20 stm #0,39h stm #0eh,spsa0 ; choose PCR0 stm #0dh,pcr0 ; fs is low active, rise edge of clkx, falling edge ; of clkr stm #7h,spsa0 stm #8000h,39h rpt #0ffffh nop stm #00h,dxr10 ldm 22h,a stm #1,38h stm #0c1h,39h ; start McBSP0 send ! ld #603h,a rsbx intm ; enable all int ! 完成串口设置后,还需要修改中断向量表以便正确响应串口0 的接收和发送中断请求。本实验中使用发送中断产生方波信号和完成对AC01 的初始化;使用接收中断存贮输入的数据,并设置新数据到达标志。主循环在检测到该标志后,调用FIR 滤波程序,完成对输入数据的处理。另外,为了方便观察,我们还使用了一个定时器,交替使XF为高和低。所以,在滤波程序正常运行时,你会看到D2 在不停地闪烁。三、实验内容与步骤本实验重点研究FIR 滤波器的DSP 实验方法。利用DES3200实验系统的模拟信号输出通道产生一个1KHz 的方波,然后利用信号输入通道对产生的方波进行低通滤波,得到一个1KHz 的正弦信号,并使用CCS 的图形显示工具显示输入和输出的波形。这里我们使用的是一个38 阶的对称结构的FIR 低通滤波器,其采样频率Fs 为25KHZ,通带截止频率 1.2KHZ,阻带截止频率为2.8KHZ,阻带衰减为-40dB。1. 短接 JP6,使得DES3200 的模拟信号输出通道与模拟信号输入通道相连。2. 启动 CCS,在Project 选项中打开fir5402.pjt 文件。3. 使用 Build 选项完成编译、连接,然后使用File 菜单中的Load Program 将OUT 文件装入。按F5 键启动程序运行,若有示波器,可以观察DSE3200 板上的JP6 的引脚输出的1KHz 的方波。4. 请使用 Debug - Halt 暂停程序的执行。在Project 管理栏中打开fir5402.asm 文件,并在ccs_show(在fir 子程序中)行后的nop 语句处上增加一个断点。添加断点的方法是先用鼠标单击某行,将光标移动到需要增加断点的行上,然后选择工具栏的手状图标。当该行被设置了一个断点后,可以看到红色的圆点。5. 选择 View - Graph - Time/Frequency 菜单打开一个图形显示窗口,参见图10.2。将“Start Address”项改为地址0x1800,将“Display Data Size”项设置为128,将“DSPData Type”改为“16-bit signed integer”。这样,将在图形显示窗口中显示从0x1800(信号输入缓冲)开始的128 个点的16 位有符号整数。再打开一个图形窗口,显示从地址0x1020(滤波信号输出缓冲)开始的128 点的16 位有符号整数。图10.2 图形显示窗口6. 选择 Debug -

温馨提示

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

评论

0/150

提交评论