dsp大作业 6713系列fir带通滤波.docx

上传人:b****5 文档编号:7477439 上传时间:2023-01-24 格式:DOCX 页数:17 大小:350.11KB
下载 相关 举报
dsp大作业 6713系列fir带通滤波.docx_第1页
第1页 / 共17页
dsp大作业 6713系列fir带通滤波.docx_第2页
第2页 / 共17页
dsp大作业 6713系列fir带通滤波.docx_第3页
第3页 / 共17页
dsp大作业 6713系列fir带通滤波.docx_第4页
第4页 / 共17页
dsp大作业 6713系列fir带通滤波.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

dsp大作业 6713系列fir带通滤波.docx

《dsp大作业 6713系列fir带通滤波.docx》由会员分享,可在线阅读,更多相关《dsp大作业 6713系列fir带通滤波.docx(17页珍藏版)》请在冰豆网上搜索。

dsp大作业 6713系列fir带通滤波.docx

dsp大作业6713系列fir带通滤波

DSP实现FIR带通滤波

邓露09084102负责编程,讨论算法

何世辉09084119负责写报告,讨论算法

一、实验目的实验目的实验目的实验目的

(1)了解FIR滤波器的原理及使用方法;

(2)了解使用Matlab语言设计FIR滤波器的方法;

(3)了解DSP对FIR滤波器的设计及编程方法;

(4)熟悉对FIR滤波器的调试方法;

二、实验内容

设计FIR带通滤波器,要求把输入的方波滤成正弦波,首先使用MATLAB设计滤波器,

然后得到该滤波器的系数,然后再用DSP设计。

三、实验原理

假设FIR滤波器的冲击响应为h(0)、h

(1)、……、h(N-1),x(n)为滤波器的输入信号,则对应的滤波器输出由下面关系式决定:

一般只要实现上面的计算关系式就相当于将信号进行了滤波,从上面关系式我们可以看出,首先必须知道FIR滤波器的冲击响应系数h(0)、h

(1)、……、h(N-1),这和知道IIR滤波器的参数一样,我们必须在高级语言中将这些滤波器的冲击响应系数得到,我们仍然使用Matlab语言实现这一过程。

将得到的冲击响应系数应用到DSP汇编语言程序中,实现上面的计算公式,就可以方便的实现FIR滤波器,完成实验的要求,达到滤波效果。

Fir滤波器原理:

FIR(FiniteImpulseResponse)滤波器:

有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。

因此,FIR滤波器在通信、图像处理等领域都有着广泛的应用。

FIR滤波器工作原理

在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,使之成为8bit的数字信号,一般可用速度较高的逐次逼进式A/D转换器,不论采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换,再通过dsp进行滤波。

FIR的特点:

有限长单位冲激响应(FIR)滤波器有以下特点:

  

(1)系统的单位冲激响应h(n)在有限个n值处不为零  

(2)系统函数H(z)在|z|>0处收敛,极点全部在z=0处(因果系统)  (3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。

  设FIR滤波器的单位冲激响应h(n)为一个N点序列,0≤n≤N—1,则滤波器的系统函数为  H(z)=∑h(n)*z^-n  就是说,它有(N—1)阶极点在z=0处,有(N—1)个零点位于有限z平面的任何位置。

FIR滤波器基本结构:

  FIR滤波器有以下几种基本结构:

横截型

  (7.10)式的系统的差分方程表达式为  y(n)=∑h(m)x(n-m) (7.11)  很明显,这就是线性移不变系统的卷积和公式,也是x(n)的延时链的横向结构,如图4-11所示,称为横截型结构或卷积型结构,也可称为直接型结构。

将转置定理用于图4-11,可得到图4-12的转置直接型结构。

  图7.11FIR滤波器的横截型结构

级联型

  将H(z)分解成实系数二阶因子的乘积形式  (7.12)  其中[N/2]表示取N/2的整数部分。

若N为偶数,则N—1为奇数,故系数B2K中有一个为零,这是因为,这时有奇数个根,其中复数根成共轭对必为偶数,必然有奇数个实根。

图7-13画出N为奇数时,FIR滤波器的级联结构,其中每一个二阶因子用图4-11的横型结构。

  这种结构的每一节控制一对零点,因而再需要控制传输零点时,可以采用它。

但是这种结构所需要的系数B2k(I=0,1,2,k,=1,2,...,[N/2])比卷积型的系数h(n)要多,因而所需的乘法次数也比卷积型的要多。

  图9.13FIR滤波器的级联型结构

快速卷积结构

前一章谈到,只要将两个有限长序列补上一定的零值点,就可以用圆周卷积来代替两序列的线性卷积。

由于时域的圆周卷积,等效到频域则为离散傅立叶变换的乘积。

因而,如果  即将输入x(n)补上L—N1个零值点,将有限长单位冲激响应h(n)补上L—N2个零值点,只要满足L>=N1+N2—1,则L点的圆周卷积就能代表线性卷积,即  用DFT表示,则有  Y(k)=X(k)H(k)  因而有  其中  Y(k)=DFT[y(n)],L点  X(k)=DFT[x(n)],L点  H(k)=DFT[h(n)],L点  这样,我们就可得到图7.16的快速卷积结构,当N1,N2足够长时,它比直接计算线性卷积要快得多。

这里计算DFY和IDFT都采用快速傅立叶变换计算方法。

FIR滤波器设计过程

FIR滤波器设计总框图

FIR滤波器设计总框图如图3.1所示

图3.1FIR滤波器设计总框图

FIR滤波器设计的原理

设ai(i=0,1,2,…,N-1)为滤波器的冲激响应,输入信号为x(n),则FIR滤波器的输入输出关系为:

         

FIR滤波器的结构如图3.2所示:

图3.2FIR滤波器的结构

FIR滤波器的设计方法

循环缓冲算法:

对于N级的FIR滤波器,在数据存储器中开辟一个称之为滑窗的N个单元的缓冲区,滑窗中存放最新的N个输入样本。

每次输入新的样本时,一新样本改写滑窗中的最老的数据,而滑窗中的其他数据不需要移动。

利用片内BK(循环缓冲区长度)寄存器对滑窗进行间接寻址,环缓冲区地址首位相邻。

下面,以N=5的FIR滤波器循环缓冲区为例,说明循环缓冲区中数据是如何寻址的。

5级循环缓冲区的结构如图3.3所示,顶部为低地址。

图3.3循环缓冲区的结构

当第一次执行完

之后,间接寻址的辅助寄存器

指向x(n-4)。

然后,从I/O口输入数据x(n+1),将原来存放x(n-4)的数据存储单元改写为x(n+1)。

接着,进行第二次乘法累加运算,

,最后

指向x(n-3)。

然后从I/O口输入数据x(n+2),将原来存放x(n-4)的数据存储器单元改写为x(n+2)。

FIR滤波器的MATLAB实现

MATLAB是一种功能强、效率高、便于进行科学和工程计算的交互式软件包,它集数值分析、矩阵运算、信号处理和图形显示于一体,为用户提供了方便、友好的界面环境。

MATLAB中的工具箱(Toolbox)包含了许多实用程序。

它提供了多种FIR滤波器设计方法。

4.1用fir1函数设计FIR滤波器

fir1函数用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位FIR数字滤波器的设计。

具体语法如下:

b=fir1(n,Wn)

b=fir1(n,Wn,‘ftype’)

b=fir1(n,Wn,Window)

b=fir1(n,Wn,‘ftype’,Window)

其中n为滤波器的阶数;Wn为滤波器的截止频率;ftype为用来决定滤波器的类型,当ftype=high时,可设计高通滤波器;当ftype=stop时,可设计带阻滤波器。

Window为用来指定滤波器采用的窗函数类型,Window参数可采用的窗口函数有:

Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗,从而得到滤波器的系数。

4.2用fir2函数设计FIR滤波器

fir2函数用来设计有任意频率响应的各种加窗FIR滤波器。

具体语法如下:

b=fir2(n,f,m)

b=fir2(n,f,m,Window)

b=fir2(n,f,m,npt)

b=fir2(n,f,m,npt,Window)

b=fir2(n,f,m,npt,lap)

b=fir2(n,f,m,nptt,lap,Window)

其中n为滤波器的阶数;f为频率点矢量;m为幅度点矢量;Window用来指定所使用的窗函数类型,默认值为汉明(Hamming)窗;npt用来指定fir2函数对频率响应进行内插的点数;lap用来指定fir2函数在重复频率点附近插入的区域大小,从而得到滤波器的系数。

 

4、实验步骤

1、Matlan语言编程可以使用Matlab语言下的FDA工具箱设计FIR滤波器。

clc;clear;closeall;

t=-8:

0.1:

8;

y=square(t);

figure

(1);

plot(t,y);

grid

ylim([-33]);

wn=Hamming(50);

fc1=2200;fc2=2279;%阻带频率

ft=46500;%抽样频率

wc1=2*fc1/ft;

wc2=2*fc2/ft;

B=fir1(49,[wc1,wc2],wn);

figure

(2);

Freqz(B,1);

X=fftfilt(B,y);

figure(3);

subplot(2,1,1);

plot(t,y,'g');title('滤波前的频谱');

subplot(2,1,2);

plot(t,X,'r');

程序实现一个最接近矩形的带通FIR滤波器;程序中使用的Matlab内部函数有linspace、gremez、freqz、freqzplot等,关于这些函数的说明请参考Matlab的帮助文件。

从图中可以看出,带通宽度基本上接近矩形,滤波器的最大纹波系数小于0.1,阻带很大。

原始信号为方波

由此可以得到滤波器参数:

0.0034,0.0050,0.0068,0.0088,0.0105,0.0115,0.0110,0.0083,0.0031,-0.0048

-0.0147,-0.0258,-0.0365,-0.0451,-0.0501,-0.0501,-0.0443,-0.0253,-0.0327,-0.0161,-0.0040

0.0253,0.0455,0.0620,0.0728,0.0766,0.0728,0.0620,0.0455,0.0253,-0.0040-0.0161,-0.0327,-0.0443,-.0.0501,-.0.0501,-0.0451,-0.0365,-0.0258,-0.0147,-0.0048

0.031,0.0083,0.0110,0.0115,0.0105,0.0088,.0068,0.0050,0.0034

滤波后的波形

DSP系统的构成

一个典型的DSP系统如图2.1示。

图2.1典型的DSP系统

图2.1是一个用DSP做信号处理的典型框图。

由于DSP是用来对数字信号进行处理的,所以首先必须将输入的模拟信号变换为数字信号。

于是先对输入模拟信号进行调整,输出的模拟信号经过A/D变换后变成DSP可以处理的数字信号,DSP根据实际需要对其进行相应的处理,如FFT、卷积等;处理得到的结果仍然是数字信号,可以直接通过相应通信接口将它传输出去,或者对它进行D/A变换将其转换为模拟采样值,最后再经过内插和平滑滤波就得到了连续的模拟波形模拟信号。

当然,图中的有些环节并不是必需的。

如A/D转换,如果输入的是数字信号,就可以直接交给DSP进行运算

DSP系统的特点及设计过程 

由于数字信号处理系统是以数字信号处理理论为基础,所以具有数字信号处理的全部优点:

(1)接口方便

DSP系统与其它以数字技术为基础的系统或设备都是相互兼容的,比模拟系统与这些系统接口要容易的多。

(2)编程方便

DSP系统中的可编程DSP芯片可以使设计人员在开发过程中灵活方便的进行修改和升级,可以将C语言与汇编语言结合使用。

(3)具有高速性

DSP系统的运行较高,最新的DSP芯片运行速度高达10GMIPS以上。

(4)稳定性好

DSP系统以数字处理为基础,受周围环境,如噪声、温度等的影响小、可靠性高;

(5)精度高

例如16位数字系统可以达到10-5的精度;

(6)可重复性好

模拟系统的性能受元件参数性能变化影响大,而数字系统基本不受影响,更便于测试、调试和大规模生产。

(7)集成方便

DSP系统中的数字部件有高度的规范性,便于大规模生产。

当然DSP也存在一定的缺点。

例如,对于一些简单的信号处理任务,如与模拟交换线的电话接口,若采用DSP则使成本增加。

另外,DSP系统中的高速时钟通常在几十兆赫,可能带来高频干扰和电磁泄漏等问题,而且DSP的功率消耗在系统中也是较大的。

此外,DSP技术发展得很快,数学知识要求多,开发和调试工具还很不完善。

虽然DSP系统还存在一些缺点,但是随着近两年来DSP技术突飞猛进的发展,成本的下降,很多问题都得到了缓解。

其突出的优点已经使其在通信、语音、图像、雷达、生物医学、工业控制、仪器仪表等许多领域得到越来越广泛的应用。

一般来说DSP的设计过程应遵循一定的设计流程,如图2.2示。

图2.2DSP基本设计流程

CCS开发环境

本节将介绍CCSCodeComposerStudio的基本开发环境、软件开发过程、CCS组件。

CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,能够加速开发进程,提高工作效率。

2.3.1CCS概述 

CCS全称是CodeComposerStudio它提供了基本的代码生成工具,具有一定的调试、分析能力,在CCS下的程序开发过程如图2.4示

图2.4程序开发过程

CCS包括:

1、CCS代码生成工具

2、CCS集成开发环境IDE

3、DSP/BIOS插件程序和APIRTDX插件,主机接口和API等。

下面将着重介绍前两项。

2.3.1CCS集成开发环境 

调试DSP目标程序,它主要由几个主要的窗口组成:

工程组显示窗口、程序内容显示窗口、编辑信息提示窗口和主要工具栏。

另外,在编辑过程中还可以显示诸如存储器观察窗口、变量监视框、图形显示框等调试界面,他们为程序编写调试提供多种手段为软件开发提供了极大的方便。

图2.5就是基本编辑界面。

图2.5CCS基本编辑界面

在利用CCS编程的过程中,不可避免的要遇到如何将程序变量分配到内存中去的问题。

因为,即使DSP的存储空间比较大,速度也十分快,但是如果内存空间分配不当的话,还是会出现空间不够行速度下降,甚至程序跑飞的情况,这样会时程序调试起来十分麻烦。

所以,一定要分配好内存空间CCS提供了两种分配空间的方法:

利用cmd文件或rcp文件分配空间,其中cmd文件是纯文本格式的描述性的空间分配方式,它的优点是程序员对空间的可控制性较高,可以将不同的块分配到指定的地址,并规定长度。

但它对于初学者来说,要求对C5410的内存空间的分配有较清楚的认识,否则容易将数据分配到不该分配的地方,引起程序运行的冲突,甚至程序跑飞。

所以,一般在编程过程中,使用rcp文件对程序进行内存分rcp文件全称是recipe文件,这是一种图形化界面的内存分配文件。

对于一个新生成的工程组rcp文件的生成方法是:

选择CCS菜单

上的Tools项,选择linkerconfiguration项,将分配方式改为usethevisuallinker之后直接编译,编译信息提示窗口中会显示出错信息,提示找不到rcp文件,双击提示CCS会自动弹出rcp生成向导,按照要求选择rcp模板,就会生成这个工程对应的rcp文件,双击生成的rcp文件,通过visuallinker连接器可以打开这个文件。

当程序中新增加了变量后,在rcp文件中会出现Notyetplaced项,只要将其下的文件夹,根据类型拖动到run_view下的相应的数据存储器或程序存储器即可。

还可以选择用何种类型的存储器空间装载,通过观察存储空间以使用的状况自行分配空间,所以十分灵活,并且不会出现空间重叠的现象,避免了程序跑飞。

FIR滤波器的DSP实现

所选取的N=37,滤波器的算法为

y(n)=

x(n)+

x(n-1)+

x(n-2)+···+

x(n-36)

根据我们所选择使用的循环缓冲区法可以编写得到FIR滤波器的源程序如下:

.globalinput,output,loop_end,fir_start,_c_int00

.bssinput,1024

.bssoutput,1024

.sect"coff_fir"

fir_start:

.word34,50,68,88,105,115,110,83,31,-48

.word-147,-258,-365,-451,-501,-501,-443,-253,-327,-161,-40

.word253,455,620,728,766,728,620,455,253,-40

.word-161,-327,-443,-501,-501,-451,-365,-258,-147,-48

.word31,83,110,115,105,88,68,50,34

fir_table.usect"fir_coff",512

data_buffer.usect"fir_bfr",512

.text

_c_int00

MVK.S1input,A0

;MVKH.L1input,A0

MVK.S11,A1

MVK.S1-1,A2

MVK.S28,B0

MVKL.S20x00000000,B1

MVKH.S20x00000000,B1

MVC.S2B1,AMR

loop:

MVK.S216,B1

loop1:

STW.D1A1,*A0++

SUB.L2B1,1,B1

NOP

[B1]Bloop1

NOP5

MVK.S216,B1

loop2:

STW.D1A2,*A0++

SUB.L2B1,1,B1

NOP

[B1]Bloop2

NOP5

SUB.L2B0,1,B0

[B0]Bloop

NOP5

MVK.S1fir_start,A3

MVK.S1fir_table,A4

MVK.S1data_buffer,A5

MVK.S264,B0

ZEROA2

loop5:

STW.D1A2,*A5++

NOP5

SUB.L2B0,1,B0

[B0]Bloop5

NOP5

MVK.S249,B0

loop3:

LDW.D1*A3++,A7

NOP5

STW.D1A7,*A4++

NOP5

SUB.L2B0,1,B0

[B0]Bloop3

NOP5

MVK.S215,B0

loopa:

STW.D1A2,*A4++

NOP5

SUB.L2B0,1,B0

[B0]Bloopa

NOP5

MVK.S1input,A0

MVK.S1output,A1

MVK.S1fir_table,A4

MVK.S1data_buffer+4,A5

MVKL.S20x00070005,B1

MVKH.S20x00070005,B1

MVC.S2B1,AMR

MVK.S2256,B0

loop6:

ZEROA3

LDW.D1*A0++,A2

NOP5

STW.D1A2,*--A5

NOP5

MVK.S264,B1

loop7:

LDW.D1*A4++,A9

NOP5

LDW.D1*A5++,A10

NOP5

MPY.M1A9,A10,A6

NOP

ADD.L1A3,A6,A3

NOP

SUB.L2B1,1,B1

[B1]Bloop7

NOP5

STW.D1A3,*A1++

NOP5

SUB.L2B0,1,B0

[B0]Bloop6

NOP5

.end

DSP连接命令文件

MEMORY

{

PAGE0:

PROG:

origin=0x00002000,length=0x0800

BUFF:

origin=0x00004000,length=0x0800

PAGE1:

DATA:

origin=0x00003000,length=0x2000

}

 

SECTIONS

{

.text:

{}>PROGPAGE0

.bss:

{}>DATAPAGE1

coff_fir:

{}>BUFFPAGE0

fir_coff:

{}>DATAPAGE1

fir_bfr:

{}>DATAPAGE1

}

 

 

实验小结:

通过本次实验使我对dsp的工作原理有了更新的理解,重新又熟悉了matlab软件的操作,以及用matlab对信号进行仿真处理。

对fir滤波的软件和硬件的有机组合有了新的见解和体会,同时对汇编语言也有了更进一步的提高,特别是dsp的寻址指令有了更全新的理解,对以后从事相关任务奠定了基础。

 

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

当前位置:首页 > 高中教育 > 其它课程

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

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