有限冲击响应FIR滤波器的设计完美版Word文档格式.docx
《有限冲击响应FIR滤波器的设计完美版Word文档格式.docx》由会员分享,可在线阅读,更多相关《有限冲击响应FIR滤波器的设计完美版Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
y(n)=∑h(i)x(n-i)
其激响应h(n)是有限长序列,它其实就是滤波器系数向量b(n),N为FIR滤波器的阶数.
在数字信号处理应用中往往需要设计线性相位的滤波器,FIR滤波器在保证幅度特性满足技术要求的同时,易做到严格的线性相位特性。
为了使滤波器满足线性相位条件,要求其单位脉冲响应h(n)为实序列,且满足偶对称或奇对称条件,即h(n)=h(N-1-n)或h(n)=h(N-1-n)。
这样,当N为偶数时,偶对称线性相位F讯滤波器的差分方程表达式为
Y(n)=∑h(i)(x(n-i)+x(N-1-n-i))
由上可见,FIR滤波器不断地对输入样本x(n)延时后,再做乘法累加算法,将滤波器结果y(n)输出。
因此,FIR实际上是一种乘法累加运算。
而对于线性相位FIR而言,利用线性相位FIR滤波器系数的对称特性,可以采用结构精简的FIR结构将乘法器数目减少一半。
FIR滤波器的单位脉冲h(n)是一个有限长序列。
若h(n)为实数,且满足偶对称或是奇对称的条件,则FIR滤波器具有相位特性,FIR数字滤波器具有以下几个特点:
FIR滤波器无反馈回路,是一种无条件稳定系统。
四、总体方案设计
1、有给定的设计参数,滤波器系数可由MATLAB中的函数产生。
2、在CCS中采用汇编源程序来实现FIR数字滤波器
步骤1):
创建工程文件project/new/myproject保存时加后缀。
2):
在file/new/sourcefile进行汇编语言并将其添加到工程文件。
3):
编译汇编链接project/build生成out文件。
4):
file/loadprogram。
5):
执行文件。
五、主要参数
滤波器阶数为17,a1=a15=0,a2=a14=158,a3=a13=264,a4=a12=-290,a5=a11=-1406,a6=a10=3187,a7=a9=9287,a8=12272。
六、设计步骤
1、启动CCS,在CCS中建立一个汇编源文件、建立一个C源文件和一个命令文件,并将这三个文件添加到工程,再编译并装载程序。
2、设置波形时域观察窗口,得到其滤波前后波形变化图;
3、设置频域观察窗口,得到其滤波前后频谱变化图。
七、源程序
1、汇编源文件
;
一个FIR滤波器源程序fir.asm
.mmregs
.globalstart
.defstart,_c_int00
INDEX.set1
KS.set256;
模拟输入数据缓冲区大小
N.set17
COFF_FIR.sect"
COFF_FIR"
;
FIR滤波器系数
.word0
.word158
.word264
.word-290
.word-1406
.word-951
.word3187
.word9287
.word12272
.word260
.data
INPUT.copy"
firin.inc"
;
模拟输入在数据存储区0x2400
OUTPUT.space1024;
输出数据在数据区0x2500
FIR_DP.usect"
FIR_VARS"
0
D_FIN.usect"
1
D_FOUT.usect"
1
COFFTAB.usect"
FIR_COFF"
N
DATABUF.usect"
FIR_BFR"
BOS.usect"
STACK"
0Fh
TOS.usect"
.text
.asgAR0,INDEX_P
.asgAR4,DATA_P;
输入数据x(n)循环缓冲区指针
.asgAR5,COFF_P;
FIR系数表指针
.asgAR6,INBUF_P;
模拟输入数据指针
.asgAR7,OUTBUF_P;
FIR滤波器输出数据指针
_c_int00
bstart
nop
start:
ssbxFRCT
STM#COFFTAB,COFF_P
RPT#N-1;
将FIR系数从程序存储器移动
MVPD#COFF_FIR,*COFF_P+;
到数据存储器
STM#INDEX,INDEX_P
STM#DATABUF,DATA_P
RPTZA,#N-1
STLA,*DATA_P+;
将数据循环缓冲区清零
STM#(DATABUF+N-1),DATA_P;
数据缓冲区指针指向x[n-(N-1)]
STM#COFFTAB,COFF_P;
FIR_TASK:
STM#INPUT,INBUF_P
STM#OUTPUT,OUTBUF_P
STM#KS-1,BRC
RPTBDLOOP-1
STM#N,BK;
FIR循环缓冲区大小
LD*INBUF_P+,A;
装载输入数据
FIR_FILTER:
STLA,*DATA_P+%
RPTZA,N-1
MAC*DATA_P+0%,*COFF_P+0%,A
STHA,*OUTBUF_P+
LOOP:
EENDBEEND
.end
2、链接程序
fir.obj
-mfir.map
-ofir.out
MEMORY
{
PAGE0:
ROM1(RIX):
ORIGIN=0080H,LENGTH=100H
PAGE1:
INTRAM1(RW):
ORIGIN=2400H,LENGTH=0200H
INTRAM2(RW):
ORIGIN=2600H,LENGTH=0100H
INTRAM3(RW):
ORIGIN=2700H,LENGTH=0100H
B2B(RW):
ORIGIN=0070H,LENGTH=10H
}
SECTIONS
.text:
{}>
ROM1PAGE0
.data:
INTRAM1PAGE1
FIR_COFF:
INTRAM2PAGE1
FIR_BFR:
INTRAM3PAGE1
.stack:
B2BPAGE1
3、执行程序
------------------------------
0000:
0080FIR.ASM:
46:
75$,___text__,.text,_c_int00
0084start
0095FIR_TASK
00A0FIR_FILTER
00A5EEND,LOOP
00A7COFF_FIR,etext,___etext__
八、实验结果及分析
1、设置波形时域观察窗口,得到其滤波前后波形变化图
滤波前的波形输入
滤波前的波形输出
2、设置频域观察窗口,得到其滤波前后频谱变化图
滤波前频谱图
滤波后频谱图
九、设计总结
在这次DSP课程设计中,我受益匪浅!
这期间学到了更多CCS软件的知识,同时也对这个软件的操作更加熟悉。
用DSP实现FIR数字滤波,具有稳定性好、准确度高、灵活性好、不受环境影响等优点。
在完成这个设计的过程中我遇到了好多操作问题,好多次都想放弃,因为有了老师的悉心指导和同学的热心帮助,才能坚持把它完成了!
这也使我意识到合作的重要性,还有解决一个个难题后的喜悦,难以言表!
这次的DSP设计提到的不仅是我们的专业知识,还有一个大学生应该具有正确的学习、生活态度:
认真、严谨、坚持、交流等等。
“细节决定成败!
”再次被验证,特别是编程的时候。
任何一的小小的失误都会造成严重的后果。
同时学会了不找借口,遇到问题不找借口浪费时间,要细心认真地解决问题,更不能放弃,一定要坚持不懈的才能成功!