有限冲激响应滤波器FIR算法硬件实现.docx
《有限冲激响应滤波器FIR算法硬件实现.docx》由会员分享,可在线阅读,更多相关《有限冲激响应滤波器FIR算法硬件实现.docx(14页珍藏版)》请在冰点文库上搜索。
有限冲激响应滤波器FIR算法硬件实现
有限冲激响应滤波器FIR算法硬件实现
一,摘要:
通过掌握A/D转换的根本过程和程序处理过程,有限冲激响应数字滤波器的根底理论,模拟滤波器原理〔巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器〕,数字滤波器系数确实定方法,设计低通FIR滤波器熟悉FIR滤波器及其参数的调整,通过对采样值进展计算产生混频波形,滤波器参数确定之后便可编写程序,利用CCS软件进展仿真。
二,引言:
有限冲击响应滤波器FIR算法窗函数法设计FIR数字滤波器的原理及方法,设计低通FIR滤波器。
通过掌握A/D转换程序处理,对采样值进展计算产生混频波形,对FIR滤波器参数调整。
用CodeposerStudio2.21进展仿真。
三,原理:
1.对单位冲激的输入信号的响应为有限长序列的数字滤波器。
它的主要特点是具有准确线性相位特性。
有限冲激响应数字滤波器一般实现为非递归型构造,因此,又称为非递归型数字滤波器。
非递归型滤波器具有绝对稳定的特性,而且,运算有限字长所产生的输出噪声也较小。
按所处理信号的类型可分为一维有限冲激响应数字滤波器和二维或多维有限冲激响应数字滤波器。
一维有限冲激响应数字滤波器 又称一维非递归型数字滤波器,处理单变量信号序列。
)。
设计一维有限冲激响应数字滤波器常用的方法有:
窗函数法、频率采样法和等波纹机助优化设计法。
设计有限冲激响应数字滤波器最直接的方法就是把无限冲激响应序列截短,得到有限长度的冲激响应。
设所要求的理想频率响应为Hd(),其单位冲激响应Hd(n)为Hd()的傅里叶反变换。
Hd(n)是非因果无限长序列。
为使得所设计的数字滤波器的有限冲激响应h(n)逼近hd(n),采用对hd(n)加窗的方法,即令h(n)=hd(n)w(n)
式中w(n)为有限长度窗序列。
由褶积定理可求得所设计的滤波器的频率响应。
根据要求设计低通FIR滤波器
要求:
通带边缘频率10kHz,阻带边缘频率22kHz,阻带衰减75dB,采样频率50kHz。
设计:
-过渡带宽度=阻带边缘频率-通带边缘频率=22-10=12kHz
-采样频率:
f1=通带边缘频率+(过渡带宽度)/2=10000+12000/2=16kHz
Ω1=2πf1/fs=0.64π
-理想低通滤波器脉冲响应:
h1[n]=sin(nΩ1)/n/π=sin(0.64πn)/n/π
-根据要求,选择布莱克曼窗,窗函数长度为:
N=5.98fs/过渡带宽度=5.98*50/12=24.9
-选择N=25,窗函数为:
w[n]=0.42+0.5cos(2πn/24)+0.8cos(4πn/24)
-滤波器脉冲响应为:
h[n]=h1[n]w[n]|n|≤12
h[n]=0|n|>12
-根据上面计算,各式计算出h[n],然后将脉冲响应值移位为因果序列。
-完成的滤波器的差分方程为:
y[n]=-0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5]
-0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9]
+0.11x[n-10]+0.28x[n-11]+0.64x[n-12]
+0.28x[n-13]-0.11x[n-14]-0.02x[n-15]
+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01x[n-19]
-0.002x[n-20]-0.002x[n-21]+0.001x[n-22]
程序流程图
2.模数转换工作过程
-模数转换模块接到启动转换信号后,按照设置进展相应通道的数据采样转换。
-经过一个采样时间的延迟后,将采样结果放入AD数据存放器中保存。
-等待下一个启动信号。
3.模数转换的程序控制
模数转换相对于计算机来说是一个较为缓慢的过程。
一般采用中断方式启动转换或保存结果,这样在CPU忙于其他工作时可以少占用处理时间。
设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。
4.混频波形产生
将接收到的两路AD采集信号进展相加,并对结果的幅度进展限制,从而产生混合后的输出波形。
实验中采用了同相位混频方法,也可修改程序完成异相混频法。
5.FIR滤波器工作原理
在进入FIR滤波器前,首先要将信号通过A/D器件进展模数转换,使之成为8bit的数字信号,一般可用速度较高的逐次逼进式A/D转换器,不管采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反响出来,还需经过数模转换,因此由FPGA构成的FIR滤波器的输出须外接D/A模块。
FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好,利用FPGA乘累加的快速算法,可以设计出高速的FIR数字滤波器。
1.程序设计Fir滤波器工作原理及参数计算:
通带边缘频率10kHz,阻带边缘频率22kHz,阻带衰减75kHz,采样频率50kHz。
设计:
-过渡带宽度=阻带边缘频率-通带边缘频率=22-10=12kHz
-采样频率:
F1=通带边缘频率+(过渡带宽度)/2=10000+12000/2=16kHz
Ω1=2Πf1/fs=0.64Π
--理想低通滤波器脉冲响应:
h1[n]=sin(nΩ1)/n/Π=sin(0.64Πn)/n/Π
--根据要求,选择布莱克曼窗,窗函数长度为:
N=5.98fs/过渡带宽度=5.98*50/12=24.9
--选择N=25,窗函数为:
W[n]=0.42+0.5cos(2лn/24)+0.8cos(4лn/24)
--滤波器脉冲响应为:
h[n]=h1[n]W[n]|n|≤12
h[n]=0|n|>12
--根据上面计算,各式计算出h[n],然后将脉冲响应值移位为因果序列。
--完成滤波器的差分方程为:
Y[n]=0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5]-0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9]+0.11x[n-10]+0.28x[n-11]+0.64x[n-12]+0.28x[n-13]-0.11x[n-14]-0.02x[n-15]+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01x[n-19]-0.002x[n-20]-0.002x[n-21]+0.001x[n-22]
6.源程序及注释
本实验程序在AD中断中对AD进展连续采样。
由于需要进展实时混频,所以交替转换通道0和通道1(ICETEK-F2812-EDU实验箱上ADCIN0和ADCIN1)。
汇编语言实现fir滤波器程序清单:
.title“FIR1.ASM〞
.mmregs
.defstart
x.usect“x〞,8
PA0.set0
PA1.set1
.data
COEF:
.word1*32768/10
.word2*32768/10
.word-4*32768/10
.word3*32768/10
.word-4*32768/10
.word2*32768/10
.word1*32768/10
.text
start:
SSBXFRCT
STM#x+7,AR2
STM#6,AR0
LD#x+1,DP
PORTRPA1,x+1
FIR1:
RPTZA,#6
MACD*AR2-,COEF,A
STHA,*AR2
PORTW*AR2+,PA0
BDFIR1
PORTRPA1,*AR2+0
.end
用循环缓冲区实现FIR滤波器程序清单:
.title“FIR2.ASM〞.mmregs
.defstart
.bssy,1
xn.usect“xn〞,7
b0.usect“b0〞,7
PA0.set0
PA1.set1
.data
table:
.word1*32768/10
.word2*32768/10
.word3*32768/10
.word4*32768/10
.word5*32768/10
.word6*32768/10
.word7*32768/10
.text
start:
SSBXFRCT
STM#b0,AR1
RPT#6
MVPDtable,*AR1+
STM#xn+6,AR2
STM#b0+6,AR3
STM#7,BK
STM#-1,AR0
LD#xn,DP
PORTRPA1,xn
FIR2:
RPTZA,#6
MAC*AR2+0%,*AR3+0%,A
STHA,y
PORTWy,PA0
BDFIR2
PORTRPA1,*AR2+0%
.end
命令文件FIR2.obj
vectors.obj
-oFIR2.out
-mFIR2.map
-estart
MEMORY
{
PAGE0:
EPROM:
org=0E000h,
len=1000h
VECS:
org=0FF80h,
len=0080h
PAGE1:
SPRAM:
org=0060h,
len=0020h
DARAM:
org=0080h,
len=1380h
}
SECTIONS
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
.bss:
>SPRAMPAGE1
xn:
align(8){}>DARAMPAGE1
b0:
align(8){}>DARAMPAGE1
.vections:
VECSPAGE0
五,硬件框图:
六,程序流程图:
七,调试过程及步骤
1,实验准备
〔1〕连接实验设备。
〔2〕准备信号源进展AD输入。
①取出试验箱附带的信号线
②用一根信号线连接试验箱左侧信号源的波形输出A端口和“A/D输入〞模块的“ADCIN0〞插座注意插头要插牢,到底。
这样,信号源波形输出A的输出波形即可送到ICETEK-F2812A板的AD输入通道0。
③用一根信号线连接试验箱左侧信号源的波形输出B端口和“A/D输入〞模块的“ADCIN1〞插座注意插头要插牢,到底。
这样,信号源波形输出B的输出波形即可送到ICETEK-F2812A板的AD输入通道1。
④设置波形输出A:
-向内侧按波形频率选择按钮,直到标有正弦波的指示灯
点亮。
-上下调节波形频率选择旋钮,直到标有100-1KHz的指示灯亮。
-调节幅值调整旋钮,将波形输出A的幅值调到适当位
置。
⑤设置波形输出B:
-向内侧按波形频率选择按钮,直到标有正弦波的指示灯
点亮。
-上下调节波形频率选择旋钮,直到标有1KHz-10KHz的指示灯亮。
-调节幅值调整旋钮,将波形输出B幅值调到适当位置。
2,设置CodeputerStudio2.21在硬件〔Emulator〕方式下行。
3,启动CodeputerStudio2.21选择菜单Debug>ResetCPU
4,翻开工程文件:
工程目录:
D\dsp\t8\mixerfir\mixerfir.pjt
5,编译、下载程序,选择菜单Debug->GoMain。
使程序运行到main函数入口位置。
6,观察窗口—翻开程序adc.c,查看源代码。
7,运行程序观察结果按CTR控制板的K6键,实现滤波显示,K7键实现混频显示,按K8键实现A,B两信号源分屏显示。
8,观察动态效果,调节信号源输出,观察滤波器输出。
改变信号源输入的波形,频率参数,观察动态结果。
9,退出CCS
八,实验结果
〔a〕有错误
〔b〕K6键
〔c〕K7键实现混频
〔d〕K8实现A,B的分频显示
九,结果分析
实验过程中遇到的问题及解决方法
1,硬件〔cc2000〕初始化时提示错误,未初始换成功。
原因有硬件的选着,以及DSP实验箱硬件连接是否完整,还有下载线及usb插孔。
变换电脑主机上的usb插孔后硬件配置成功
2,工程建立过程:
编译之前要将所需不同类型的工程文件全部加载,否那么及时程序没有错误编译也会失败.原因是这些文件有些包含头文件,有些那么负责为程序分配存储。
3,程序下载到f2812,首次运行时显示评上显示的是一组上下两行宽模糊频谱噪声并且已经吧原来的信号淹没如图〔a〕,原因分析,〔1〕先是排除显示屏问题〔先前实验能够正常显示〕;〔2〕认为信号源没有实现AD转换或者转换时效果不好〔排除〕;(3)认为程序段中输出显示有问题,加断点循环时发现程序运行到显示输出时进入死循环,原因:
flage==1;//修改地方,,,,,,
for(;;)
{
if(flage==1)
{flage=0;
LCDSetScreenBuffer(nScreenBuffer);
LCDCLS();//去除显示内存*/
if(keyflage==0)
循环时flage应该为1,是if语句正常运行
4,程序修改后能够正常显示波形图像,从实验结果图示可知,对于混频以及AB各自的波形能够正确的显示,但是滤波后波形会在衰减边缘处有冲激大幅度波形出现,分析原因,应该是元器件系统不可防止的引入的噪声引起
5,对程序滤波的准确度的测试,或者说滤波能力:
程序中给出的是对B2k以上的波形能够很好地滤除,但是相对于只有100—1k的波形A这种滤波器效果表达不出其精度,当把B波频率改为1k左右时滤波效果下降,滤出的波形边缘大幅度波形更多说明滤波效果不是很精细,这也和信号源产生的A波频率不够稳定与一定关系。
十,学习总结
通过学习DSP这门课程,我不仅掌握了关于数字信号处理硬件方面的一些理论知识,同时还学会了运用CCS软件进展简单的实验。
Dsp实验的意义就在于在实践中加深对知识的理解并学会运用硬件来实现一些工程问题,在实际操作过程中体会学习,提高遇到问题解决的能力,能够根据所遇到的问题现象分析器内部原因。
DSP有限冲激响应滤波器FIR算法硬件实现
专业:
电子信息工程
XX:
赵亚龙
学号: