范文一:有限冲击响应滤波器 (FIR)
§4.5 [实验4.5] 有限冲击响应滤波器 (FIR) 实现
一、实验目的
1. 掌握FIR 滤波器的原理和窗函数设计法; 2. 掌握用C 语言编写DSP 程序的方法。
二、实验设备
1. 一台装有CCS 软件的计算机;
三、实验原理
数字滤波是DSP 的最基本的应用领域之一。对于许多应用来说,数字滤波一般具有如2. DSP 实验箱的TMS320C5416主控板; 3. DSP 硬件仿真器。
下的差分方程形式:
y (n )=∑a k x (n -k )+∑b k y (n -k )
k =0
k =0
N -1N -1
式中,X(n) 为输入序列,Y(n)为输出序列,A k 和B k 为滤波器系数,N 是滤波器的阶数。若式中所有的B k均为零,且通常把系数A k记为h k , 则有:
y (n )=∑h k x (n -k )
k =0
N -1
上式就是FIR 滤波器的差分方程了。FIR 滤波器的最主要的特点是没有反馈回路,因此它是无条件稳定系统。它的单位脉冲响应h(n)是一个有限长序列。由上面的方程可见,FIR 滤波算法实际上是一种乘法累加运算,它不断地输入样本x(n),经延时 (z1) ,做乘法累加,再
–
输出滤波结果 y(n)。
要设计一个FIR 滤波器就是要求出它的冲击响应系数h(n),设计方法主要有窗函数法和
频率抽样法,本实验要求掌握窗函数法,这也是最基本的方法。
理想的低通滤波器的频率响应Hd (w)是一个矩形,这意味着它在时域上是无限长的序
列,这在实际上是不可能实现的。因此我们要采取某种方法截断 Hd(n),可以用一个有限长度的窗函数序列w(n)与之相乘。这个窗函数序列的形状和长度都会对最后系统的频率响应特性产生影响,因此对窗函数的分析和选择是设计FIR 滤波器的关键问题所在。
本实验举了五种常用的窗函数为例,通过设置参数可以得到加上不同窗后的冲击响应
序列h(n),并且可以观察到其幅频响应图。
关于根据给定频率要求进行FIR 滤波器设计的详细原理,以及在求得符合要求的h(n)后如何对输入信号序列进行滤波,请读者参考数字信号处理的有关资料。
四、实验步骤
1. 复习有关FIR 滤波器的原理;
2. 在CCS 环境中打开本实验的工程(Ex4_5.pjt),
3.
编译DSP 芯片中;
并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件) 下载到
4. 阅读源代码,记下各种窗函数的公式; 5. 运行程序
(执行需要一定时间) ;
6. 选择view->graph->time/frequency… 。 设置对话框中的参数: 其中“Start Address”设为“hd ”,“Acquisition buffer size”和“Display Data size”都设为“21”(因为源程序中n=21),并且把“DSP Data Type”设为“32-bit floating point”,设置好后观察理想冲击响应序列的波形示意图,可与公式对照分析;
7. 观察其它序列的波形示意图,包括所用窗函数w ,加窗后响应序列h 和输出对数幅频响应db 的图形,这时的“Start Address”应分别设为“w ”和“h ”和“db ”,其中观察前两者时数据块大小设为“21”(同n 值),观察“db ”时数据块大小设为“300”(同l 值),所观察到的图形应大致如下面五组图所示;
m=1时:
矩形窗函数(w)
m=2时:
加窗后序列(h)
加窗后的幅频响应db
三角窗函数(w)
加窗后序列
(h)
m=3时:
加窗后的幅频响应
db
汉宁窗函数w
加窗后序列h
加窗后的幅频响应db
m=4时:
汉明窗函数w
加窗后序列h
加窗后的幅频响应db
m=5时:
布莱克曼窗函数w
加窗后序列h
加窗后的幅频响应db
8. 从1-5依次修改m 的值,按上面步骤观察各图形。
五、思考题
1. 总结窗函数法的设计步骤和关键问题。
范文二:有限冲击响应滤波器
DSP技术实验报告
实验名称: 有限冲击响应滤波器
,FIR,算法实验
姓 名:
学 号:
班 级: 通信,2,班
时 间: 2013.6.3
南京理工大学紫金学院电光系
一、 实验目的
1、掌握数字滤波器的设计过程
2、了解FIR的原理和特性
3、熟悉设计FIR数字滤波器的原理和方法 二、 实验原理
模拟信号进行FIR数字滤波流程:
系统初始化
设置定时器周期
定时器中断 触发ADC
ADC中断
CPU取得ADC结果
FIR数字滤 波
结束
三、实验内容
打开工程文件,找到FIR_filter.c 文件,根据FIR的算法公式,补充完整滤波
函数。
for(j=0;j
{
acc=0;
y0=0;
for(i=0;i
if(j+i<=m-1)>=m-1)>
{
y0=(long)h[i]*x[j+i];
acc=acc+y0;}
else break;
//补充语句,实现滤波功能
*y++=(short)(acc>>s);
由ADCINA2输入含宽带噪声方波(400Hz,1V),FIR滤波器参数不变。观察FIR
滤波器的信号波形和频谱。
四、小结与体会
通过本次实验,我们基本掌握数字滤波器的设计过程,了解FIR的原理和特
性,熟悉设计FIR数字滤波器的原理和方法。
范文三:实验二 有限冲击响应滤波器
实验一 有限冲击响应滤波器(FIR )算法实验
一、实验目的
(1)握用窗函数法设计 FIR 数字滤波器的原理和方法;
(2)熟悉线性相位 FIR 数字滤波器特性;
(3)了解各种窗函数对滤波器特性的影响。
二、实验设备
计算机, DSP 实验箱, ICETEK-USB5100仿真器。
三、实验原理
(1)有限冲击响应数字滤波器的基础理论;
(2) 模拟滤波器原理 (巴特沃斯滤波器、 切比雪夫滤波器、 椭圆滤波器、 贝塞尔滤波器) ;
(3)数字滤波器系数的确定方法。
(4)源程序及注释
.include 240x.h
.global start,FIR
.data
.include
N .set 32 ;32点 FIR 滤波
DPTRI .set 8000h ; 输入波形地址
DPTRO .set 0a000h ; 输出波形地址
i .set 1024 ; 输入波形点数
.sect
b start
.bss buff,N ; 系数缓存
.bss input,1 ; 当前输入数据
.bss output,1 ; 当前输出数据
.text
start:
ldp #0e0H
splk #6fH,WDCR
splk #5555H,WDKEY
splk #0aaaaH,WDKEY ; 关闭看门狗中断
splk #81feH,SCSR1 ; 设置 DSP 运行频率 40m
ldp #buff
splk #0,input
splk #0,output
mar *,ar0
lar ar0,#buff
zac ;acc 低 16位清 0
rpt #N-1 ; 循环 32次
sacl *+ ; 系数缓存清零
lar ar2,#DPTRI ;ar2->输入存储区
lar ar3,#DPTRO ;ar3->输出缓冲区
lar ar7,#i ;ar7=处理波形点数
mar *,ar2 ; 指定当前辅助存储器为 ar2
done: lacl *+ ; 读入当前输入值
sacl input
sacl buff ; 存入系数缓存
call FIR ; 调用滤波子程序完成滤波处理
mar *,ar3
sach output,1
sach *+,1,7 ; 滤波后的结果右移 1位存到输出缓冲区 banz done,*-,2 ; 点数 -1,如未处理完循环
b $
; 子程序完成 32点 FIR 滤波
FIR: mar *,ar1
lar ar1,#buff+N-1
mpyk #0 ; 乘法器清零
zac ; 累加器请零
rpt #N-1 ; 计算 32个累加和
macd coef,*- ; 系数相乘、累加运算
apac
ret
.end
四、实验内容
1、编译并下载程序
2、打开观察窗口
选择菜单“ View ” 、 “ Graph ” 、 “ Time/Frequency… ”进行如下设置:
选择菜单“ View ” 、 “ Graph ” 、 “ Time/Frequency… ”进行如下设置:
在弹出的图形窗口中单击鼠标右键,选择“ Clear Display” 。
1、 设置断点
在标号“ done ”语句设置软件断点(Toggle breakpoint) 。
选择菜单“ File ” 、 “ Data ” 、 “ Load … ” ;选中 F:\ FIR目录中的文件 sine.dat ,
单击“打开”按钮;在“ Load File into Memory”窗口中的“ Address ”项中输入 DPTRI ,在 “ Length ”项中输入 1024,单击“ OK ”并等待读入数据。
2、 运行并观察结果
① 选择“ Debug ”菜单的“ Animate ”项,或按 F12键运行程序;
② 观察“ Input ” 、 “ Output ”窗口中时域图形;观察滤波效果;
③ 鼠标右键单击 “ Input ” 和 “ Output ”窗口,选择 “ Properties … ” 项,设置 “ Display Type ”为“ FFT Magitude” ,再单击“ OK ”按钮结束设置;
④ 观察“ Input ” 、 “ Output ”窗口中频域图形;理解滤波效果。
3、 停止程序运行并退出。
五、实验结果
输入波形为一个低频率的正弦波与一个高频的正弦波叠加而成。
实验现象时域图:
频域图:
通过观察频域和时域图, 得知:输入波形中的低频波形通过了滤波器, 而高频部分则被 滤除。
实验三 数据存取实验
一、实验目的
(1)了解 TMS320LF2407的内部存储器空间的分配及指令寻址方式;
(2)学习用 CodeComposer 修改、填充 DSP 内存单元的方法;
(3)学习操作 TMS320LF240x 内存空间的指令。
二、实验设备
计算机, DSP 实验箱, ICETEK-USB5100仿真器。
三、实验内容
将第 0页数据存储区 60H~6FH中的数据转存到第 4页数据存储区 70H~7FH中。 四、实验流程图
五、调试
在程序最后一条语句之前设置断点, 然后采用全速运行, 用添加观察项的方法察看内存。 六、实验结果
察看第 0页数据存储区 60H~6FH中的内容与第 4页数据存储区 70H~7FH单元的内容
是否一致。
范文四:有限冲击响应滤波器(FIR)算法实验
淮阴师范学院物理与电子电气工程学院
D S P 课程设计报告
学生姓名 班 级 专 业 题 目
指导教师
许进
学 号
170907032
0907 电子信息工程
有限冲击响应滤波器(FIR )算法实验
潘建
2012 年 5 月
一、设计指标 1.1课题研究
随着集成电路技术的发展,各种新型的大规模和超大规模继承电路不断涌现集成电路技术与计算机技术结合在一起使得对数字信号处理系统功能的要求越来越强。DSP 技术基于VLSI 技术和计算机技术发展起来的一门技术。用可编程DSP 芯片实现数字滤波器可通过修改滤波器的参数十分方便的改变滤波器的特性,因此将通过DSP 设计平台来实现FIR 。本课题的研究将为今后设计DSP 核心部件的嵌入式系统集成提供技术准备。
1.2研究要求
1)掌握用窗函数法设计FIR 数字滤波器的原理和方法; 2) 熟悉线性相位FIR 数字滤波器特性;
3)了解各种窗函数对滤波特性的影响。 二、 总体设计方案 2.1设计要求
利用C 语言在CCS 环境中编写一个FIR 滤波器程序,并能利用以设计好的滤波器对常用信号进行滤波处理。
2.2 CCS开发环境
CCS加速和增强了实时,嵌入信号处理的开发过程,它提供了配置,构建,调试,跟踪和分析程序的功能。CCS 功能如图2.2.1所示,CCS 基本开发环境如图2.2.2所示
图2.2.1 CCS功能
图2.2.2 CCS基本开发环境
2.3 设计思路
在TMS320C54X 系统开发环境CCS 下对FIR 滤波器的DSP 实现原理进行讨论。利用C 语言设计相应的滤波器,通过实验仿真,从输入信号和输出信号的时域和频域曲线可以看出在DSP 上实现的FIR 滤波器能完成预定的滤波任务。
2.4 设计方框图
三、设计原理分析 3.1 FIR滤波器的基本原理
设h (n )(n=0,1,2?N-1)为滤波器的冲击响应,输入信号x (n ),则FIE 滤波器就是实现下列差分方程:
式(1)是FIR 滤波器的差分方程。FIR 滤波器的最主要的特点就是没有反馈电路,因此它是无条件稳定系统。它的单位脉冲响应h (n )是一个有限长序列。
对(1)式进行Z 变换,整理后得FIR 滤波器的传递函数为:
所以FIR 滤波器的一般结构如图3.1.1所示:
图3.1.1 FIR滤波器的结构 3.2 FIR滤波器的设计方法
要设计一个FIR 滤波器就是要求出它的冲击响应系数h (n ),设计方法主要有窗函数法和频率抽样法。
理想的低通滤波器的频率响应Hd (w )是一个矩形,这意味着它在时域上是无限长的序列,这在实际上是不可能实现的。因此要采取某种方法截断Hd (n ),可以用一个有限长度的窗函数序列w (n )与之相乘。因此对窗函数的分析和选择是设计FIR 滤波器的关键问题。
3.3电路安装与调试过程 A .实验前准备
1) 正确完成计算机、DSP 仿真器和实验箱连接后,开关K9拨到右边,即仿真器选择连接右边的CPU :CPU2; 2)“A/D转换单元”的拨码开关设置: 拨码开关设置:
SW2拨码开关
3)检查:计算机、DSP 仿真器、实验箱是否正确连接,系统上电;
4)
置拨码开关S23的1、2拨到OFF ,用示波器分别观测模拟信号源单元的2号孔“信号源1”和“信号源2”输出的模拟信号,分别调节信号波形选择、信号频率、信号输出幅值等旋钮,直至满意,置拨码开关S23的1到ON ,两信号混频输出;
本样例实验程序建议:采用两路正弦波信号的混叠信号作为输入信号; 低频正弦波信号:幅值 5V,频率<20khz; 高频正弦波信号:幅值="" 2.5v,频率="">70KHz;
可在2号孔“信号源1”点用示波器观察混叠信号。 B.实验
启动CCS 2.0,Project/Open打开“Algorithm ”目录中“Exp02_cpu2”子目录下“Exp-FIR-AD.pjt ”工程文件;双击“Exp-FIR-AD.pjt ” 及“Source ”可查看各源程序;加载“Exp-FIR-AD.out ”;在主程序中,在flag = 0处设置断点;单击“Run ”运行程序,程序将运行至断点处停止;
用View / Graph / Time/Frequency打开一个图形观察窗口;设置观察图形窗口变量及参数为:采用双踪观察启始地址分别为x 和y ,长度为256的单元中数值的变化,数值类型为32位浮点型变量,这两个数组中分别存放的是经A/D转换后的输入混叠信号(输入信号)和对该信号进行FIR 滤波的结果;
单击“Animate ”运行程序,或按F10运行程序;调整观察窗口并观察滤波结果;
单击“Halt ”暂停程序运行,激活“Exp-FIR-AD.c ”的编辑窗口;
实验程序说明:该程序为51阶FIR 低通滤波器算法程序,采用矩形窗函数实现,数组h 和xmid 长度均为51,fs 为采样频率,fstop
为滤波器截止频率,可以修改以上参数
来改变滤波器性能。
重新“Rebuild All”后,重新加载,单击“Animate ”,可得到不同的实验结果。 实验结果:在CCS2.0环境,同步观察输入信号及其FIR 低通滤波结果。 3.4电路测试与使用说明 3.4.1FIR 程序参数说明 系统函数 H (z ) =∑b k Z -k
k =0M
对应的常系数线性差分方程:y (n ) =∑b k x (n -k )
k =0
M
程序参数说明:
输入信号:输入信号经A/D转换后,写入数组x ,长度256,32位浮点型; 输出信号:FIR 低通滤波器输出,写入数组y ,长度256,32位浮点型。 3.4.2系统程序代码
#pragma CODE_SECTION(vect,"vect")
#include "stdio.h" #include "math.h" #define pi 3.1415927
#define IMR *(pmem+0x0000)
#define IFR *(pmem+0x0001) #define PMST *(pmem+0x001D) #define SWCR *(pmem+0x002B) #define SWWSR *(pmem+0x0028) #define AL *(pmem+0x0008)
#define CLKMD 0x0058 /* clock mode reg*/
#define Len 256 #define FLen 51
double npass,h[FLen], x[Len], y[Len], xmid[FLen]; void firdes (double npass);
unsigned int *pmem=0; ioport unsigned char port8002; int in_x[Len]; int m = 0; int intnum = 0; double xmean=0; int i=0; int flag = 0; double fs,fstop,r,rm; int i,j,p,k=0;
void cpu_init() {
*(unsigned int*)CLKMD=0x0; //switch to DIV mode clkout= 1/2 clkin while(((*(unsigned int*)CLKMD)&01)!=0);
*(unsigned int*)CLKMD=0x27ff; //switch to PLL X 10 mode
PMST=0x3FA0; SWWSR=0x7fff; SWCR=0x0000; IMR=0; IFR=IFR; }
interrupt void int2() {
in_x[m] = port8002; in_x[m] &= 0x00FF; m++; intnum = m;
if (intnum == Len) {
intnum = 0;
xmean = 0.0;
for (i=0; i
xmean = in_x[i] + xmean;
}
xmean = 1.0*xmean/Len;
for (i=0; i
}
}
} for (i=0; i
void firdes(double npass)
int t;
{
}
if (t == ((FLen-1)/2)) h[t]=npass;
}
void set_int()
{
asm(" ssbx intm");
IMR=IMR|0x0004;
asm(" rsbx intm");
}
void main(void)
{
cpu_init();
fs = 250000;
fstop = 20000;
npass = fstop/fs;
for (i=0; i
{
}
for (t=0; t
firdes(npass);
set_int();
for(;;)
{
}
}
void vect()
{
asm(" .ref _c_int00"); /*pseudoinstruction*/
asm(" .ref _int2");
asm(" b _c_int00"); /* reset */
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
if (flag == 1) { flag = 0; /* set breakpoint here */ }
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* int0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* int1 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* tint0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* brint0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* bxint0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* dmac0 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* tint1 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* int3 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* hpint */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* bxint1 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* dmac4 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" rete"); /* dmac5 */
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
}
四、仿真图
1. 标准方波,频率为300Hz ,振幅为1000mv 。滤波前后的波形图和频谱图如下所示:
图 4.1.1标准方波波形图
图4.1.2标准方波滤波前频谱图
图4.1.3标准方波滤波后
图4.1.4标准方波滤波后频谱图
五、总结
在数字信号处理中,滤波占有极其重要的地位。FIR 滤波器以其优越的性能,在信号处理中占有很重要的地位,利用DSP 芯片实现FIR 数字滤波,不仅准确度高,执行速度快等特点,而且用程序可移植性好,实现行强,可以十分方便的改变滤波器特性。完成课程设计的过程中,很好的巩固和加深了对书本知识的学习,也深刻体会到DSP 技术应用领域的广泛和重要性,同时对专业知识有了进一步的认识。
这次课程设计实现了简单的FIR 数字滤波器的设计
参考文献
[1] 戴明桢等编著.TMS320C54X DSP 结构原理及应用. 北京:航空航天大学出版社,第2版,2007
[2] 胡广书编著. 数字信号处理理论,算法与实现。北京:清华大学出版社,2005;
[3] 卢山,田野,郭黎利 利用DSP 技术实现FIR 滤波器【期刊论文】-海南大学学报 2002
[4] 孙克梅 刘洋 数字滤波器在DSP 上的实现【期刊论文】-海南大学学报 2005
范文五:有限冲击响应FIR滤波器的设计
有限冲击响应 FIR 滤波器的设计 一、设计目的
1. 掌握数字滤波器的设计过程;
2. 了解 FIR 的原理和特性;
3. 熟悉设计 FIR 数字滤波器的原理和方法;
4. 学习 FIR 滤波器的 DSP 的实现原理;
5. 学习使用 CCS 的波形观察窗口观察输入 /输出信号波形和频谱变 化情况。
二、设计内容
1.通过 MATLAB 来设计一个低通滤波器,对它进行模拟仿真确定 FIR 滤波器系数;
2. 用 DSP 汇编语言及 C 语言进行编程,实现 FIR 运算,对产生的 合成信号,滤除信号中高频成分,观察滤波前后波形的变化。 三、总体设计方案
(一) . 设计原理:
FIR 数字滤波器是一种非递归系统,其传递函数为:
H(z)=Y(z)/X(z)=∑ b(n)z-n
由此可得到系统的差分方程为:y(n)=∑ h(i)x(n-i)
其冲击响应 h(n)是有限长序列,它其实就是滤波器系数向量 b(n),N为 FIR 滤波器的阶数。
为了使滤波器满足线性相位条件,要求其单位脉冲响应 h(n)为 实序列,且满足偶对称或奇对称条件,即 h(n)= h(N-1-n或 h(n)= -
h(N-1-n)。
这样,当 N 为偶数时,偶对称线性相位 FIR 滤波器的差分方 程表达式为:y(n)=∑ h(i)x(n-i)+x((N-1-n-i)
应用 MATLAB 设计 FIR 滤波器的主要任务就是根据给定的性 能指标设计一个 H (z ) , 使其逼近这一指标, 进而计算并确定滤波 器的系数 b(n),再将所设计滤波器的幅频响应、相频响应曲线作为 输出,与设计要求进行比较,对设计的滤波器进行优化,设计完 成之后将得到 FIR 滤波器的单位冲击响应序列 h(n)的各个参数值。 (二 ). MATLAB设计 FIR 滤波器的方法 :
用 MATLAB 设计 FIR 数字滤波器方法很多,最常用的有窗函 数法、最优化设计法等。
窗函数设计方法:
窗函数设计方法一般是基于直接程序设计法来设计标准频率响 应的, 可实现加窗线性 FIR 数字滤波器的设计 fir1是用来设计标准 频率响应的基于窗函数的 FIR 滤波器函数, 可实现加窗线性 FIR 的 设计,使用 fir1函数可设计标准的低通、高通、带通和带阻四种滤 波器; fir2是用来设计有任意频率响应的各种加窗线性 FIR 滤波器 函数。
利用 fir1 和 fir2两种函数可以设计有任意频率响应的各种加窗 线性 FIR 滤波器函数。滤波器系数包含在返回 b 中,可表示为 b(z)=b(1)+b(2) z-1+b(3) z-2+b(4) z-3+…… +b(n+1) z-n
fir1函数的使用格式 :
b= fir1(n,Wn),可得到低通滤波器;参数 n 为滤波器的阶数; Wn 为滤波器的截止频率;其中, 0≤ Wn ≤ 1,Wn=1相当于 0.5fs 。 当 wn=[W1 W 2]时,为带通滤波器,其通带为 W 1<>
b=fir(n,Wn,‘ ftype ’ ), 当 ftype=high时,可设计高通滤波器;当 ftype=stop时,可设计带阻滤波器。
b=fir1(n,Wn,Window),参数 Window 用来指定的窗函数类型,默 认值为 hamming 窗,参数可以使用的窗口函数有 boxcar hamming Bartlett blackman kasier 和 chebwin 。
B=fir1(n,Wn,‘ ftype ’ ,Window),ftype 参数用来决定滤波器的类 型;参数 Window 用来指定所使用的窗口数类型。
这里需要注意的是,用 fir1函数设计高通和低通滤波器时,所 使用的阶数 n 为偶数,当输入的阶数 n 为奇数时, fir1函数会自动将 阶数增加 1形成偶数。
Fir2函数的使用格式有以下几种:
B=fir2(n,f,m),参数 n 为滤波器的阶数。
B=fir2(n,f,m,Window),参数 f 为频率点矢量, f ∈ [0,1],对应于 0.5fs 。矢量 f 按升序排列,且第一个元素必须为 0,最后一个必须为 1,并可以包含重复的频率点。
B=fir2(n,f,m,npt),参数 m 为幅度点矢量, 在矢量 m 中包含了与 f 相对应的期望得到的滤波器幅度。
B=fir2(n,f,m,npt,Window),参数 Window 用来指定所使用的窗函
数类型,其默认为汉明窗。
B=fir2(n,f,m,npt,lap),参数 npt 用来指定 fir2函数对频率响应进行 内插的点数。
B=fir2(n,f,m,npt,lap,Window),参数 lap 用来指定 fir2函数在重复 频率点附近插入的区域大小。
(三 ). 设计步骤 :
1.利用 MATLAB 来确定 FIR 滤波器的参数;
2. 启动 CCS, 在 CCS 中建立一个汇编源文件、建立一个 C 源文件和 一个命令文件, 并将这三个文件添加到工程, 再编译并装载程序;
3. 设置波形时域观察窗口,得到滤波前后频谱变化图;
4. 设置频域观察窗口,得到其滤波前后频谱变化图。
四、设计的源程序
本设计采用 TMS320C5502芯片。设计的程序如下:
(1) . C源文件
#include
#include
#define signal_1_f 200
#define signal_2_f 620
#define signal_sample_f 2000
#define pi 3.1415926
#define coff_L 23
#define bufer_L 256
int data_in[bufer_L];
int out[bufer_L] ;
int firout;
int x[coff_L+1];int k=0;
int bufer=bufer_L;
extern int fir(int *,int );
extern int init(int *,int );
extern int outdata(int *,int , int );
void inputwave();
void main()
{
inputwave();
init(x,BL);
while (1)
{
x[0]=data_in[k];
firout=fir(x,BL);
outdata(out,firout,bufer);
k++;
if (k>=bufer_L)
{
k=0;
}
}
}
void inputwave()
{
float wt1;
float wt2;
int i;
for (i=0;i<>
{
wt1=2*pi*i*signal_1_f;
wt1=wt1/signal_sample_f;
wt2=2*pi*i*signal_2_f;
wt2=wt2/signal_sample_f;
data_in[i]=(cos(wt1)+cos(wt2))/2*32768; }
}
(2) . 汇编源文件
.global _fir,_init,_B,_outdata
_fir
bset frct
amov #_B,xdp
mov #_B,cdp
mov t0,ac0
sub #1,ac0
mov ac0,mmap(csr)
add ac0,ar0
mov #0,ac0
rpt csr
macmz *ar0-,*cdp+,ac0
mov hi(ac0),t0
ret
_init
mov mmap(t0),ac0
sub #1,ac0
mov ac0,ar7
rptz ac0,ar7
mov ac0,*ar0+
ret
_outdata
mov t1,ac0
sub #2,ac0
mov ac0,mmap(csr)
add ac0,ar0
rpt csr
delay *ar0-
mar *ar0+
mov t0,*ar0
ret
(3) 命令文件
-stack 0x500
-sysstack 0x500
-heap 0x1000
-c
-u _Reset
-l rts55.lib
MEMORY
{
PAGE 0:
RAM(RWIX): origin=0x000100, length=0x01ff00 ROM(RIX): origin=0x020100, length=0x01ff00 VECS(RIX): origin=0xffff00, length=0x000200 PAGE 2:
IOPORT(RWI):origin=0x000000, length=0x020000 }
SECTIONS
{
.text >ROM PAGE 0
.data >ROM PAGE 0
.bss >RAM PAGE 0
.const >RAM PAGE 0
.sysmem >RAM PAGE 0
.stack >RAM PAGE 0
.sysstack >RAM PAGE 0
.switch >RAM PAGE 0
.cinit >RAM PAGE 0
.pinit >RAM PAGE 0
.vectors >VECS PAGE 0
.ioport >IOPORT PAGE 2
}
(4) .h 文件
int BL=23;
int
B[23]={-417,342,1961,1692,-762,-1003,1676,1115,-3200,-1159,10335,1 7562,10335,-1159,-3200,1115,1676,-1003,-762,1692,1961,342,-417};
五、仿真
(1) 输入的时域波形
(2)输入的频域波形
滤波后的输出波形: (1)时域波形
(2)频域波形
六、总结
通过这次的课程实验设计, 我对汇编语言有了更加深入的了解。 之前 在学习本门课程时,我只是简单的熟悉了 DSP 语言和简单的 MATLAB 编程的应用,并没有熟练的运用到实际工作中。但在经过 了本次的设计之后, 我可以自如的运用这两种知识进行操作了, 并对 它们产生了浓厚的兴趣, 知道了它们在实际工作中的重要性。 以后我 会更加努力的学习汇编语言,让自己在编程方面有更高的造诣。
DSP 硬件电路设计基础课程设计 FIR
滤
波
器
的
设
计
姓名:吴永奇
学号:07001227
班级:电信 0701班
专业:电子信息工程
学院:信息工程学院
转载请注明出处范文大全网 » 有限冲击响应滤波器(FIR)
20khz;>