滤波器.docx

上传人:b****2 文档编号:20138646 上传时间:2023-04-25 格式:DOCX 页数:26 大小:475.17KB
下载 相关 举报
滤波器.docx_第1页
第1页 / 共26页
滤波器.docx_第2页
第2页 / 共26页
滤波器.docx_第3页
第3页 / 共26页
滤波器.docx_第4页
第4页 / 共26页
滤波器.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

滤波器.docx

《滤波器.docx》由会员分享,可在线阅读,更多相关《滤波器.docx(26页珍藏版)》请在冰豆网上搜索。

滤波器.docx

滤波器

成绩

 

课程设计报告

 

题目

课程名称

院部名称

专业

班级

学生姓名

学号

课程设计地点

课程设计学时

指导教师

金陵科技学院教务处制

【注:

根据课程设计大纲第四项具体要求撰写课程设计报告】

实验项目名称:

实验学时:

同组学生姓名:

实验地点:

实验日期:

实验成绩:

批改教师:

批改时间:

 

一、课程设计的目的和要求

要求通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,对DSP相关技术进行运用,掌握设计DSP系统的基本方法。

通过使用汇编语言或者C语言编写具有完整功能的图形处理程序,学会DSP和MATLAB相关工具的连接,在CSS里面输出相关波形和频谱图形,实现对混频数据进行的滤波的效果。

学会编制结构清晰、风格良好、数据结构适当的汇编或C语言程序,从而具备解决综合性实际问题的能力。

二、系统功能介绍及总体设计方案

1系统功能介绍

数字滤波器在各种数字信号处理中发挥着十分重要的作用,数字滤波器设计一直是信号处理领域的重要研究课题。

常用的数字滤波器有FIR滤波器和IIR滤波器,其中IIR数字滤波器因具有结构简单、占用存储空间少、运算速度快、较高的计算精度和能够用较低的阶数实现较好的选频特性等特点,得到了广泛应用。

DSP芯片有适合于数字信号处理的软件资源和硬件资源,是实现数字信号处理的重要途径。

目前所见文献,多数为滤波器的模型设计,所得结果也是在MATLAB等实验环境下模拟仿真完成的,带有很大的局限性。

本文讨论IIR数字滤波器在DSP上的实现思路,并对其实现方法进行了分析。

2基于DSP的FIR带通滤波器设计

在本设计中,使用MATLAB模拟产生合成信号,然后利用CCS进行滤波,设定模拟信号的采样频率为6400Hz,设计一个FIR带通滤波器,其参数为:

滤波器名称:

FIR带通滤波器

采样频率:

Fs=6400Hz

通带:

500Hz~1KHz

过渡带:

200Hz~500Hz,1KHz~1.4KHz

带内波动:

<0.5dB

阻带衰减:

-40dB以下

滤波器级数:

N=35

滤波器系数:

由MATLAB根据前述参数求得。

3总体设计方案流程图

因FDATool可直接设定滤波器阻带衰减参数,其交互式的设计环境,可以设计几乎所有的常规滤波器,因此,我们选择FDATool设计法来设计FIR带通滤波器,更为直观和方便。

如图1所示:

 

图1总体设计流程图(FIR)

三、主要内容和步骤

1概述

在本实验中使用MATLAB模拟产生信号,观察滤波前的时域波形和频域波形。

MATLAB仿真后,使用得到的滤波器参数,进行DSP编程,在DSP中实现FIR带通和IIR高通滤波,并使用CCS的频谱分析功能,查看DSP的滤波效果。

2整体操作步骤:

(1)打开FDATOOL,根据滤波要求设置滤波器类型、通带截止频率等相关参数的设置。

指定完设计参数后点击“DesignFilter”设计滤波器,生成滤波器系数。

(2)将生成的系数导出至MATLABWorkspace中,选择FDATool“FILE”菜单下的”Export”选项,运行MATLAB程序,得到.dat输入文件和.h头文件。

(3)将系数头文件导出至CCS中.在CCS中,编写相关汇编文件或者C语言文件,加载.out程序。

编译运行,可得到输入输出的相关波形和频谱。

3MATLAB程序流程图

如图3所示:

4CCS汇编程序流程图

如图4所示:

四、详细设计

1滤波器原理

数字滤波器是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。

一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程:

(4.1)

式中,x(n)为输入序列;y(n)为输出序列;

为滤波器系数;N为滤波器的阶数。

FIR滤波器的单位冲击响应h(n)是一个有限长序列。

若h(n)为实数,且满足偶对称或奇对称的条件,即h(n)=h(N-1-n)或h(n)=-h(N-1-n),则FIR滤波器具有线性相位特性。

偶对称线性相位FIR滤波器的差分方程为

(4.2)

式中,N为偶数。

在数字滤波器中,FIR滤波器具有如下几个主要特点:

FIR滤波器无反馈回路,是一种无条件稳定系统;

FIR滤波器可以设计成具有线性相位特性。

2DSP实现系数对称FIR滤波器方法

系数对称FIR滤波器具有线性相位的特性,在数据信号处理中应用十分广泛,常用于相位失真要求较高的场合。

采用线性相位响应可避免影响信号质量的波形失真。

设FIR滤波器N=36,若系数a(n)=a(N-1-n),则对称FIR滤波器,其输出方程为

(4.4)

从上述方程中可以看出,共需要18次乘法和35次加法,其乘法运算减少了一半。

对称FIR滤波器的实现方法:

在数据存储器中开辟两个N/2长度的循环缓冲区New和Old,分别存放N/2个新数据和老数据,如图4所示。

图4数据存储器

设置循环缓冲区指针:

AR1指向New区中的最新数据,AR2指向Old区中的最老数据。

在程序存储器中设置系数表,如图5所示。

图5程序存储器系数表

进行x(n)+x(n-35)加法运算,即(AR2)+(AR3)→AH,并修改数据指针,AR2+1→AR2,AR3-1→AR3。

累加器B清0,完成块操作,重复执行4次:

AH×系数

+(B)→B,修改系数指针,PAR+1→PAR;

(AR2)+(AR3)→AH,修改数据指针,AR2+1→AR2,AR3-1→AR3。

保存和输出结果,并修正数据指针,使AR2和AR3分别指向New区和Old区的最老数据。

形成两个首尾相邻的循环缓冲区。

用New区的最老数据替代Old区的最老数据,输入一个新数据替代New区中de1最老数据。

修正数据指针,使AR2指向New区的最新数据,AR3指向Old区的最老数据。

重复执行

~

步。

3FIR源代码及注释

3.1FIR.ASM汇编代码

.title"fir.asm"

.mmregs

.global_c_int00

;PA0.set0;writedataport

;PA1.set1;readdataport

size.set19

x_new.usect"NewData",19

x_old.usect"OldData",19

input.usect"input",512

output.usect"output",1

.bssy,1

.bsscount,1

.copy"coef1023.h";coeff1023文件

.text

_c_int00:

ld#0,a

stm#x_new,ar2

rpt#size-1

stla,*ar2+

stm#x_old,ar2

rpt#size-1

stla,*ar2+;清零

ld#y,DP

st#0,*(count)

stm#511,ar6;传送511+1次

stm#output,ar4;保存输出数据

stm#input,ar5

ssbxfrct;小数乘法

stm#size,bk;循环缓冲区长度=size

stm#-1,ar0

stm#x_new,ar2

stm#x_old+(size-1),ar3

mvdd*ar5+,*ar2+;数据存储器内部传送数据

FIR:

add*ar2+0%,*ar3+0%,a;送入A的高位AH=x(n)+x(2*size-1)

rptzb,#(size-1);b=0;下条指令执行SIZE次

firs*ar2+0%,*ar3+0%,coeff

;b=b+AH*a0,AH=x(n-1)+x(2*size-2)……循环SIZE次

sthb,@y;保存结果

sthb,*ar4+

mar*+ar2

(2)%;修正AR2,指向新缓冲区最老的数据

mar*ar3+%;修正AR3,指向老缓冲区最老的数据

mvdd*ar2,*ar3+0%;新缓冲区向老缓冲区传送一个数

mar*ar6+0;传送512个数据

banzdFIR,*ar6

;portrPA1,*ar2

mvdd*ar5+,*ar2;输入新数据至新缓冲区

nop

done:

bdone

.end

3.2FIR_v.asm复位向量文件

.title"fir_v.asm"

.ref_c_int00

.sect".vectors"

B_c_int00

.end

3.3Fir.cmd链接命令文件清单

MEMORY

{

PAGE0:

;程序存储器

EPROM:

org=0E00h,len=1000h;取名EPROM,起始地址E00H,长

;4K字

VECS:

org=0FF80H,len=0080h

PAGE1:

SPRAM:

org=0060h,len=0020h

DARAM:

org=0080h,len=1380h

}

SECTIONS

{

.text:

>EPROMPAGE0;.text段分配到程序存储器EPROM中

.data:

>EPROMPAGE0

.bss:

>SPRAMPAGE1

.vectors:

>VECSPAGE0

NewData:

align(128){}>DARAMPAGE1;把NewData段定位到一个128字

DARAM存储块的位置上

OldData:

align(128){}>DARAMPAGE1

input:

align(128){}>DARAMPAGE1

output:

align(128){}>DARAMPAGE1

}

3.4生成及修改过后的coeff1023.h系数头文件

4.MATLAB源代码及注释

FIRMATLAB源程序FIR.M

f11=5000;%/Hz

f12=10000;%/Hz

f13=11000;

f14=15000;

fs=48000;%/采样Hz

N=511%数据个数

T=1/fs;%采样周期

n=0:

N;

x11=0.9*sin(2*pi*f11*n*T);

x12=0.5*sin(2*pi*f12*n*T);

x13=sin(2*pi*f13*n*T);

x14=sin(2*pi*f14*n*T);

x_base=(x11+x12+x13+x14);

%待滤波信号波形

figure

(1)

plot(x_base)

%待滤波信号频谱

figure

(2)

yff=abs(fft(x_base))

df=n*(fs/N)

plot(df,yff)

%调用滤波器函数filter,以及FDATOOL产生的滤波器系数验证滤波效果

y_filtered=filter(B,1,x_base)

%Y=FILTER(B,A,X)

y_filted_fft=abs(fft(y_filtered));

%观察滤波后的波形与频谱

figure(3)

plot(y_filtered);

figure(4)

plot(df,y_filted_fft);

%将待滤波的数据经归一化与取整后转换为16位数据

xout=x_base/max(x_base);%归一化

xto_ccs=round(32767*xout)%取整

fid=fopen('F:

\fir\input1010.dat','w');%打开文件

fprintf(fid,'16511000\n');%输出文件头

fprintf(fid,'%d\n',xto_ccs);%输出

fclose(fid);

5硬件调试

在脱机(不接ccs)的情况下,可以首先进行实验的演示。

在SEED-DTK5416的实验选项的菜单下,选择滤波器实验一项。

等卸载程序后,可菜单操作,完成滤波器实验的演示。

通过LCD观察信号在滤波前后的变化。

五、实验过程

1实验步骤与内容

5.1FIR滤波器设计

具体步骤:

(一)FDATOOL设计法

(1)在命令窗口键入FDAtool命令,调出FDAtool界面,在FilterType选项中选Bandpass,在DesignMethod中选择FIR中选择Equiripple(等波纹)法。

在FilterOrder中选择MinimumOrder(最小阶数),这时MATLAB程序会根据所选择的滤波器类型自动使用最小阶数。

在FrequencySpecification选项中,将fs(采样频率)、fpass1和fstop1、fpass2和fstop2(过渡带)中分别键入6400Hz、200Hz和500Hz、1000Hz和1400Hz;再对MagnitudeSpecification(幅度设定),使Apass(带内波动)=0.5dB,Astop1、Astop1(阻带衰减)=40dB。

(2)点击下方的DesignerFilter(滤波器设计)即可得到所设计的FIR滤波器。

下图为利用滤波器设计和分析工具设计FIR滤波器界面。

图6FDATOOL设计FIR滤波器

设计完成后,可以通过主菜单选项Analysis来分析滤波器的幅频响应和相频响应特性。

点击Analysis中的MagnitudeResponse和PhaseResponse对幅频和相频响应进行分析,其输出的幅频和相频响应特性结果如图9。

图7FDATOOL设计FIR滤波器频率响应

图8FDATOOL设计FIR滤波器相位响应

分析:

在通带内呈线性相位,则系数对称,可用系数对称FIR滤波器方法来实现

图9FDATOOL设计FIR滤波器系数对称图

分析:

系数对称得到验证。

得到FIR滤波器的冲激响应系数的步骤如下:

(1)在主菜单中选择Targets到CodeComposerStudio(r)IDE命令,弹出ExporttoCodeComposerStudio(r)IDE窗口。

设置Numerator为B1023,Exportas选择为Signed16_bitinteger。

图10ExporttoCodeComposerStudio(r)IDE窗口的设置

(2)单击Selettarget按钮,选择目标DSP,这里选择C55xSimulator(TexasInstrumengts),单击OK确认。

FIR滤波器冲激响应系数将按默认名称COEFF1023.h显示出来。

图11FDATOOL设计FIR滤波器系数导入CCS设置界面

(二)CCS仿真

(1)对项目进行编译和链接:

把fir.asm、fir_v.asm、fir.cmd、coeff1023.h依次添加到项目后,点击Project-CompileFile,在项目编译成功之后点击Project-Build选项对该项目进行链接,生成*.out文件。

(2)装载可执行文件:

要让程序代码在DSP内部运行必需将生成的*.OUT文件装载到DSP内部,装载方法是点击:

File-LoadPrograme再选择生成的fir.out文件就可以将程序装载到DSP的内部存储器中。

图12装载可执行文件

(3)关联输入文件:

打开FIR.asm文件,把光标移到“stm#input,ar5”这一行,然后点击PorjectToolbar上的探针按钮

此步设置文件关联。

点击File——FileI/O,在弹出的对话框中点击AddFile,把input1010.dat添加进来,在Address栏中输入input,Lenth输入512(代表文件的输入地址即input在内存中的输入地址),选中”WrapAround”(表示输入文件中的数据是循环向DSP内存中输入的),下面是设置的界面:

图5.1选择input1010.dat图5.2设置地址、长度

点击“AddProbePoint”按钮,在弹出的对话框(图5.3),在上图中点击一下“FIR.asmline27-->NoConcection”然后在Connect下拉菜单中选择FILEIN:

E\fir\input1010.dat文件,最后点击Replace按扭,点击确定,再选择按下

按扭,如下图5.4所示。

这样就把input1010.dat文件与这个探针相关联了,以后程序运行到此探针处就会从input1010.dat文件中读取数据。

图5.3加探针图5.4传送数据

(4)运行程序并查看结果:

在View的Graph中单击Time/frequency出现graphpropertydialog框,如图5.5所示。

将显示类型,图形名称,起始地址,抽样点数,数据类型等分别进行设置,输出各种波形。

图5.5输入时域图

5.2实验过程中出现的错误及解决的办法

(1)MATLAB做程序滤波器时,采样频率设置的过小,截止频率大于采样频率的一半,运行的时候图形出现错误。

(2)MATLAB中滤波函数FILTER中的系数设置,可以通过MATLAB中HELP语句来辅助完成,得到的帮助提示如下:

>>helpfilter

FILTEROne-dimensionaldigitalfilter.

Y=FILTER(B,A,X)filtersthedatainvectorXwiththe

filterdescribedbyvectorsAandBtocreatethefiltered

dataY.Thefilterisa"DirectFormIITransposed"

implementationofthestandarddifferenceequation:

a

(1)*y(n)=b

(1)*x(n)+b

(2)*x(n-1)+...+b(nb+1)*x(n-nb)-a

(2)*y(n-1)-...-a(na+1)*y(n-na)

Ifa

(1)isnotequalto1,FILTERnormalizesthefilter

coefficientsbya

(1).

FILTERalwaysoperatesalongthefirstnon-singletondimension,

namelydimension1forcolumnvectorsandnon-trivialmatrices,

anddimension2forrowvectors.

[Y,Zf]=FILTER(B,A,X,Zi)givesaccesstoinitialandfinal

conditions,ZiandZf,ofthedelays.Ziisavectoroflength

MAX(LENGTH(A),LENGTH(B))-1,oranarraywiththeleadingdimension

ofsizeMAX(LENGTH(A),LENGTH(B))-1andwithremainingdimensions

matchingthoseofX.

FILTER(B,A,X,[],DIM)orFILTER(B,A,X,Zi,DIM)operatesalongthe

dimensionDIM.

Seealsofilter2and,intheSignalProcessingToolbox,filtfilt.

Overloadedfunctionsormethods(oneswiththesamenameinotherdirectories)

helpgf/filter.m

helpadaptfilt/filter.m

helpmfilt/filter.m

helpqfilt/filter.m

helpfints/filter.m

helpdfilt/filter.m

ReferencepageinHelpbrowser

docfilter

所以FILTER中A设置为1,而B矩阵由FDATOOL导入workplace中来完成。

(3)在.h文件中未定义COEFF标号,编译出错。

(4)编写CMD文件时,程序存储器PAGE1,必须用空格键格开,否则出现下列提示:

>>e:

\fir\fir.cmd,line4:

error:

syntaxerror

>>e:

\fir\fir.cmd,line4:

error:

MEMORYspecificationignored

编译出错。

(5)没有将系数导入到workplace中,在MATLAB中运行后只出现待滤波的波形和频谱。

即只出现两幅滤波前图。

(6)如果count设置错误,如设置89,即传送数据90次,则无滤波效果,应将count初值设为511。

(7)设置关联文件时,出现下列提示:

图5.6出错提示

应加载.OUT文件后再进行设置。

(8)编译时,出现下述警告:

warning:

entrypointsymbol_c_int00undefined

将程序_MAIN改成_C_INT00可改善,因程序总是默认从_C_INT00处开始执行。

5.3CCS程序运行后的各种输出结果

1FIR滤波器设计输出结果

(一)MATLAB程序运行结果:

(1)待滤波信号时域与频域图

图5.8待滤波信号时域图

图5.9待滤波信号频域图

(4)滤波后信号时域与频域图

图5.10滤波后信号时域图

图5.11滤波后信号频域图

分析:

从采样频率一半内3200Hz看,信号经滤波后存在700Hz,与衰减较大的300Hz,实现了预想的滤波功能。

(二)CCS仿真结果:

(1)滤波前信号时域波形

图5.12滤波前信号时域波形

分析:

图5.12为滤波前的信号,波形很杂乱,从时域上很难看出信号的周期性。

(2)滤波前信号频谱

图5.13滤波前信号的频谱

分析:

含100Hz、300Hz、700Hz与3000Hz的信号。

(3)滤波后信号时域波形

图5.14滤波后信号时域波形

分析:

图5.14为滤波前的信号,波形很有致,从时域上就能看出信号的周期性。

(4)滤波后信号频谱

图5.15波后信号频域波形

(5)滤波前后时域与

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1