基于DSP的数字滤波器的设计与仿真及利用DSP实现自适应滤波Word格式文档下载.docx
《基于DSP的数字滤波器的设计与仿真及利用DSP实现自适应滤波Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于DSP的数字滤波器的设计与仿真及利用DSP实现自适应滤波Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。
3.2操作步骤
(1)打开FDATOOL,根据滤波要求设置滤波器类型、通带截止频率、指定阶数、采样频率等。
指定完设计参数后单击按钮DesignFilter,生成滤波器系数。
(2)把生成的滤波器系数传到目标DSP。
选择菜单Targets->
ExporttoCodeComposerStudio(tm)IDE,打开ExporttoCHeaderFile对话框,选择Cheaderfile,指定变量名(滤波器阶数和系数向量),输出数据类型可选浮点型或32b,16b整型等,根据自己安装选择目标板板号和处理器号,单击OK,保存该头文件,需指定文件名(filtercoeff.h)和路径(保存在c:
\ti\myprojects\fir工程中)。
(3)修改CCS汇编程序,删掉数据前的所有文字,在开头加上.data,第二行加coeff.word,在每行的前面加上.word,比且把每行的最后的逗号去掉。
(4)编译汇编程序,如果有错误,按错误进行修改;
没错误,则往下执行。
(5)加载初始化DATA数据。
运行程序,查看输入输出波形,修改相应参数进行调试
第4章详细设计
在本实验中使用MATLAB模拟产生信号,观察滤波前的时域波形和频域波形。
MATLAB仿真后,使用得到的滤波器参数,进行DSP编程,在DSP中实现带通滤波,并使用CCS的频谱分析功能,查看DSP的滤波效果。
MATLAB程序流程图如图4.1所示
图4.1MATLAB程序流程图
CCS汇编程序流程图如图4.2所示
图4.2CCS汇编程序流程图
第5章实验过程
5.1汇编语言实验步骤与内容
MATLAB辅助DSP实现FIR,其总体过程为在DSP中编写处理程序,在MATLAB中利用滤波器设计、分析工具(FDATOOL),根据指定的滤波器性能快速设计一个FIR,然后把滤波器系数以头文件形式导入CCS中,头文件中MATLAB辅助DSP实现FIR数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP程序并显示、分析处理后的数据。
使用该方法,便于采用汇编语言来实现程序。
头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也改变,方便了程序调试、仿真。
(1)在MATLAB中先编写程序,查看待滤波和已滤波的信号的时域和频域波形,如图5.1和图5.2所示。
图5.1待滤波信号的时域图图5.2待滤波信号的频域图
利用FDATOOL设计FIR滤波器的参数,操作步骤如图5.3所示。
图5.3FIR滤波器的参数
打开Export,把Numerator改为B,如图5.4所示。
图5.4Export设置
已滤波的信号的时域和频域波形,如图5.5和图5.6所示。
图5.5已滤波信号时域波形图图5.6已滤波信号频域波形图
MATLAB滤波器设计工具在完成FIR设计后,如图5.7所示,在Exportas中选择16bit符号整数输出,然后单击OK按钮。
生成fir.hC语言头文件。
将系数稍作修改,调整后拷贝到程序的系数初始化空间即可。
图5.7MATLAB输出数值转换图
(2)在CCS中编写汇编语言程序,进行调试,实现带通滤波的功能。
在CCSIDE中建立LHM.pjt工程,用汇编语言编写处理主程序fir.asm。
另外根据板上的存储器配置方式,编写存储器配置文件fir.cmd文件,将MATLAB生成的LHM.h和input1.dat文件拷贝到LHM.pjt工程文件夹下,进行编译、链接,生成可执行文件LHM.out。
(3)加载初始化data数据,图5.8所示。
图5.8data初始化图
运行程序,查看输入输出波形,修改相应参数进行调试。
5.2实验过程中出现的错误及解决的办法
(1)在MATLAB程序设计中,采样频率设置的过小,截止频率大于采样频率的一半,运行的时候图形出现错误。
(2)FIR.m中的采样频率要和开始设置时的采样频率一致,否则结果会出现偏差。
(3)在CCS中未定义标号,程序运行错误。
(4)在.h文件中未把coeff顶格写,编译时出现错误。
(5)未将fir.h和input.dat文件考入工程文件中。
(6)间接寻址过程中,程序中丢失。
(7)在View的Graph中单击Time/frequency出现graphpropertydialog框,未修改抽样点数。
显示的图形出现差异
5.3CCS程序运行后的各种输出结果
在View的Graph中单击Time/frequency出现graphpropertydialog框。
将显示类型,图形名称,起始地址,抽样点数,数据类型等分别进行设置,输出各种波形。
输出滤波前的信号时域波形。
首先,设置如图5.9所示,输出滤波前的信号时域波形。
图5.9Graphpropertydialog设置框图
单击OK后生成如下图5.10波形。
图5.10滤波前信号波形图
图5.10为滤波前的信号,波形很杂乱,从时域上很难看出信号的周期性。
修改相应设置,输出如图5.11所示滤波前信号频谱。
图5.11滤波前信号频谱波形图
经过滤波后,时域波形频谱波形如图5.12和5.13所示。
图5.12滤波后信号时域波形图
图5.13滤波后信号频谱图
由上述的所有截图可知,输入参数中,通带截止频率和阻带截止频率是比较重要的两个参数,不宜过小,过小滤掉的高频成分太多,很难还原出远波形的形状,也不宜过大,过大滤波效果欠佳。
在本课程设计中,通带截止频率选用4000Hz,阻带截止频率选用4500Hz,因此,显示图形时的,时域显示的抽样点数为1024,频域显示的带宽为0.5Hz。
对比滤波前后信号的时域图5.10和5.12、频谱波形图5.11和5.13可以知道,滤波前的时域信号的波形图的波形很杂乱,很难看出信号的周期性,滤波后周期性也相对的明显起来了;
滤波前信号分布在整个频带上,滤波后阻带范围内的基本被滤掉,这些都可以从上述截图看出。
附件:
源程序清单
用线性缓冲区实现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
.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
.bssy,1
xn.usect“xn”,7
b0.usect“b0”,7
PA0.set0
PA1.set1
table:
.word4*32768/10
.word5*32768/10
.word6*32768/10
.word7*32768/10
.text
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:
MAC*AR2+0%,*AR3+0%,A
STHA,@y
PORTW@y,PA0
BDFIR2
PORTRPA1,*AR2+0%
汇编程序清单
lhm.h文件内容:
.data
coeff.word-85,-64,-61,-36,8,62,110,136,131
.word96,42,-11,-44,-44,-11,39,85,106
.word88,37,-29,-83,-101,-73,-7,70,124
.word131,82,-5,-96,-151,-144,-72,37,140
.word191,162,61,-76,-191,-231,-174,-35,132
.word256,278,180,-7,-208,-337,-330,-176,72
.word316,445,392,156,-178,-475,-599,-470,-108
.word361,745,857,594,-6,-748,-1336,-1456,-893
.word386,2192,4154,5816,6768,6768,5816,4154,2192
.word386,-893,-1456,-1336,-748,-6,594,857,745
.word361,-108,-470,-599,-475,-178,156,392,445
.word316,72,-176,-330,-337,-208,-7,180,278
.word256,132,-35,-174,-231,-191,-76,61,162
.word191,140,37,-72,-144,-151,-96,-5,82
.word131,124,70,-7,-73,-101,-83,-29,37
.word88,106,85,39,-11,-44,-44,-11,42
.word96,131,136,110,62,8,-36,-61,-64
.word-85
Fir.asm内容:
.title"
fir.asm"
.mmregs
.global_c_int00
ORDER.set154
D_LEN.set1024;
TheLengthofInputData
xn.usect"
xn"
(ORDER-1)
a0.usect"
a0"
input.usect"
input"
D_LEN
output.usect"
output"
D_LEN
.copy"
HM.h"
;
Getcoefsfrom"
coef.h"
.text
.asgAR0,FIR_INDEX
.asgAR2,FIR_DATA
.asgAR3,FIR_COEF
.asgAR5,DATA_IN
.asgAR6,DATA_OUT
_c_int00:
SSBXFRCT
STM#a0,FIR_COEF;
Copya0(coefs)toFIR_COEF(AR3)
RPT#ORDER-1
MVPD#coeff,*FIR_COEF+
STM#1,FIR_INDEX
STM#xn,FIR_DATA;
Copyxn(data)toFIR_DATA(AR2)
RPTZA,#ORDER-1
STLA,*FIR_DATA+
STM#(xn+ORDER-1),FIR_DATA
STM#(a0+ORDER-1),FIR_COEF
STM#input,DATA_IN;
Getdatafrom"
STM#output,DATA_OUT;
Writedatato"
STM#D_LEN-1,BRC
RPTBDnext-1
STM#ORDER,BK
LD*DATA_IN+,A
FIR:
STLA,*FIR_DATA+%
RPTZA,(ORDER-1)
MAC*FIR_DATA+0%,*FIR_COEF+0%,A;
FIRS
STHA,*DATA_OUT+
next
FIR_END:
BFIR_END
.end
FIR.m的程序如下:
fs=40000;
%/采样Hz
N=1024%数据个数
T=1/fs;
%采样周期
n=0:
N-1;
df=n*(fs/N)%待滤波信号波形
xin=randn(1,1024)
figure
(1)
plot(xin)%待滤波信号频谱
xinff=abs(fft(xin));
figure
(2)
plot(df,xinff)%滤波后信号波形
y_filter_out=filter(B,1,xin)%Y=FILTER(B,A,X)
figure(3)
plot(y_filter_out)%滤波后信号频谱
yff=fft(y_filter_out);
figure(4)
plot(df,yff)
xin=xin/max(xin);
%归一化
xto_ccs=round(32767*xin)%取整
fid=fopen('
input1.dat'
'
w'
);
%打开文件
fprintf(fid,'
16511000\n'
%输出文件头
%d\n'
xto_ccs);
%输出
fclose(fid);
DSP课程设计
实验报告
利用DSP实现自适应滤波
一、设计任务书……………………………………………………………2
二、设计内容………………………………………………………………2
三、设计方案、算法原理说明……………………………………………4
四、程序设计、调试与结果分析…………………………………………5
五、设计(安装)与调试的体会…………………………………………17
六、参考文献………………………………………………………………18
一、设计任务书
自适应滤波不仅能够选择信号,而且能够控制信号的特性。
自适应滤波器具有跟踪信号和噪声变化的能力,它的系数能够被一种自适应算法所修改。
利用DSP可以实时地对信号进行自适应滤波。
DSP利用直接存储器访问方式DMA采集数据时不打扰CPU,因此CPU可以对信号进行实时地滤波。
本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波。
1.设计要求及目标
基本部分:
(1)对DMA进行初始化;
(2)对A/D、D/A进行初始化;
(3)编写DMA通道传输程序,实现数据实时采集和实时地输出;
(4)设计子自适应滤波算法,或调用DSPLIB中的自适应函数,实现对信号的自适应滤波。
发挥部分:
(1)滤波后信号实时输出的同时,将数据存放在数据文件中;
(2)利用自适应滤波实现语音信号回波对消。
2.设计思路
首先利用DSP的DMA方式对外部信号进行实时采集,外部模拟信号先进行A/D转换,利用MCBSP的接收寄存器接收数据。
编写自适应滤波算法程序,或调用DSPLIB中的lms滤波函数,对信号进行自适应滤波。
滤波后信号存放数据区满发出中断,请求信号输出。
利用DMA方式将传输输出数据,经D/A转换后输出。
3.要求完成的任务
(1)编写C语言程序,并在CCS集成开发环境下调试通过;
(2)利用信号发生器产生输入信号,经DSP运算后正确地在示波器上显示;
(3)按要求撰写设计报告。
二、设计内容
按照实验要求,本实验与老师上课讲过是FIR滤波器实验有很多共同点。
我们从上课做过的实验的FIR_DMA.pjt出发,使其完成自适应滤波的功能。
1.DMA部分:
本实验利用DMA直接传输数据,利用DMA完成数据传输而不影响CPU,因此数据传输速度快。
C5402有6个可独立编程的DMA通道:
DMA0~DMA5,允许6个不同的DMA操作。
每个DMA通道受各自的5个16位寄存器控制:
●源地址寄存器DMSRC和目的地址寄存器DMDST:
指明了数据传输读取和写入的位置
●单元计数寄存器DMCTR:
规定DMA传送数据的个数(DMCTR值减1)
●同步事件和帧计数寄存器DMSEFC:
规定DMA传送数据的同步事件类型和传送一块数据所含帧信号的个数。
●传输模式控制寄存器DMMCR:
规定了DMA通道的传输模式。
2.自适应算法部分:
DSPLIB库是一个为C语言程序员开发TMS320C54x而建立的经过优化的DSP函数库。
包含50多采用汇编语言编写的常用信号处理程序,可以由C语言调用。
调用DSPLIB库函数时,在工程中要添加库文件54xdsp.lib,在C源程序中要包含dsplib.h头文件。
我们应用通过DSPLIB中的自适应函数dlms实现滤波,下面是dlms函数的相关描述。
shortoflag=dlms(DATA*x,DATA*h,DATA*r,DATA**d,DATA*des,DATAstep,ushortnh,ushortnx)
Argumentsx[nx]Pointertoinputvectorofsizenx
h[nh]Pointertofiltercoefficientvectorofsizenh
hisstoredinreversedorder:
h(n–1),...h(0)whereh[n]isatthelowestmemoryaddress.
Memoryalignment:
hisacircularbufferandmuststartinak-bitboundary(thatis,thekLSBsofthestartingaddressmustbezeros)wherek=log2(nh)
r[nx]Pointertooutputdatavectorofsizenx.rcanbeequaltox
dbuffer[nh]Pointertolocationcontainingtheaddressofthedelaybuffer
Memoryalignment:
thedelaybufferisacircularbufferandmust
startinak-bitboundary(thatis,thekLSBsofthestartingaddress
mustbezeros)wherek=log2(nh)
des[nx]Pointertoexpectedoutputarray
stepScalefactortocontrollearningcurverate=2*mu
nhNumberoffiltercoefficients.Filterorder=nh–1.nh>
=3
nxLengthofinputandoutputdatavectors
oflagOverflowflag
Ifoflag=1a32-bitoverflowhasoccurred
Ifoflag=0a32-bitoverflowhasnotoccurred
其中x指向输入向量,r指向输出向量,h为滤波向量,d指向延迟缓冲区,des指向期望输出向量,step为归一化因素,nh为滤波系数个数,nx为输出向量长度。
oflag=1表示有溢出;
oflag=0表示无溢出。
三、设计方案、算法原理说明
在许多DSP的应用场合,由于无法预先知道信号和噪声的特性或者它们是随时间变化的,仅仅用FIR和IIR两种具有固定滤波系数的滤波器无法实现最优滤波。
在这种情况下,必须设计自适应滤波器,以跟踪信号和噪声的变化。
自适应滤波器的特性变化是由自适应算法通过调整滤波器系数来实现的。
一般而言,自适应滤波器由两部分组成,一是滤波器结构,二是调整滤波器系数的自适应算法。
图1示出了自适应滤波器的一般结构。
自适应滤波器的结构采用FIR或IIR结构均可,由于IIR滤波器存在稳定性问题,因此一般采用FIR滤波器作为自适应滤波器的结构。
由于FIR滤波器横向结构的算法具有容易实现、计算量少等优点,在对线性相位要求不严格、收敛速度不是很快的场合,多采用FIR作为自适应滤波器结构。
图二为FIR横向滤波器结构。
上图中,x(n)为输入信号,y(n)为输出信号,d(n)为参考信号或期望信号,e(n)则是d(n)和y(n)的误差信号。
自适应滤波器的滤波器系数受误差信号e(n)控制,根据e(n)的值和自适应算法自动调整。
自适应滤波器除包括一个按照某种结构设计的滤波器外,还有一套自适应的算法。
自适应算法是根据某种判断来设计滤波器的。
该算法包括最小均方算法LMS、最小高阶均方算法LMF、最小平方算法OLS、递推最小算法RLS等等。
由Widrow和Hoff提出来的最小均方误差(LMS)算法,因具有计算量小、易于实现、不依赖模型、性能稳健等优点而被广泛采用.本次实验采用的就是这种最小均方误差(LMS)算法。
基本的