基于ccs环境的FIR数字滤波器仿真Word下载.docx
- 文档编号:4015686
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:11
- 大小:191.45KB
基于ccs环境的FIR数字滤波器仿真Word下载.docx
《基于ccs环境的FIR数字滤波器仿真Word下载.docx》由会员分享,可在线阅读,更多相关《基于ccs环境的FIR数字滤波器仿真Word下载.docx(11页珍藏版)》请在冰点文库上搜索。
阻带边界频率为1KHz和4KHz;
采样频率为10KHz,并利用设计好的滤波器对常用信号进行滤波处理。
二、设计思想
1、FIR(FiniteImpulseResponse)滤波器原理:
有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件。
可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
FIR滤波器无反馈回路,是一种条件稳定系统,可以设计成具有线性相位特性。
设FIR滤波器的系数为h(0),h
(1),...,h(N-1),X(n)表示滤波器在n时刻的输入,则n时刻的输出为:
FIR数字滤波器的结构如图1所示:
2、使用Matlab中的Fdatool设计滤波器
在Matlab的Start菜单中选择Toolboxes->
FilterDesign->
FilterDesign&
AnalysisTools(fdatool),或者在命令行中输入fdatool来启动滤波器设计分析器。
调整各参数后得到设计的数字滤波器如下:
三、总体设计
1、从Matlab中导出FIR滤波器系数。
a.在Fdatool中,选择Targets->
CodeComposerStudio(tm)IDE。
b.在出现的对话框中选择输出文件类型为Cheaderfile,输出系数类型为
signed16-bitinteger,如下图所示:
c.点击OK按钮,选择路径,即可输出前一步设计出的FIR滤波器的系数表,文件为fdacoefs.h,得到滤波器的参数如下:
constintBL=81;
constint16_TB[81]={
-16,0,-7,0,139,0,-223,0,17,
0,233,0,-14,0,-356,0,35,0,
532,0,-59,0,-790,0,85,0,1184,
0,-110,0,-1857,0,130,0,3334,0,
-143,0,-10382,0,16531,0,-10382,0,-143,
0,3334,0,130,0,-1857,0,-110,0,
1184,0,85,0,-790,0,-59,0,532,
0,35,0,-356,0,-14,0,233,0,
17,0,-223,0,139,0,-7,0,-16
};
2、待测信号设计
本实验设计一个采样频率Fs为10KHz,输入信号频率为0.5KHz、3KHz和8KHz的合成信号,通过设计的带通滤波器将0.5KHz和8KHz信号滤除,剩余其余信号。
为了方便的导入ccs环境,特用Matlab生成随机信号,并导出明为input的dat文件。
随机信号生成代码:
f11=500;
%/Hz
f12=3000;
f13=8000;
fs=10000;
%/采样Hz
N=1000%数据个数
T=1/fs;
%采样周期
n=0:
N;
x11=sin(2*pi*f11*n*T);
x12=0.7*sin(2*pi*f12*n*T);
x13=0.5*sin(2*pi*f13*n*T);
x_base=(x11+x12+x13);
%待滤波信号波形
figure
(1)
plot(x_base)
%待滤波信号频谱
figure
(2)
yff=abs(fft(x_base))
df=n*(fs/N)
plot(df,yff)
xout=x_base/max(x_base);
%归一化
xto_ccs=round(32767*xout)
fid=fopen('
input.dat'
'
w'
);
%打开文件
fprintf(fid,'
16511000\n'
%输出文件头
%d\n'
xto_ccs);
%输出
fclose(fid);
3、CCS环境程序设计
A、在CCS上建立FIR工程并将滤波器仿真程序FIR.c、Matlab导出的头文件fdacoefs.h和链接文件FIR.cmd添加到工程中,对程序进行调试、链接;
调试无误后生成FIR.out程序。
FIR.c程序如下:
#include"
stdio.h"
fdacoefs.h"
//fdacoefs.h为Matlab生成的系数表头文件
#defineN81//FIR滤波器的级数+1,本例中滤波器级数为80
#defineLEN200//待滤波的数据长度
longyn;
intinput[LEN];
//输入缓冲,在仿真时将从内存载入
intoutput[LEN];
//输出缓冲,直接存放在内存中
voidmain()
{
inti,j;
int*x;
for(j=0;
j<
LEN-1;
j++)
{
x=&
input[j];
yn=0;
for(i=0;
i<
N-1;
i++)
yn+=B[i]*(*x++);
output[j]=yn>
>
15;
}
while
(1);
}
FIR.cmd程序如下:
MEMORY
PAGE0:
EPROG:
origin=0x1400,len=0x7c00
VECT:
origin=0xff80,len=0x80
PAGE1:
USERREGS:
origin=0x60,len=0x1c
BIOSREGS:
origin=0x7c,len=0x4
IDATA:
origin=0x80,len=0x1380
EDATA:
origin=0x1400,len=0x8000
EDATA1:
origin=0x9400,len=0x4c00
}
SECTIONS
.vectors:
{}>
VECTPAGE0
.sysregs:
BIOSREGSPAGE1
.trcinit:
EPROGPAGE0
.gblinit:
frt:
.text:
.cinit:
.pinit:
.sysinit:
.bss:
IDATAPAGE1
.far:
.const:
.switch:
.sysmem:
.cio:
.MEM$obj:
.sysheap:
.stack:
B、装载FIR.out文件,把滤波器程序载入内存;
装载之前生成的input.dat文件,将Address设置为input,Length设置为200,Page设置为Data。
C、运行程序,点击RUN按钮,程序即开始运行。
D、查看滤波器滤波效果。
打开View->
Graph->
Time/Frequency,修改参数设置如下:
点击OK,得到输入信号的时域波形:
E、重复前三个步骤,只改变图形选项中的DisplayType、GraphTitle、StartAddress,使之最后出现如下的图形:
左上角:
输入数据时域图(StartAddress:
input)
右上角:
输入数据频谱(DisplayType:
FFTMagnitude)
左下角:
输出数据时域图(StartAddress:
output)
右下角:
输出数据频谱(DisplayType:
FFTMagnitude)
四、总结
实践证明,该滤波器准确度搞、稳定性好,易于移植使用,具有较强的实用性与灵活性。
Matlab可方便地设计出FIR数字滤波器,并且修改系数方便。
DSP的可移植性好,所以能从不同方法得来滤波器系数,从而达到不同的滤波效果。
综合实验的各个方面以及实验中出现的问题,让我对DSP环境下滤波器设计这一课程设计有了全新而系统的认识:
对滤波器设计首先应该明确设计任务(目的),要了解自己究竟要设计什么,怎样设计,以及怎样解决实验中出现的问题,必须有一个明确的设计思路;
其次,要掌握足够的理论知识,以踏实、严谨的态度对待,充分发挥创新精神,将自己的理论知识与实际设计情况相结合,做到理论联系实际,实际也不脱离理论,只有理论联系实际才能真正学到知识!
参考文献
[1]DSP原理及应用北京:
电子工业出版社,2005.1
[2]TMS320C54xDSP应用程序设计教程北京:
机械工业出版社,2004.1
[3]MATLAB在数字信号处理中的应用北京:
清华大学出版社,2003
[4]DSP系统设计与开发实例北京:
电子工业出版社,2004
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ccs 环境 FIR 数字滤波器 仿真