基于TMS320F2812-DSP处理器的FIR滤波器的设计与实现Word下载.doc
《基于TMS320F2812-DSP处理器的FIR滤波器的设计与实现Word下载.doc》由会员分享,可在线阅读,更多相关《基于TMS320F2812-DSP处理器的FIR滤波器的设计与实现Word下载.doc(15页珍藏版)》请在冰点文库上搜索。
实习驱动ADC模块实现信号的实时采集与模数转换。
(4)掌握使用TMS320F2812
DSP处理器实现FIR数字低通滤波器的设计方法,并能够实时采集输入信号并滤除高频信号再通过SCI串口传输到计算机显示。
三、设计要求
1、利用Matlab软件的FDATool工具设计FIR滤波器,并提取滤波器参数;
2、在CCS集成开发环境下,利用第1步得到的滤波器参数,利用窗函数法设计FIR滤波器程序,观察输入信号及滤波后得到的输出信号的时域波形及FFT
Magnitude波形;
3、利用TMS320F2812的ADC片内外设的外围电路实时采集的混频信号数据,使用1个51阶的FIR低通滤波器,在CCS中设计FIR滤波器程序实现滤波,观察相关波形及滤波效果,通过SCI接口将数据传送到计算机上;
4、(选做)利用TI公司的TLV320AIC23高性能立体声音频Codec芯片,通过MIC或音频接口采样音频信号,对采样的音频信号做滤波运算,进行低音加重处理,再将运算过的音频数据通过扬声器播放出来
四、总体设计
4.1利用Matlab软件的FDATool工具设计FIR滤波器
4.1.1有限冲击响应数字滤波器的基础理论
滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号。
滤波器的设计实质上就是对提出的要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性逼近给出的频率响应特性。
FIR
数字滤波器系统的传递函数为:
å
-=-==1
)()()(H(z)NnnznbzXzY
(1)
由此得到系统的差分方程:
))1(()1()1()1()()0()(-*-+×
×
+-*+*=NnxNbnxbnxbny
(2)
若FIR
数字滤波器的单位冲激响应序列为h(n),它就是滤波器系数向量b(n)。
传统的滤波器分析与设计均使用繁琐的公式计算,改变参数后需要重新运算,从而在分析与设计滤波器尤其是高阶滤波器时工作量特别大。
这里应用MATLAB
设计FIR滤波器,根据给定的性能指标设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化。
设计完成之后将得到FIR滤波器的单位冲激响应序列h(n)的各个参数值。
4.1.2利用Matlab软件的FDATool设计FIR滤波器
(1)
首先在命令窗口键入FDAtool命令,启动滤波器设计分析器,调出FDAtool界面,如下图所示。
FDATool界面(2)
在Filter
Type选项中选Lowpass,在Design
Method中选择FIR滤波器,接
着在FIR中选择Window
(窗函数)
法。
(3)
然后在Filter
Order
中选择Specify
(为指定阶数),输入数值为“24”;
在Opitions框中选中“Scale
Passband”;
在窗类型(Window:
)下拉框选择“Blackman”。
(4)
在Frenquency
Specification选项中,将fs(为采样频率)、fc
(为通带截止
频率)中分别键入30000
Hz和9600
Hz。
(5)
点击“Design
Filter”按钮,完成滤波器的设计。
具体参数及设计成功后的结
果如下图所示。
FIR低通滤波器设计(6)
通过菜单选项Analysis
来分析滤波器的幅频响应和相频响应特性。
点击
Analysis
中的Magnitude
Response和Phase
Response
对幅频和相频响应进行分析。
如下图所示
幅频和相频响应进行分析
(7)
在FDATool
中,选择Targets
->
Generate
C
Header...,单击Generate按钮,
选择路径,即可输出前一步设计出的
FIR滤波器的系数表。
(默认的系数表文件为fdacoefs.h。
如下图所示。
导出滤波器系数
(8)
在Matlab中打开得到的fdacoefs.h的文件,如下图所示
从Matlab中打开的fdacoefs.h文件
4.1.3提取滤波器参数
取系数表中的数据小数点后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.2CCS环境下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工程,打开的CCS集成开发环境如下图所示。
在CCS集成开发环境中打开工程
4.2.3观察滤波前后的信号的时域波形及FFTMagnitude波形
(1)编译工程文件生成fir.out文件,并通过File->
Load
Program„装载该文件。
(2)设置波形时域观察窗口。
选择菜单View→Graph→Time/Frequency„
,分别进行如下图所示进行设置以便观
察输入/输出时域波形。
输入数据频域波形观察
输出数据频域波形观察
(3)设置断点。
在程序fir.c中,有注释断点的语句上设置软件断点。
(4)运行并观察结果。
选择Debug菜单的Run项,或按F5键运行程序。
观察到的图形如下图所示。
滤波前后的数据波形及FFT分析的对比图
4.2.4程序清单
fir.c
程序
//#include
"
DSP281x_Device.h"
//
DSP281x
Headerfile
Include
File
DSP281x_Examples.h"
Examples
f2812a.h"
#include"
math.h"
#define
FIRNUMBER
25
//#define
SIGNAL1F
1000
SIGNAL2F
4500
SAMPLEF
10000
PI
3.1415926
InputWave();
FIR();
fHn[FIRNUMBER]={
};
fXn[FIRNUMBER]={
0.0
fInput,fOutput;
fSignal1,fSignal2;
fStepSignal1,fStepSignal2;
f2PI;
int
i;
fIn[256],fOut[256];
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{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++;
nIn%=256;
fOutput=FIR();
fOut[nOut]=fOutput;
nOut++;
if
(
nOut>
=256
)
/*
请在此句上设置软件断点
*/
}
InputWave(){
for
i=FIRNUMBER-1;
i>
0;
i--
fXn[i]=fXn[i-1];
fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;
fSignal1+=fStepSignal1;
fSignal1>
=f2PI
fSignal1-=f2PI;
fSignal2+=fStepSignal2;
fSignal2>
fSignal2-=f2PI;
return(fXn[0]);
FIR()
fSum;
fSum=0;
i=0;
i<
FIRNUMBER;
i++
fSum+=(fXn[i]*fHn[i]);
return(fSum);
fir.cmd
-l
rts2800_ml.lib-stack
400h
-heap
100
MEMORY
PAGE
0
:
PROG(R)
origin
=
0x80000,
length
0x10000
BOOT(R)
0x3FF000,
0xFC0
RESET(R)
0x3FFFC0,
0x2
/*PAGE
VECTORS(R)
0x3FFFC2,
0x3E*/
1
M0RAM(RW)
0x000000,
0x400
M1RAM(RW)
0x000400,
L0L1RAM(RW)
0x008000,
0x2000
H0RAM(RW)
0x3F8000,
SECTIONS
22-bit
program
sections
.reset
>
RESET,
/*vectors
VECTORS,
0*/
.pinit
PROG,
.cinit
.text
16-Bit
data
.const
L0L1RAM,
.bss
.stack
M1RAM,
.sysmem
M0RAM,
32-bit
.ebss
H0RAM,
.econst
.esysmem
4.3对实时采样信号进行滤波的FIR滤波器的实现
4.3.1程序清单
#include
<
math.h>
pi
3.1415927
px[256];
py[256];
double
npass,h[51],
x,
y,
xmid[51];
m=50;
n=256;
Prototype
statements
functions
found
within
this
file.
interrupt
void
adc_isr(void);
Global
variables
used
in
example:
Uint16
LoopCount;
ConversionCount;
firdes(int
m,
npass)
t;
(t=0;
t<
=m;
t++)
h[t]
sin((t-m/2.0)*npass*pi)/(pi*(t-m/2.0));
(t=m/2)
h[t]=npass;
xm,ym;
fs,fstop,r,rm;
i,j,p,k;
PLL,
WatchDog,
enable
Peripheral
Clocks
This
example
function
is
the
DSP281x_SysCtrl.c
InitSysCtrl();
For
example,
set
HSPCLK
to
SYSCLKOUT
/
6
(25Mhz
assuming
150Mhz
SYSCLKOUT)
EALLOW;
4.3.2测试效果
如上图所示,可以发现使用DSP芯片实现的的FIR滤波器已经成功的将设定的混合频率信号中的高频部分
五、总结
DSP技术一般指将DSP
处理器用于完成数字信号处理的方法与技术。
目前的DSP芯片以其强大的数据处理功能在通信和其他信号处理领域得到广泛注意并已成为开发应用的热点技术。
许多领域对于数字信号处理器的应用都是围绕美国TI公司所开发的DSP处理器进行的。
DSP芯片是一种特别适合于进行数字信号处理运算的微处理器。
主要应用是实时快速的实现各种数字信号处理算法,如卷积及各种变换等。
这次我们所做的利用DSP芯片来实现数字滤波器就是一项很重要的应用,这一次的课程设计主要讨论基于TI公司TMS320F2812
DSP芯片的滤波器系统软件实现方法,用Blackman窗函数设计实现FIR滤波器,利用MATLAB中的FDAtool滤波器设计分析器设计符合要求的FIR滤波器并生成fdacoefs.h文件提取相关参数。
并在以TI
TMS320F2812为微处理器的EXPIV型实验箱上实现,实验仿真结果、实时数据采集及ADC转换滤波滤波均表明滤波后能够得到比较光滑时域/频域波形,滤波结果效果良好达到了预期的性能指标要求。
六、参考文献
1.
《DSP原理与应用技术》
王忠勇
陈恩庆
编著
电子工业出版社
2.
《基于DSP的FIR滤波器的设计与实现》
长沙理工大学
3.
《数字信号处理教程》
程佩清
清华大学出版社
4.
《Matlab/Simulink通信系统建模与仿真实例分析》
清华大学出版社