应用程序设计_第1页
应用程序设计_第2页
应用程序设计_第3页
应用程序设计_第4页
应用程序设计_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一页,共三十九页,2022年,8月28日6.1FIR滤波器的DSP实现

在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用中的基本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。

数字滤波器是DSP的基本应用,分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR。

本节主要讨论FIR滤波器的基本结构、设计方法和DSP实现方法。

第6章应用程序设计第二页,共三十九页,2022年,8月28日6.1FIR滤波器的DSP实现6.1.1

FIR滤波器的基本结构

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

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

x(n):输入序列,y(n):输出序列,ai、bi:滤波器系数,N:滤波器的阶数。

第6章应用程序设计第三页,共三十九页,2022年,8月28日6.1.1

FIR滤波器的基本结构

在式()中,若所有的ai均为0,则得FIR滤波器的差分方程:

(6.1.2)

对式()进行z变换,可得FIR滤波器的传递函数:

(6.1.3)

第6章应用程序设计第四页,共三十九页,2022年,8月28日6.1.1

FIR滤波器的基本结构

FIR滤波器的结构:

z-1z-1+x(n)y(n)x(n-1)x(n-N+1)b0b1bN-2bN-1z-1第6章应用程序设计第五页,共三十九页,2022年,8月28日6.1.1

FIR滤波器的基本结构

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

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

FIR滤波器可以设计成具有线性相位特性。第6章应用程序设计第六页,共三十九页,2022年,8月28日6.1FIR滤波器的DSP实现6.1.3

FIR滤波器的MATLAB设计

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

MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。

下面以标准频率响应设计法fir1和任意频率响应设计法fir2为例说明其使用方法。第6章应用程序设计第七页,共三十九页,2022年,8月28日6.1.3

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

1.

fir1函数

语法:

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:用来指定滤波器采用的窗函数类型,

其默认值为汉明(Hamming)窗。

第6章应用程序设计第八页,共三十九页,2022年,8月28日使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(1)

采用汉明窗设计低通FIR滤波器

使用b=fir1(n,Wn)可得到低通滤波。0

Wn

1,

格式:

b=fir1(n,Wn)

第6章应用程序设计第九页,共三十九页,2022年,8月28日使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(2)

采用汉明窗设计高通FIR滤波器

在b=fir1(n,Wn,‘ftype’)中,当ftype=high时,可设计高通滤波器。

格式:

b=fir1(n,Wn,‘high’)第6章应用程序设计第十页,共三十九页,2022年,8月28日使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(3)

采用汉明窗设计带通FIR滤波器

在b=fir1(n,Wn)中,当Wn=[W1W2]时,可得到带通滤波器,其通带为W1<w<W2,W1和W2分别为通带的下限频率和上限频率。

格式:

b=fir1(n,[W1W2])第6章应用程序设计第十一页,共三十九页,2022年,8月28日使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(4)

采用汉明窗设计带阻FIR滤波器

在b=fir1(n,Wn,‘ftype’)中,当ftype=stop,Wn=[W1W2]时,fir1函数可得到带阻滤波器。

格式:

b=fir1(n,[W1W2],‘stop’)第6章应用程序设计第十二页,共三十九页,2022年,8月28日1.

fir1函数

(5)

采用其他窗口函数设计FIR滤波器使用Window参数,可以用其他窗口函数设计出各种加窗滤波器。

Window参数可采用的窗口函数有:

Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗。

例如,采用Bartlett窗设计带阻滤波器,其格式:

b=fir1(n,[W1W2],‘stop’,Bartlett(n+1))

第6章应用程序设计第十三页,共三十九页,2022年,8月28日1.

fir1函数

注意:用fir1函数设计高通和带阻滤波器时,所使用的阶数n应为偶数,当输入的阶数n为奇数时,fir1函数会自动将阶数增加1形成偶数。【例】

采用Hamming窗设计一个48阶FIR带通滤波器,通带为0.35<w<0.65。

解:采用fir1函数的程序格式:

b=fir1(48,[0.350.65

]);

【例6.1.2】设计一个FIR高通滤波器,使用具有30dB波纹的Chebyshev窗,其阶数为34,截止频率为0.48。

解:采用fir1函数设计高通滤波器的程序格式为

Window=chebwin(35,30);

b=fir1(34,0.48,‘high’,Window);第6章应用程序设计第十四页,共三十九页,2022年,8月28日6.1.3

FIR滤波器的MATLAB设计用来设计有任意频率响应的各种加窗FIR滤波器。2.

fir2函数

语法:

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)

第6章应用程序设计第十五页,共三十九页,2022年,8月28日2.

fir2函数

【例6.1.3】设计一个30阶的低通FIR滤波器,其截止频率为0.6。

解:采用fir2函数的程序格式:

f=[00.60.61];

m=[1100];

b=fir2(30,f,m);

在使用MATLAB设计FIR滤波器时,还可以使用freqz()和plot()函数。

freqz()函数:可求出传递函数的幅频响应和相频响应;

plot()函数:可绘出滤波器的幅频响应和相频响应曲线。

第6章应用程序设计第十六页,共三十九页,2022年,8月28日2.

fir2函数

~例6.1.3中,若希望得到滤波器的特性,可使用freqz()函数,其格式:

freqz(b,1,512)

得滤波器的特性如图。

第6章应用程序设计第十七页,共三十九页,2022年,8月28日2.

fir2函数

例6.1.1带通滤波器的特性第6章应用程序设计第十八页,共三十九页,2022年,8月28日2.

fir2函数

例6.1.2高通滤波器的特性第6章应用程序设计第十九页,共三十九页,2022年,8月28日2.

fir2函数

例6.1.3低通滤波器的特性第6章应用程序设计第二十页,共三十九页,2022年,8月28日6.1FIR滤波器的DSP实现6.1.4

FIR滤波器的DSP实现

FIR滤波器的输出表达式:

y(n)=b0x(n)+b1x(n-1)+…

+bn-1x(n-N+1)

()

bi为滤波器系数,x(n)为滤波器在n时刻的输入,y(n)为n时刻的输出。

基本算法:采用乘法累加运算。即不断地输入样本x(n),经过z-1延时后,再进行乘法-累加,最后输出滤波结果y(n)。

第6章应用程序设计第二十一页,共三十九页,2022年,8月28日1.

z-1算法的实现

(2)循环缓冲区法特点:

①在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本;

②从最新样本开始取数;

③读完最老样本后,输入最新样本来代替最老样本,而其他数据位置不变;

④用BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。

第6章应用程序设计第二十二页,共三十九页,2022年,8月28日(2)循环缓冲区法缓冲区:

数据存储器

顶层为低地址单元,存放最新样本;x(n)

底层为高地址单元,存放最老样本;x(n-7)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)

ARx指向最新样本单元。

ARx→算

法:计算过程:

①以ARx为指针,按顺序取数,并修改指针;

x(n)ARx→x(n-1)ARx→x(n-2)ARx→x(n-3)ARx→x(n-4)ARx→x(n-5)ARx→x(n-6)ARx→x(n-7)ARx→②每取1次数后,完成1次乘法累加计算;y(n)=y0=b0x(n)+0y(n)=y1=b1x(n-1)+y0y(n)=y2=b2x(n-2)+y1y(n)=y3=b3x(n-3)+y2y(n)=y4=b4x(n-4)+y3y(n)=y5=b5x(n-5)+y4y(n)=y6=b5x(n-6)+y5y(n)=y7=b5x(n-7)+y6第6章应用程序设计第二十三页,共三十九页,2022年,8月28日(2)循环缓冲区法数据存储器x(n)x(n-7)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)算

法:

计算过程:

②每取1次数后,完成1次乘法累加计算;③求得y(n)后,输入新样本替代最老样本;

x(n+1)x(n+1)④修改指针ARx,指向最新样本单元。

ARx→①求y(n):

取数顺序:x(n)……x(n-7)

最新样本:x(n+1)

ARx:指向x(n+1)单元

②求y(n+1):

取数顺序:x(n+1)……x(n-6)

最新样本:x(n+2)

ARx:指向x(n+2)单元

数据存储器x(n)x(n+1)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n+2)ARx→③求y(n+2):

取数顺序:x(n+2)……x(n-5)

最新样本:x(n+3)

ARx:指向x(n+3)单元

数据存储器x(n)x(n+1)x(n-1)x(n-2)x(n-3)x(n-4)x(n+3)x(n+2)ARx→第6章应用程序设计第二十四页,共三十九页,2022年,8月28日6.1.4

FIR滤波器的DSP实现2.

FIR滤波器的实现

’C54x提供的乘法-累加指令MAC和循环寻址方式,可使FIR数字滤波器在单周期内完成每个样值的乘法-累加计算。而每个样值的乘法-累加计算,可采用RPTZ和MAC指令结合循环寻址方式来实现。

为了实现对应项乘积运算,输入的样值x(n)和滤波系数bi必须合理的存放,并正确初始化存储块和块指针。样值x(n)和滤波系数bi的存放可用线性缓冲区或循环缓冲区实现。

第6章应用程序设计第二十五页,共三十九页,2022年,8月28日2.

FIR滤波器的实现

用循环缓冲区实现FIR滤波器

设N=7,FIR滤波器的算法:

y(n)=b0x(n)+b1x(n-1)+…+b5x(n-5)+b6x(n-6)DARAMy(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…x(n-5)x(n-6)DARAMb0b1b2b3b4b5b6yb0xn第6章应用程序设计第二十六页,共三十九页,2022年,8月28日

用循环缓冲区实现FIR滤波器

程序清单:

.title“FIR2.ASM”.mmregs.defstart.bssy,1xn.usect“xn”,7b0.usect“b0”,7PA0.set0PA1.set1.datatable:.word1*32768/10.word2*32768/10.word3*32768/10.word4*32768/10.word5*32768/10.word6*32768/10.word7*32768/10DARAMy(n-1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…b0b1b2b3b4…x(n-5)x(n-6)b5b6;源文件标题

;定义MMR寄存器符号名

;定义模块

;给y保留1个空间

y;给xn段保留7个空间

xn;给b0段保留7个空间

b0;PA0赋值为0

;PA1赋值为1

;从ROM的table定义数据;定义0.1;定义0.2;定义0.3;定义0.4;定义0.5;定义0.6;定义0.7ROMtable0.10.20.30.40.50.60.7第6章应用程序设计第二十七页,共三十九页,2022年,8月28日.textstart:SSBXFRCTSTM#b0,AR1RPT#6MVPDtable,*AR1+STM#xn+6,AR2STM#b0+6,AR3STM#7,BKSTM#-1,AR0LD#xn,DPPORTRPA1,@xnFIR2:RPTZA,#6MAC*AR2+0%,*AR3+0%,ASTHA,@yPORTW@y,PA0BDFIR2PORTRPA1,*AR2+0%.endDARAMy(n-1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…b0b1b2b3b4…x(n-5)x(n-6)b5b6yxnb0…A;设置小数乘法

;AR1指向b0

AR1→;设置传输次数

ROMtable0.10.20.30.40.50.60.7;系数传输至数据区

0.10.1AR1→0.20.2AR1→0.30.3AR1→0.40.4AR1→0.50.5AR1→0.60.6AR1→0.70.7AR1→;AR2指向x(n-6)单元

AR2→;AR3指向b6单元

AR3→;设置缓冲区长度

;设置双操作数增量

;设置页指针

;输入x(n)

x(n);A清0,设置迭代次数0000000000;双操作数乘法累加x(n-6)0.70.7x(n-6)+0AR2→AR3→x(n-5)0.60.6x(n-5)+AAR2→AR3→x(n-4)0.50.5x(n-4)+AAR2→AR3→x(n-3)0.40.4x(n-3)+AAR2→AR3→x(n-2)0.30.3x(n-2)+AAR2→AR3→x(n-1)0.20.2x(n-1)+AAR2→AR3→x(n)0.10.1x(n)+AAR2→AR3→;存储y(n)y(n);输出y(n);循环;输入最新x(n+1),修正AR2x(n+1)AR2→第6章应用程序设计第二十八页,共三十九页,2022年,8月28日链接命令文件:

FIR2.objvectors.obj-oFIR2.out-mFIR2.map-estartMEMORY{PAGE0:EPROM:org=0E000h,len=1000hVECS:org=0FF80h,len=0080hPAGE1:SPRAM:org=0060h,len=0020hDARAM:org=0080h,len=1380h}

;选定的目标文件

;生成FIR4的输出文件

;生成FIR4的存储器映像文件

;定义源程序的入口地址

;定义目标存储器空间

;第0页:程序存储器

;EPROM的起始地址:E000h

长度:4K

;VECS的起始地址:FF80h

长度:0080h

;第1页:数据存储器

;SPRAM的起始地址:0060h

长度:0020h

;DARAM的起始地址:0080h

长度:1380h

存储空间ROMRAMEPROM…………EPROM…0E0004k0EFFFVECS……VECS0FF8080h0FFEFSPRAM………SPRAM006020h007FDARAM………DARAM……00801380h13EF第6章应用程序设计第二十九页,共三十九页,2022年,8月28日链接命令文件:

SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1xn:align(8){}>DARAMPAGE1b0:align(8){}>DARAMPAGE1.vections:VECSPAGE0};在存储器中定义输出段的位置;text段定位在程序存储器即源程序位于程序存储器;系数区定义在程序存储器

;bss段定义在暂存器

;从xn起8个单元定义在DARAM;从b0起8个单元定义在DARAM;vections定义在VECS区第6章应用程序设计第三十页,共三十九页,2022年,8月28日6.1FIR滤波器的DSP实现6.1.5

FIR滤波器的设计实例设计一个FIR低通滤波器,其设计参数:滤波器阶数:N=40;截止频率:wp=0.35,

ws=0.4。

第6章应用程序设计第三十一页,共三十九页,2022年,8月28日6.1.5

FIR滤波器的设计实例

根据给定的设计参数,滤波器系数可由MATLAB中的fir2函数产生,函数调用格式:

1.由给定的设计参数确定滤波器的系数

f=[00.350.41];

m=[1100];

b=fir2(39,f,m)

利用freqz函数可绘制滤波器的幅频、相频特性,其格式:

freqz(b,512,1000)

第6章应用程序设计第三十二页,共三十九页,2022年,8月28日滤波器的频率特性:

1.由给定的设计参数确定滤波器的系数第6章应用程序设计第三十三页,共三十九页,2022年,8月28日

采用循环缓冲区实现FIR滤波器的源程序如下:

2.汇编源程序

.title“FIR.ASM”.mmregs.bssy,1K_FIR_BFFR.set40PA0.set0PA1.set1FIR_COFF_TABLE.usect“FIR_COFF”,40;定义数据存储空间D_DATA_BUFFER.usect“FIR_BFR”,40;定义数据存储空间.dataCOFF_FIR_START:.word-7*32768/10000,3*32768/10000

;b0,b1

.word14*32768/10000,10*32768/10000;b2,b3……….word3*32768/10000,-7*32768/10000;b38b39第6章应用程序设计第三十四页,共三十九页,2022年,8月28日

.text.defFIR_INIT.defFIR_TASKFIR_INIT:SSBXFRCT;设置小数乘法

STM#FIR_COFF,AR5;AR1指向b0单元

RPT#K_FIR_BFFR-1;设置传输次数

MVPD#COFF_FIR_START,*AR5+;系数bi传输至数据区

STM#D_DATA_BUFFER,AR4;D_DATA_BUFFER缓冲区清0

RPTZA,#K_FIR_BFFR-1STLA,*AR4+STM#(D_DATA_BUFFER+K_FIR_BFFR-1),AR4STM#(FIR_COFF_TABLE+K_FIR_BFFR-1),AR5第6章应用程序设计第三十五页,共三十九页,2022年,8月28日STM#-1,AR0;设置双操作数减量

LD#D_DATA_BUFFER,DP;设置页指针

PORTRPA1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论