郑州航空工业管理学院
电子通信工程系
DSP原理及应用课程设计报告
设计题目:基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现
学 号: ...
姓 名: ....
专 业: 电 子 信 息 工 程
设计日期: 20XX年6月13日
指导老师: ......
目 录
一、引言
二、设计目的
三、设计要求
四、总体设计
4.1利用Matlab软件的FDATool工具设计FIR滤波器
4.1.1有限冲击响应数字滤波器的基础理论
4.1.2 利用Matlab软件的FDATool设计FIR滤波器
4.1.3提取滤波器参数
4.2 CCS环境下FIR滤波器的设计及软件仿真
4.2.1 程序流程图
4.2.2 在CCS集成开发环境下新建FIR滤波器工程
4.2.3观察滤波前后的信号的时域波形及FFT Magnitude波形
4.2.4 程序清单
4.3 对实时采样信号进行滤波的FIR滤波器的实现
4.3.1 程序清单
4.3.2 测试效果
4.3.3 SCI串行数据传输
五、总结
六、参考文献
基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现
一、引言
数字信号处理(DSP)包括两重含义:数字信号处理技术(Digital Signal Processing )和数字信号处理器( Digital Signal Processor )。在数字信号处理的基本方法中,滤波是应用非常广泛的一个环节,数字滤波器的理论与相关设计也一直都是人们研究的重点之一。数字滤波器根据其单位冲击响应函数的时域特性可分为两类:无限冲击响应(Infinite Impulse Response,IIR)滤波器和有限冲击响应(Finite Impulse Response,FIR)滤波器。与 IIR滤波器相比,FIR的实现是非递归的。
使用通用DSP芯片实现滤波方式较为简单,是一种实时的,快速的,特别适合于实现各种数字信号处理运算的微处理器,借助于通用数字计算机按滤波器的设计算法编出程序进行数字滤波计算。由于它具有丰富的硬件资源,改进哈弗结构,高速数据处理能力和强大的指令系统而在很多领域得到广泛应用。
二、设计目的
1、掌握用窗函数法设计FIR滤波器的原理及方法,掌握使用matlab编程的基本方法。
2、掌握TMS320F2812 DSP处理器开发的程序框架结构,学习驱动TMS320F2812 DSP处理器程序编写并能使其正常工作。实习驱动ADC模块实现信号的实时采集与模数转换。
3、掌握使用TMS320F2812 DSP处理器实现FIR数字低通滤波器的设计方法,并能够实时采集输入信号并滤除高频信号再通过SCI串口传输到计算机显示。
三、设计要求
1、利用Matlab软件的FDATool工具设计FIR滤波器,并提取滤波器参数;
2、在CCS集成开发环境下,利用第1步得到的滤波器参数,利用窗函数法设计FIR滤波器程序,观察输入信号及滤波后得到的输出信号的时域波形及FFT Magnitude波形;
3、利用TMS320F2812的ADC片内外设的外围电路实时采集的混频信号数据,使用1个51阶的FIR低通滤波器,在CCS中设计FIR滤波器程序实现滤波,观察相关波形及滤波效果,通过SCI接口将数据传送到计算机上。
四、总体设计
4.1利用Matlab软件的FDATool工具设计FIR滤波器
4.1.1有限冲击响应数字滤波器的基础理论
滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号。滤波器的设计实质上就是对提出的要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性逼近给出的频率响应特性。FIR 数字滤波器系统的传递函数为:
(1)
由此得到系统的差分方程:
(2)
若FIR 数字滤波器的单位冲激响应序列为h(n),它就是滤波器系数向量b(n)。传统的滤波器分析与设计均使用繁琐的公式计算,改变参数后需要重新运算,从而在分析与设计滤波器尤其是高阶滤波器时工作量特别大。这里应用MATLAB 设计FIR滤波器,根据给定的性能指标设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化。设计完成之后将得到FIR滤波器的单位冲激响应序列h(n)的各个参数值。
4.1.2 利用Matlab软件的FDATool设计FIR滤波器
(1) 打开Matlab软件,首先在命令窗口键入FDAtool命令,启动滤波器设计分析器,调出FDAtool界面.
(2) 在Filter Type选项中选Lowpass,在Design Method中选择FIR滤波器,接着在FIR中选择Window (窗函数) 法。
(3) 然后在Filter Order 中选择Specify Order (为指定阶数),输入数值为“24”;在Opitions框中选中“Scale Passband”;在窗类型(Window:)下拉框选择“Blackman”。
(4) 在Frenquency Specification选项中,将fs(为采样频率)、fact (为通带截止频率)中分别键入30000 Hz和9600 Hz。
(5) 点击“Design Filter”按钮,完成滤波器的设计。具体参数及设计成功后的结果如图所示。
设计完成后,可以通过菜单选项Analysis 来分析滤波器的幅频响应和相频响应特性。点击Analysis 中的Magnitude Response和Phase Response 对幅频和相频响应进行分析。
4.1.3提取滤波器参数
(6) 在FDATool 中,选择Targets -> Generate C Header..., 如图设置后,点击Generate按钮,选择路径,即可输出前一步设计出的FIR滤波器的系数表。默认的系数表文件为fdacoefs.h。
(7) 在Matlab中打开得到的fdacoefs.h的文件,系数表如图
(8) 取系数表中的数据小数点后3位有效值,得到如下内容:
const float B[25]= { 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
-0.018,0.049,-0.02,-0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0 };
4.2 CCS环境下FIR滤波器的设计及软件仿真
4.2.1 程序流程图如下
4.2.2 在CCS集成开发环境下新建FIR滤波器工程
(1)设置软件仿真模式,启动CCS。
(2)建立一个文件夹,存放在D:\FIR,将D:\课程设计\FIR滤波器\Fir源程序文件夹下的工程全部复制到D:\FIR,在CCS中打开D:\FIR\fir\fir.pjt工程,打开fir.c文件,编译生成fir.out文件,通过File->Load Program…装载该文件。
(3)设置波形时域观察窗口,选择菜单View→Graph→Time/Frequency… ,如图设置
输入数据时域波形观察
滤波后输出波形观察
(4)设置频域观察窗口,选择菜单View→Graph→Time/Frequency… ,分别进行如图设置
输入数据FFT分析图形观察
滤波后输出数据的FFT图形观察
4.2.3观察滤波前后的信号的时域波形及FFT Magnitude波形
(1)设置断点。在程序fir.c中,有注释断点的语句上设置软件断点。
(2)运行并观察结果。选择Debug菜单的Run项,或按F5键运行程序。观察到的图形如下图所示。
4.2.4 程序清单
#include"math.h"
#define FIRNUMBER 25
#define PI 3.1415926
float InputWave();
float FIR();
float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
-0.018,0.049,-0.02,-0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0
};
float fXn[FIRNUMBER]={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;
main(void)
{
nIn=0; nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
fStepSignal1=2*PI/30;
fStepSignal2=2*PI*1.4;
while ( 1 )
{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++; nIn%=256;
fOutput=FIR();
fOut[nOut]=fOutput;
nOut++;
if ( nOut>=256 )
{
nOut=0; /* 请在此句上设置软件断点 */
}
}
}
float InputWave()
{
for ( i=FIRNUMBER-1;i>0;i-- )
fXn[i]=fXn[i-1];
fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;
fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI;
return(fXn[0]);
}
float FIR()
{
float fSum;
fSum=0;
for ( i=0;i<FIRNUMBER;i++ )
{
fSum+=(fXn[i]*fHn[i]);
}
return(fSum);
}
4.3 对实时采样信号进行滤波的FIR滤波器的实现
4.3.1 程序清单
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
#include <math.h>
#define pi 3.1415927
int px[256];
int py[256];
double npass,h[51], x, y, xmid[51];
int m=50;
int n=256;
interrupt void adc_isr(void);
Uint16 LoopCount;
Uint16 ConversionCount;
void firdes(int m, double npass)
{
int t;
for (t=0; t<=m; t++)
{
h[t] = sin((t-m/2.0)*npass*pi)/(pi*(t-m/2.0));
}
if (t=m/2) h[t]=npass;
}
void main(void)
{
int xm,ym;
double fs,fstop,r,rm;
int i,j,p,k;
InitSysCtrl();
EALLOW;
SysCtrlRegs.HISPCP.all = 0x3; // HSPCLK = SYSCLKOUT/6
EDIS;
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.ADCINT = &adc_isr;
EDIS;
InitAdc();
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1;
EINT;
ERTM;
LoopCount = 0;
ConversionCount = 0;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
AdcRegs.ADCMAXCONV.all=0x0000; AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x4; AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1; AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
EvaRegs.T1CMPR=0x0380;
EvaRegs.T1PR=0x07FF;
EvaRegs.GPTCONA.bit.T1TOADC = 1;
EvaRegs.T1CON.all = 0x1042;
k=0;
fs = 250000;
fstop = 20000;
npass = fstop/fs;
for (i=0; i<=m; i++)
{
xmid[i]=0;
}
for(;;)
{
firdes(m, npass);
for (i=0; i<=n-1; i++)
{
xm = px[i];
x = xm/1023.0;
for (p=0; p<=m; p++)
{
xmid[m-p] = xmid[m-p-1];
}
xmid[0] = x;
r = 0;
rm= 0;
for (j=0; j<=m; j++)
{
r = xmid[j] * h[j];
rm = rm + r;
}
y = rm;
ym = (int)(1023.0 * y);
py[i] = ym;
}
k++; //加断点,观察波形
}
}
interrupt void adc_isr(void)
{
px[ConversionCount] = AdcRegs.ADCRESULT0 >>4;
if(ConversionCount == 256)
{
ConversionCount = 0;
}
else ConversionCount++;
AdcRegs.ADCTRL2.bit.RST_SEQ1=1; AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
return;
}
4.3.2 测试效果
如图所示
靠上的是滤波前时域波形,下面的是滤波后时域波形
分别为滤波前和滤波后的FFT分析图形
4.3.3 SCI串行数据传输
1、pc机采用串口调试工具软件,将PC机键盘的输入发送给DSP,DSP收到PC机发来的数据后,回送同一数据给PC机。
2、实验板使用串口通信电缆,启动串口调试助手.exe,设置数据格式为1位停止位,无奇偶校验,8位数据输出,串口波特率为9600bit/s。
支持ASCII码和十六进制数据格式的发送和接收。
五、总结
通过这次课程设计,我学到了很多知识并且巩固了以前所学的很多软件和课程。DSP不同于以前的单片机,它采用了多组总线技术实现并行运行机制,从而极大地提高了运算速度,也提供了非常灵活的指令系统。通过这次课程设计使我对dsp有了更深入的了解,我不仅对以前所学的知识有了较深刻的理解,而且动手能力、独立解决问题的能力有所提高。熟练地运用Matlab工具设计滤波参数,很好的加深了我对课程的理解,方便我的思维。这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手能力。
我也非常感谢老师的悉心指导,对报告的书写格式及内容,老师多次帮助分析思路,开拓视角。为以后的学习和就业奠定一定基础。
六、参考文献
[1] 赵成 DSP原理与应用
[2] 《数字信号处理教程》 程佩清 编著 清华大学出版社
[3] 《基于DSP的FIR滤波器的设计与实现》 长沙理工大学
1课程设计目的课程设计是船舶设计原理课程重要的实践性教学环节是培养学生掌握船舶设计基本原理和能力的技术基础主尺度论证与总布置设计是…
一设计目的1强化上机动手能力在理论和实践的基础上进一步巩固数据结构课程学习的内容掌握工程化软件设计的基本方法2掌握图的创建和应用3…
中国计量学院信息工程学院课程设计报告课程设计名称系统设计与仿真课程计二级学院信息工程学院专业班级10电信2班学姓成绩号名10003…
信息科学与工程学院高级语言程序设计课程设计报告学生成绩管理系统学科专业计算机科学与技术班级1301学号指导教师唐郑熠讲师学生二零年…
扬州大学数据结构课程设计报告课题名称姓名学院系科班级指导老师日期自来水管架设问题广陵学院陈宏建1一课程设计的题目自来水管理架设问题…
一绪论数字图像处理DigitalImageProcessing是指将图像信号转换成数字信号并利用计算机对其进行处理的过程图像处理中…
课程设计总结报告课程名称DSP控制器及其应用设计题目专业电子信息工程班级姓名学号指导教师报告成绩信息工程学院二一四年六月十三日目录…
科信学院课程设计说明书(2008/20XX学年第二学期)课程名称:DSP控制器及其应用题目:DSP通用管脚控制LCD公告牌的文字显…
一、课程设计的目的和要求1.1课程设计目的:本课程是DSP技术类课程配套的课程设计,要求学生通过高级语言或汇编语言编程实现较复杂的…
DSP课程设计总结(20##-20##学年第2学期)题目:数据采集处理和控制系统设计班级:电子091班学生姓名:学号:指导教师:2…