dsp大作业 6713系列fir带通滤波Word格式文档下载.docx
《dsp大作业 6713系列fir带通滤波Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《dsp大作业 6713系列fir带通滤波Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
图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)
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++
[B1]Bloop2
SUB.L2B0,1,B0
[B0]Bloop
MVK.S1fir_start,A3
MVK.S1fir_table,A4
MVK.S1data_buffer,A5
MVK.S264,B0
ZEROA2
loop5:
STW.D1A2,*A5++
SUB.L2B0,1,B0
[B0]Bloop5
NOP5
MVK.S249,B0
loop3:
LDW.D1*A3++,A7
STW.D1A7,*A4++
SUB.L2B0,1,B0
[B0]Bloop3
NOP5
MVK.S215,B0
loopa:
STW.D1A2,*A4++
[B0]Bloopa
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
STW.D1A2,*--A5
MVK.S264,B1
loop7:
LDW.D1*A4++,A9
LDW.D1*A5++,A10
MPY.M1A9,A10,A6
NOP
ADD.L1A3,A6,A3
NOP
SUB.L2B1,1,B1
[B1]Bloop7
STW.D1A3,*A1++
SUB.L2B0,1,B0
[B0]Bloop6
.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:
fir_bfr:
实验小结:
通过本次实验使我对dsp的工作原理有了更新的理解,重新又熟悉了matlab软件的操作,以及用matlab对信号进行仿真处理。
对fir滤波的软件和硬件的有机组合有了新的见解和体会,同时对汇编语言也有了更进一步的提高,特别是dsp的寻址指令有了更全新的理解,对以后从事相关任务奠定了基础。