资源描述
课程设计报告(论文)
数字信号处理与DSP 课程设计任务书
课程设计题目:数字信号处理与DSP课程设计
已知技术参数和设计要求:1.设计一个采样频率为32KHz,截止频率约为6.5KHz的低通FIR滤波器,要求阻带衰减大于50dB。2.由实验箱信号发生器产生4KHz的模拟方波信号,然后进行AD转换存放在内存单元中观察这些数据的波形,然后通过DA转换后输出,在示波器上观察输出方波信号,完成对串口数据的采集和发送编程。3.在串口数据的采集和发送程序中插入设计好的FIR低通滤波器。对采集的方波信号进行数字低通滤波得到基波分量,存放在内存单元中观察这些数据的波形,并将滤波得到的基波分量通过DA转换后输出,在示波器上观察输出信号。
所需仪器设备:计算机一台、示波器一台、DSP试验箱、CCS Simulator环境
成果验收形式:操作运行结果和程序答辩
参考文献:张雄伟.DSP集成开发与应用实例[M]. 北京:电子工业出版社.2002.
邹彦. DSP原理及应用. 电子工业出版社,2009.8
周霖. DSP算法设计与系统方案. 国防工业出版社,2004.7.
时间
安排
第1单元 发设计任务书,明确设计任务、技术要求,查找资料。
第2、3单元 FIR滤波器设计及DSP编程。
第4、5单元 学习串行A/D转换芯片TLV1572和串行D/A转换芯片TLC5617的使用。学习和掌握TMS320C5402多通道缓冲串口与串行A/D、D/A转换器的接口方法。
第6、7单元 完成对串口数据的采集和发送。
第8单元 在串口数据的采集和发送程序中插入设计好的FIR低通滤波器,在示波器上观察输出信号。
指导教师: 教研室主任:
20年 11 月 22 日
内 容 摘 要
数字信号处理(Digital Signal Processing,简称DSP)是一门涉及多门学科并广泛应用于很多科学和工程领域的新兴学科。数字信号处理是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效地传输与应用。
本文设计了一个采样频率为32KHz,截止频率约为6.5KHz的低通FIR滤波器,阻带衰减大于50dB。实验箱信号发生器产生4KHz的模拟方波信号,进行AD转换存放在内存单元中,通过DA转换后输出,观察输出方波信号,完成对串口数据的采集和发送编程。在串口数据的采集和发送程序中插入设计好的FIR低通滤波器。对采集的方波信号进行数字低通滤波得到基波分量,存放在内存单元中观察这些数据的波形,并将滤波得到的基波分量通过DA转换后输出,在示波器上观察输出信号。
关键词:DSP FIR滤波器 数字信号处理 A/D、D/A转换
目 录
一 概 述 …………………………………………………………………1
二 DSP系统构成 ……………………………………………………………1
三 滤波器的设计原理 …………………………………………………………1
3.1数字滤波器的设计原理 ………………………………………………1
3.2 FIR滤波器的基本结构 ………………………………………………1
四 实验程序 …………………………………………………………………2
4.1 FIR滤波器源程序………………………………………………………2
4.2 A/D转换源程序…………………………………………………………2
4.3 D/A转换源程序…………………………………………………………5
4.4 A/D、D/A转换源程序 …………………………………………………7
4.5 A/D、FIR、D/A综合程序………………………………………………9
五 实验结果 ……………………………………………………………………13
六 心得体会 ……………………………………………………………………14
七 参考文献 ……………………………………………………………………14
一、概述
数字信号处理(Digital Signal Processing,简称DSP)是一门涉及多门学科并广泛应用于很多科学和工程领域的新兴学科。数字信号处理是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效地传输与应用。
随着信息与数字技术的发展,数字信号处理已经成为当今极其重要而学科与技术领域之一。它在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。在数字信号处理的基本方法中,通常会涉及到变换、滤波、频谱分析、调制解调和编码解码等处理。其中滤波是应用非常广泛的一个环节,数字滤波器的理论和相关设计也一直都是人们研究的重点之一。
本次课程设计要求设计一个采样频率为32KHz,截止频率约为6.5KHz的低通FIR滤波器,要求阻带衰减大于50dB。同时,使用串行A/D、D/A转换芯片对实验箱产生的波形进行采集及发送。
二、DSP系统构成
典型的 DSP 系统如图2.1所示。
输入
抗混叠滤波
A\D
转换
DSP
芯片
D\A转换
平滑滤波
输出
图2.1典型的DSP系统
由于DSP是用来对数字信号进行处理的,所以首先必须将输入的模拟信号变换为数字信号。于是先对输入模拟信号进行调整,输出的模拟信号经过A/D变换后变成DSP可以处理的数字信号,DSP根据实际需要对其进行相应的处理,如FFT、卷积等;处理得到的结果仍然是数字信号,可以直接通过相应通信接口将它传输出去,或者对它进行D/A变换将其转换为模拟采样值,最后再经过内插和平滑滤波就得到了连续的模拟波形模拟信号。当然,图中的有些环节并不是必需的。如A/D转换,如果输入的是数字信号,就可以直接交给DSP进行运算。
三、滤波器的设计原理
3.1数字滤波器的设计原理
数字滤波器的设计问题就是寻找一组系数ai和bi,使得其性能在某种意义上逼近所要求的特性。如果在s平面上去逼近,就得到模拟滤波器,如果在z平面上去逼近,则得到数字滤波器。
数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,
应满足常系数线性差分方程:
(3.1.1)
x(n)为输入序列,y(n)为输出序列,ai、bi 为滤波器系数,N为滤波器的阶数。
3.2 FIR滤波器的基本结构
在式3.1.1中,若所有的ai均为0,则得FIR滤波器的差分方程:
(3.2.1)
对式(3.2.1)进行z变换,可得FIR滤波器的传递函数:
(3.2.2)
由此可得到FIR滤波器的结构如图1所示。
FIR滤波器的单位冲击响应h(n)是一个有限长序列。若h(n)为实数,且满足偶对称或奇对称的条件,即h(n)=h(N-1-n)或h(n)=-h(N-1-n),则FIR滤波器具有线性相位特性。
四、实验程序
4.1 FIR滤波器源程序
.mmregs
.global start
.def start,_c_int00
INDEX .set 1
KS .set 256
.copy "firin.inc"
.copy "firdata.inc"
.data
OUTPUT .space 1024
FIR_DP .usect "FIR_VARS",0
D_FIN .usect "FIR_VARS",1
D_FOUT .usect "FIR_VARS",1
COFFTAB .usect "FIR_COFF",N
DATABUF .usect "FIR_BFR",N
BOS .usect "STACK",0Fh
TOS .usect "STACK",1
.text
.asg AR0,INDEX_P
.asg AR4,DATA_P
.asg AR5,COFF_P
.asg AR6,INBUF_P
.asg AR7,OUTBUF_P
_c_int00
b start
nop
nop
start:
STM #COFFTAB,COFF_P
RPT #N-1
MVPD #COFF_FIR,*COFF_P+
STM #INDEX,INDEX_P
STM #DATABUF,DATA_P
RPTZ A,#N-1
STL A,*DATA_P+
STM #(DATABUF+N-1),DATA_P
STM #COFFTAB,COFF_P
FIR_TASK:
STM #INPUT,INBUF_P
STM #OUTPUT,OUTBUF_P
STM #KS-1,BRC
RPTBD LOOP-1
STM #N,BK
LD *INBUF_P+,A
FIR_FILTER:
STL A,*DATA_P+%
RPTZ A,N-1
MAC *DATA_P+0%,*COFF_P+0%,A
STH A,*OUTBUF_P+
LOOP: EEND B EEND
.end
4.2 A/D转换源程序
A/D转换程序,输入端接了实验电路产生的模拟信号(可选择方波、正弦波、三角波),调用该程序,对所选的模拟信号进行采样,采样结果存在3000H开始的数据存储器中,可检查数据存储器的内容是否与采样波形的相对应。
.mmregs
.def _c_int00
.data
TEMP .usect "TEMP", 20h
TMP .set 6Ah
t0_flag .usect "vars",1
t0_cout .usect "vars",1
AK_SPCR11 .set 0000000000100001b
AK_SPCR21 .set 0000001011000001b
AK_RCR11 .set 0000000001000000b
AK_RCR21 .set 0000000001000000b
AK_XCR11 .set 0000000001000000b
AK_XCR21 .set 0000000001000000b
AK_SRGR11 .set 0000000000010000b
AK_SRGR21 .set 0011000000010000b
AK_PCR1 .set 0000101000000000b
SPSA1 .set 48h
McBSP1 .set 49h
DXR11 .set 43h
DXR21 .set 42h
DRR11 .set 41h
DRR21 .set 40h
SPCR11 .set 00h
SPCR21 .set 01h
RCR11 .set 02h
RCR21 .set 03h
XCR11 .set 04h
XCR21 .set 05h
PCR1 .set 0Eh
SRGR11 .set 06h
SRGR21 .set 07h
.text
_c_int00
b start
nop
nop
NMI rete
nop
nop
nop
SINT17 .space 4*16
SINT18 .space 4*16
SINT19 .space 4*16
SINT20 .space 4*16
SINT21 .space 4*16
SINT22 .space 4*16
SINT23 .space 4*16
SINT24 .space 4*16
SINT25 .space 4*16
SINT26 .space 4*16
SINT27 .space 4*16
SINT28 .space 4*16
SINT29 .space 4*16
SINT30 .space 4*16
INT0 rsbx intm
rete
nop
nop
INT1 rsbx intm
rete
nop
nop
INT2 rsbx intm
rete
nop
nop
TINT: rete
nop
nop
nop
RINT0: rete
nop
nop
nop
XINT0: rete
nop
nop
nop
SINT6 .space 4*16
SINT7 .space 4*16
INT3: rete
nop
nop
nop
HPINT: rete
nop
nop
nop
RINT1: BD RECIV
nop
nop
nop
XINT1: rete
nop
nop
nop
;*************************
start: LD #0,DP
STM #200h,SP
STM #0FFFFh,SWWSR
STM #1020h,PMST
SSBX CMPT
STM #3FFFH,IFR
LD #0AH,A
STL A,TMP
PORTW TMP,7H
CALL ADCBSP
STM #0400H,IMR
STM #3000H,AR0
STM #256,AR1
WAIT: IDLE 1
B WAIT
;*************************
ADCBSP STM #SPCR11,SPSA1
STM #0000h,McBSP1
NOP
NOP
STM #SPCR21,SPSA1
STM #0000h,McBSP1
NOP
NOP
STM #SPCR11,SPSA1
STM #AK_SPCR11,McBSP1
NOP
NOP
LD #02H,A
STL A,TMP
PORTW TMP,7H
STM #SPCR21,SPSA1
STM #AK_SPCR21,McBSP1
NOP
NOP
STM #RCR11,SPSA1
STM #AK_RCR11,McBSP1
NOP
NOP
STM #XCR11,SPSA1
STM #AK_XCR11,McBSP1
NOP
NOP
STM #PCR1,SPSA1
STM #AK_PCR1,McBSP1
NOP
NOP
STM SRGR11,SPSA1
STM #AK_SRGR11,McBSP1
NOP
NOP
STM SRGR21,SPSA1
STM #AK_SRGR21,McBSP1
NOP
NOP
STM #RCR21,SPSA1
STM #AK_RCR21,McBSP1
NOP
NOP
STM #XCR21,SPSA1
STM #AK_XCR21,McBSP1
NOP
NOP
RET
;******************************
RECIV: STM #3FFFH,IFR
LDM DRR11,A
LD #0,ARP
STL A,*AR0+
LD #1,ARP
BANZ LOOP1,*AR1-
STM #3000H,AR0
STM #256,AR1
LOOP1: RETE
;**********************
.end
4.3 D/A转换源程序
D/A转换程序,该程序产生一个三角波。
.mmregs
.def _c_int00
.data
TEMP .usect "TEMP", 10h
TMP .set 6Ah
flag .usect "vars",1
cout .usect "vars",1
DK_SPCR10 .set 0001100010100001b
DK_SPCR20 .set 0000001011100001b
DK_RCR10 .set 0000000001000000b
DK_RCR20 .set 0000000001000000b
DK_XCR10 .set 0000000001000000b
DK_XCR20 .set 0000000001000000b
DK_SRGR10 .set 0000111100010011b
DK_SRGR20 .set 0011000000111111b
DK_PCR0 .set 0000101000001111b
SPSA0 .set 38h
McBSP0 .set 39h
DXR10 .set 23h
DXR20 .set 22h
DRR10 .set 21h
DRR20 .set 20h
SPCR10 .set 00h
SPCR20 .set 01h
RCR10 .set 02h
RCR20 .set 03h
XCR10 .set 04h
XCR20 .set 05h
PCR0 .set 0Eh
SRGR10 .set 06h
SRGR20 .set 07h
.text
_c_int00
b start
nop
nop
NMI rete
nop
nop
nop
SINT17 .space 4*16
SINT18 .space 4*16
SINT19 .space 4*16
SINT20 .space 4*16
SINT21 .space 4*16
SINT22 .space 4*16
SINT23 .space 4*16
SINT24 .space 4*16
SINT25 .space 4*16
SINT26 .space 4*16
SINT27 .space 4*16
SINT28 .space 4*16
SINT29 .space 4*16
SINT30 .space 4*16
INT0 rete
rete
nop
nop
INT1 rete
rete
nop
nop
INT2 rete
rete
nop
nop
TINT: rete
nop
nop
nop
RINT0: rete
nop
nop
nop
XINT0: B XT
nop
nop
nop
SINT6 .space 4*16
SINT7 .space 4*16
INT3: rete
nop
nop
nop
HPINT: rete
nop
nop
nop
RINT1: rete
nop
nop
nop
XINT1: rete
nop
nop
nop
;*************************
start LD #0,DP
STM #200h,SP
STM #07FFFh,SWWSR
STM #1020h,PMST
ST #0FFFH,*(cout)
PORTW TMP,2H
PORTW TMP,1H
LD #0AH,A
STL A,TMP
PORTW TMP,7H
ST #0,*(flag)
CALL DACBSP
LD #0FFFH,A
SSBX INTM
STM #0020H,IMR
RSBX INTM
STLM A,DXR10
ST #0,TMP
;*************************
WAIT: B WAIT
;*************************
DACBSP:STM #SPCR10,SPSA0
STM #0000h,McBSP0
NOP
NOP
STM #SPCR20,SPSA0
STM #0000h,McBSP0
NOP
NOP
STM #SPCR10,SPSA0
STM #DK_SPCR10,McBSP0
NOP
NOP
STM #SPCR20,SPSA0
STM #DK_SPCR20,McBSP0
NOP
NOP
STM #RCR10,SPSA0
STM #DK_RCR10,McBSP0
NOP
NOP
STM #XCR10,SPSA0
STM #DK_XCR10,McBSP0
NOP
NOP
STM #PCR0,SPSA0
STM #DK_PCR0,McBSP0
NOP
NOP
STM SRGR10,SPSA0
STM #DK_SRGR10,McBSP0
NOP
NOP
STM SRGR20,SPSA0
STM #DK_SRGR20,McBSP0
NOP
NOP
STM #RCR20,SPSA0
STM #DK_RCR20,McBSP0
NOP
NOP
STM #XCR20,SPSA0
STM #DK_XCR20,McBSP0
NOP
NOP
RET
;*******************************
XT: RSBX XF
LD *(cout),A
ADD #-50,A
STL A,*(cout)
BC XT1,ANEQ
ST #0FFFH,*(cout)
XT1: AND #0FFCH,A
CMPM TMP,#0
BC XT2,TC
OR #1000H,A
ST #0,TMP
B XT3
XT2: OR #8000H,A
ST #1,TMP
XT3: STLM A,DXR10
RETE
;**********************
.en
4.4 A/D、D/A转换源程序
A/D转换器和D/A转换器的直通程序,由A/D采样实验电路产生的模拟信号(可选择方波、正弦波、三角波),再由D/A直接输出,采样一个点输出一个点。
.mmregs
.def _c_int00
.data
TEMP .usect "TEMP", 20h
t0_flag .usect "vars",1
t0_cout .usect "vars",1
AK_SPCR11 .set 0000000000100001b
AK_SPCR21 .set 0000001011000001b
AK_RCR11 .set 0000000001000000b
AK_RCR21 .set 0000000001000000b
AK_XCR11 .set 0000000001000000b
AK_XCR21 .set 0000000001000000b
AK_SRGR11 .set 0000000000010000b
AK_SRGR21 .set 0011000000010000b
AK_PCR1 .set 0000101000000000b
SPSA1 .set 48h
McBSP1 .set 49h
DXR11 .set 43h
DXR21 .set 42h
DRR11 .set 41h
DRR21 .set 40h
TMP .set 6Ah
SPCR11 .set 00h
SPCR21 .set 01h
RCR11 .set 02h
RCR21 .set 03h
XCR11 .set 04h
XCR21 .set 05h
PCR1 .set 0Eh
SRGR11 .set 06h
SRGR21 .set 07h
DK_SPCR10 .set 0001100010100001b
DK_SPCR20 .set 0000001011100001b
DK_RCR10 .set 0000000001000000b
DK_RCR20 .set 0000000001000000b
DK_XCR10 .set 0000000001000000b
DK_XCR20 .set 0000000001000000b
DK_SRGR10 .set 0000111100000100b
DK_SRGR20 .set 0011000000010000b
DK_PCR0 .set 0000101000001111b
SPSA0 .set 38h
McBSP0 .set 39h
DXR10 .set 23h
DXR20 .set 22h
DRR10 .set 21h
DRR20 .set 20h
SPCR10 .set 00h
SPCR20 .set 01h
RCR10 .set 02h
RCR20 .set 03h
XCR10 .set 04h
XCR20 .set 05h
PCR0 .set 0Eh
SRGR10 .set 06h
SRGR20 .set 07h
.text
_c_int00
b start
nop
nop
NMI rete
nop
nop
nop
SINT17 .space 4*16
SINT18 .space 4*16
SINT19 .space 4*16
SINT20 .space 4*16
SINT21 .space 4*16
SINT22 .space 4*16
SINT23 .space 4*16
SINT24 .space 4*16
SINT25 .space 4*16
SINT26 .space 4*16
SINT27 .space 4*16
SINT28 .space 4*16
SINT29 .space 4*16
SINT30 .space 4*16
INT0 rsbx intm
rete
nop
nop
INT1 rsbx intm
rete
nop
nop
INT2 rsbx intm
rete
nop
nop
TINT: rete
nop
nop
nop
RINT0: rete
nop
nop
nop
XINT0: BD XT
nop
nop
nop
SINT6 .space 4*16
SINT7 .space 4*16
INT3: rete
nop
nop
nop
HPINT: rete
nop
nop
nop
RINT1: BD RECIV
nop
nop
nop
XINT1: rete
nop
nop
nop
;*************************
start: LD #0,DP
STM #200h,SP
STM #07FFFh,SWWSR
STM #1020h,PMST
STM #3FFFH,IFR
PORTW TMP,2H
PORTW TMP,1H
LD #0AH,A
STL A,TMP
PORTW TMP,7H
CALL ADCBSP
CALL DACBSP
STM #0420H,IMR RSBX INTM
WAIT: IDLE 1
B WAIT
;************************* ADCBSP STM #SPCR11,SPSA1
STM #0000h,McBSP1 NOP
NOP
STM #SPCR21,SPSA1
STM #0000h,McBSP1 NOP
NOP
STM #SPCR11,SPSA1
STM #AK_SPCR11,McBSP1 NOP
NOP
LD #02H,A
STL A,TMP
PORTW TMP,7H
STM #SPCR21,SPSA1
STM #AK_SPCR21,McBSP1
NOP
NOP
STM #RCR11,SPSA1
STM #AK_RCR11,McBSP1
NOP
NOP
STM #XCR11,SPSA1
STM #AK_XCR11,McBSP1
NOP
NOP
STM #PCR1,SPSA1
STM #AK_PCR1,McBSP1
NOP
NOP
STM SRGR11,SPSA1
STM #AK_SRGR11,McBSP1
NOP
NOP
STM SRGR21,SPSA1
STM #AK_SRGR21,McBSP1
NOP
NOP
STM #RCR21,SPSA1
STM #AK_RCR21,McBSP1
NOP
NOP
STM #XCR21,SPSA1
STM #AK_XCR21,McBSP1
NOP
NOP
RET
;******************************
RECIV: LDM DRR11,A
RETE
;***************
XT: STLM A,DXR10 RETE
;**********************
DACBSP:STM #SPCR10,SPSA0
STM #0000h,McBSP0 NOP
NOP
STM #SPCR20,SPSA0
STM #0000h,McBSP0
NOP
NOP
STM #SPCR10,SPSA0
STM #DK_SPCR10,McBSP0
NOP
NOP
STM #SPCR20,SPSA0
STM #DK_SPCR20,McBSP0
NOP
NOP
STM #RCR10,SPSA0
STM #DK_RCR10,McBSP0
NOP
NOP
STM #XCR10,SPSA0
STM #DK_XCR10,McBSP0
NOP
NOP
STM #PCR0,SPSA0
STM #DK_PCR0,McBSP0
NOP
NOP
STM SRGR10,SPSA0
STM #DK_SRGR10,McBSP0
NOP
NOP
STM SRGR20,SPSA0
STM #DK_SRGR20,McBSP0
NOP
NOP
STM #RCR20,SPSA0
STM #DK_RCR20,McBSP0
NOP
NOP
STM #XCR20,SPSA0
STM #DK_XCR20,McBSP0
NOP
NOP
RET
;**********************
.end
4.5 A/D、FIR、D/A综合程序
该程序综合完成以下功能:
1、通过A/D转换器采集数据,由A/D采样实验电路产生的模拟信号(可选择方波、正弦波、三角波),采集的数据x(n)存放在#3000h地址开始的内存单元。
2、采用设计好的FIR低通滤波器,对采集的数据进行低通滤波,低通滤波后的数据y(n)存放在#2400h地址开始的内存单元。
3、滤波得到的数据通过D/A转换输出,在示波器上可以观察输出信号。采样一个数据,滤一个数据,输出一个数据 。
.mmregs
.def _c_int00
TMP .set 6Ah
AK_SPCR11 .set 0000000000100001b
AK_SPCR21 .set 0000001011000001b
AK_RCR11 .set 0000000001000000b
AK_RCR21 .set 0000000001000000b
AK_XCR11 .set 00000
展开阅读全文