DSP课程设计滤波器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP课程设计--滤波器
目录
摘要...................................... 错误!未定义书签。
前言.. (1)
1 方案设计与论证 (2)
1.1 设计方案概论 (2)
1.2 设计方案详论 (2)
1.3 设计工具CCS及SEED-DTK2812 实验系统简介 (3)
2 系统设计 (4)
2.1 IIR数字滤波器的设计方法及原理 (4)
2.2 程序设计流程图 (6)
2.3 系统设计步骤 (7)
4 总结 (10)
参考文献 (12)
致谢 (13)
附录 (14)
前言
本文介绍了滤波器的滤波原理以及模拟滤波器、数字滤波器的设计方法。
重点介绍了IIR数字滤波器的设计方法。
即脉冲响应不变法和双线性变换法。
在此基础上,用DSP虚拟实现任意阶IIR滤波器。
此设计扩展性好,便于调节滤波器的性能,可以根据不同的要求在DSP上加以实现。
数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。
数字信号处理在理论上的发展推动了数字信号处理应用的发展。
反过来,数字信号处理的应用又促进了数字信号处理理论的提高。
而数字信号处理的实现则是理论和应用之间的桥梁。
数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。
数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。
IIR 数字滤波器的特征是,具有无限持续时间冲激响应,需要用递归模型
DSP 芯片是一种特别适合数字信号处理运算的微处理器,主要用来实时、快速地实现各种数字信号处理算法。
数字信号处理由于具有精度高、灵活性强等优点,已广泛应用于图像处理、数字通信、雷达等领域。
数字滤波技术在数字信号处理中占有极其重要的地位,数字滤波器根据其单位脉冲响应可分为IIR(无限长冲激响应滤波器)和FIR (有限长冲激响应滤波器)两类。
IIR滤波器可以用较少的阶数获得很高的选择特性,但在有限精度的运算中,可能出现不稳定现象,而且相位特性不好控制。
数字滤波器本质上是一个完成特定运算的数字计算过程,也可以理解为是一台计算机。
最多64个增加到现在的200个以上,引脚数量的增加,意味着结构灵活性的增加。
此外,DSP芯片的发展,是DSP系统的成本、体积、重量和功耗都有很大程度的下降。
1 方案设计与论证
1.1 设计方案概论
IIR 滤波器的选择:在APF 中,滤波器的设计应满足:截止频率低,过渡带快,通带内增益接近1、阻带内增益接近0,在满足精度要求的前提下阶数尽量低,以使滤波器的运算速度快。
滤波器有模拟滤波器和数字滤波器两种。
这里选用数字滤波器,因为它相对于模拟滤波器更容易进行滤波代数运算,而且数字滤波器的优点是没有模拟滤波器那样的随时间、温度、电压漂移,还有数字滤波器还能实现近似理想的响应和线性相位,所以能更好地达到谐波检测的实时性和准确性的要求,数字滤波器有无限冲激响应(IIR )系统和有限冲激响应(FIR )系统两种。
IIR 系统的优点是实现的阶数低,对于实现相同要求的数字滤波器,FIR 滤波器的阶数要比IIR 滤波器的阶数高5~10倍,IIR 滤波器的设计相对简单,可以由对应的模拟滤波器转换而来。
FIR 系统的优点是采用递归结构,可以得到严格的线性相位,运算的误差也较小,FIR 的设计比IIR 要灵活。
结合IIR 滤波器和FIR 滤波器的优缺点,由于在APF 谐波检测中的低通数字滤波器是用于通过直流,滤掉交流,对相位的要求不高,而且希望运算尽量小,因此选用IIR 滤波器。
1.2 设计方案详论
滤波器可广义的理解为一个信号选择系统,它让某些信号成分通过又阻止或衰减另一些成分。
在更多的情况下,滤波器可理解为选频系统,如低通、高通、带通、带阻。
滤波器可分为三种:模拟滤波器、采样滤波器和数字滤波器。
模拟滤波器可以是由RLC 构成的无源滤波器,也可以是加上运放的有源滤波器,是连续时间系统;采样滤波器由电阻、电容、电荷转移器件、运放等组成,属于离散时间系统,幅度连续;数字滤波器由加法器、乘法器、存储延迟单元、时钟脉冲发生器和逻辑单元等数字电路构成,精度高,稳定性好,不存在阻抗匹配问题,可以时分复用。
设计滤波器,就是要确定其传递函数,传递函数H(z)已知后,则可以确定系统的频率响应为)()(|)()(w j jw e z jw e e H z H e H jw Φ===,其中)()(w e H jw Φ和分别是幅频特性和相
位特性。
对于无失真传输系统,有
τjw jw ke e H -=)(,即 ⎪⎩⎪⎨⎧-=Φ=τ
w w k e H jw )()( (1.1)
幅频特性为常数,信号通过系统后各频率分量的相对大小保持不变,没有幅度失真。
相位特性为线性,使对应的时域方程的时延量为常数:)
kx
y,即系统对各频
n
=n
-
)
(
(τ
率分量的延迟时间相同,保证了各频率分量的相对位置不变,没有相位失真。
数字通信对相位的要求比模拟通信高许多,线性相位很重要。
数字系统描述时延的函数有两个:
群时延:dw
w
-:反映相频曲线的线性程度
Φ
(
d/)
相时延:w
-:反映各频率分量在时域的相对延时。
Φ
w/)
(
所以无相位失真的传输条件是要具有恒群时延和恒相时延,即dw
(
-=
Φ
d/)
w
Φ
(
-=常数τ。
w/)
w
数字滤波器的设计是确定其系统函数并实现的过程,一般要经如下步骤:
1、根据任务,确定性能指标。
2、用因果稳定的线性移不变离散系统函数去逼近。
3、用有限精度算法实现这个系统函数。
4、利用适当的软、硬件技术实现。
我们在这里主要讨论数字滤波器系统函数的逼近过程,包括无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器系统函数的逼近。
1.3 设计工具CCS及SEED-DTK2812 实验系统简介
CCS的全称是Code Composer Studio,它是美国德州仪器公司(Texas Instrument,TI)出品的代码开发和调试套件。
TI公司的产品线中有一大块业务是数字信号处理器(DSP)和微处理器(MCU),CCS便是供用户开发和调试DSP和MCU 程序的集成开发软件。
TI Code Composer Studio (CCStudio) 是TI eXpressDSPTM实时软件技术的重要组成部分 , 它可以使开发人员充分应用DSP 的强大功能。
随着TI 的TMS 320C 5000(C5K )和TMS 320C 6000 (C6K )DSP平台的应用范围不断扩大 , 已经由其应用于下载视频流的手持因特网接入产品扩展到蜂窝通信网络和光网络的通信基础设施 ,eXpressDSPTM也便获得了越来越多软件工程师的青睐。
嵌入式编程人员现可利用TI 的Code Composer Studio加快优化DSP 软件的速度,前瞻性的综合建议及易于使用的调整工具能够帮助开发人员简化并加速代码优化进程。
这些强大但易于使用的功能不仅能够缩短开发时间,而且能够帮助编程人员充分发挥TI TMS 320C 6000 DSP平台器件的全部潜能。
Code Composer Studio实现了多场所的连通性 , 极大地改进了基于TI 业界领
先的T MS 320C 5000 TM 和TMS 320C 6000 TM DSP平台单处理器或多处理器代码的开发、优化及其调试工具的性能。
先进的应用 ,如图像与视频、宽带接入、3G无线通信及其它一些融合高性能的技术将得益于Code Composer Studio v3.1的可靠性及其快捷的开发时间。
对于那些希望把业界领先的C6000 TM DSP平台的高性能与C5000 TM DSP 平台的低功耗相结合的系统开发者来说,Code Composer Studio v3.1为使其同时调试混合多处理器成为了可能。
Code Composer Studio v3.1 还增加了实时数据交换(RTDX TM ) 仿真功能 , 可支持来自任何地方的2至50个C5000和C6000 DSP器件同时运行。
此外 , 支持RTDX 的仿真器还实现了实时DSP/BIOS TM仿真调试 , 该高级调试功能可以使开发人员更深入地了解DSP 代码在硬件或仿真状态中的运行情况。
Code Composer Studio™ IDE提供强健、成熟的核心功能与简便易用的配置和图形可视化工具,使系统设计更快。
SEED-DTK(DSP Teaching Kit)是一套可以满足大学本科、研究生和教师科研工作的综合实验设备。
SEED-DTK 是我公司在总结以往产品的基础上,以独特的多DSP 结构、强大的DSP 主板功能、丰富的外围实验电路、精心设计的实验程序、精湛的产品工艺形成的高性能产品。
本文档主要介绍的是SEED-DTK2812 实验箱,它由SEED-DEC2812 板卡以及SEED-DTK_MBoard 构成;其中主控板是我公司生产的SEED-DEC2812,母板是我公司生产的SEED-DTK_MBoard 板卡。
此外,该款实验箱还可配置DSK板卡、图像处理卡等多种子卡。
2 系统设计
2.1 IIR数字滤波器的设计方法及原理
(1) IIR 滤波器直接型结构
数字滤波器的输入x[k]和输出y[k]之间的关系可以用如下常系数线性差分方程及
其z 变换描述。
(2.1)
系统的转移函数为
(2.2)
设N=M,则传输函数变为
(2.3)
它具有N 个零点和N 个极点,如果任何一个极点在Z 平面单位圆外,则系统不稳定。
如果系数b j 全部为0,滤波器成为非递归的FIR 滤波器,这时系统没有极点,因此FIR 滤波器总是稳定的。
对于IIR 滤波器,有系数量化敏感的缺点。
由于系统对序列施加的算法,是由加法、延时和常系数乘三种基本运算的组合,所以可以用不同结构的数字滤波器来实现而不影响系统总的传输函数。
(2) IIR 数字滤波器的设计
数字滤波器设计的出发点是从熟悉的模拟滤波器的频率响应出发,IIR 滤波器的设计有两种方法:
第一种方法先设计模拟低通滤波器,然后通过频带变换而成为其他频带选择滤波器(带通、高通等),最后通过滤波器变换得到数字域的IIR 滤波器。
第二种方法先设计模拟低通滤波器,然后通过滤波器变换而得到数字域的低通滤波器,最后通过频带变换而得到期望的IIR 滤波器。
模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器)
为了用物理可实现的系统逼近理想滤波器的特性,通常对理想特性作如下修改:
1) 允许滤波器的幅频特性在通带和阻带有一定的衰减范围,幅频特性在这一范围内允许有起伏。
2) 在通带与阻带之间允许有一定的过渡带。
工程中常用的逼近方式有巴特沃斯(Butterworth)逼近、切比雪夫(Chebyshev)逼近和椭圆函数逼近。
相应设计的滤波器分别为巴特沃斯滤波器、切比雪夫滤波器和椭圆函数滤波器。
巴特沃斯滤波器的模平方函数由下式描述:
(2.4)
n 为阶数;Ωc 为滤波器截止频率
切比雪夫滤波器比同阶的巴特沃斯滤波器具有更陡峭的过渡带特性和更优的阻带衰减特性。
切比雪夫低通滤波器的模平方函数定义为
(2.5)
其中,ε为决定| H c(Ω) |等波动起伏幅度的常数;n为滤波器的阶数;T n(Ω)是n 阶切比雪夫多项式。
3. 本实验中IIR 的算法公式:
(2.6)
(2.7)
2.2 程序设计流程图
根据理论分析,我们得到了总体设计的思路和方法,根据得到的设计思路和方法,可以画出设计的流程图,流程图如图2.1所示。
CSL初始化
AD采样初始化
AD采样
无限冲击响应数字滤波
图2.1 程序设计流程图
2.3 系统设计步骤
根据程序设计流程图的基本思想以及CCS及SEED-DTK2812试验箱的使用方法,可以按一下步骤进行系统设计和仿真。
首先做好准备工作:
(1)将DSP 仿真器与计算机连接好;
(2)将DSP 仿真器的JTAG 插头与SEED-DEC2812 单元的J1 相连接;
(3)打开SEED-DTK2812 的电源。
观察SEED-DTK_MBoard 单元的+5V,+3.3V,+15V,-15V 的电源指示灯以及SEED_DEC2812 的电源指示灯D2 是否均亮;若有不亮的,请断开电源,检查电源。
设计步骤
(1)打开CCS,进入CCS 的操作环境;
(2)装入IIR.pjt 工程文件,添加2812.gel 文件,开始进行调试;
(3)装载程序Filter.out;
(4)数字滤波实验都需要设置实验箱信号源。
通过液晶屏和键盘,设置信号源:当液晶屏上出现“通讯自检不成功,请复位系统”时,按下“Enter”键,进入“信号发生器设置”。
在“信号发生器设置”这一菜单下:
“通道”设为“0”;
“信号类型”可根据需要任意选择;
“信号频率”和“信号振幅”可在屏幕下方“有效输入”限定的范围内任意输入,建议振幅设为1000 左右,频率”设为300 左右;“电压偏移”设为1;
(注:TMS320F2812 的AD 输入范围在0—3v,而SEED-DTK_MBoard 板CSL 初始化AD 采样初始化AD 采样无限冲击响应数字滤波的信号源默认输出为-1V—1V,故选择1V 的电压偏移)
“信号发生器开关”设为“开启”。
此时便有信号输入音频芯片AIC23 的输入端(利用此芯片同样可以进行AD 采集)。
(5)打开Filter.C 在第90 行“for(i=0;i<DataLong;i++)”,95 行“adconvover=0;”,行“adconvover=1”设置断点。
(6)运行程序到断点,观察Ad_data[]数组与filter_result[]数组的值。
其中图像显示设置对话框中Start adderss:起始地址;Acquisition Buffer Size:输入数据个数;Display Data Size:显示数据个数(注意:显示个数要与程序中宏定义的采样个数一致);DSP Data
Type:数据类型。
3 仿真结果与分析
经过程序的反复修改和调试及系统的调试,基本实现了IIR滤波器的设计,测试用的波形是带噪声的方波信号,通过IIR滤波器。
分析与观察滤波前后的波形图以及滤波前后的频谱图,可以确定该IIR滤波器基本达到滤波的效果和要求。
仿真截图如下。
观察输入信号的波形图,如图3.1所示。
图 3.1 输入信号的波形
该波形是带有噪声的方波,不是标准的方波,波形有很多毛刺。
可以通过用FFT算法得到图3.1的频谱图,观察到输入信号的频谱图,如图3.2所示。
图3.2 输入信号的频谱
带噪声的方波经过IIR滤波器后可以得到去噪声的方波,如图3.3所示。
图3.3 输出信号波形
带噪声的方波经过IIR滤波器后,波形变得平滑了,取出了毛刺,基本达到滤波的要求。
带噪声的方波经过IIR滤波器滤波后得到去噪声的频谱图,如图3.4所示。
图3.4 输出信号的频谱图
分析带噪声的频谱图,可以发现把后面的少的高频部分滤除掉了,剩下的频率成分较多低频部分留下,已达到波形的平滑。
基本符合理论要求,达到了滤波的效果。
4 总结
在课程设计的过程中,我们经历了感动,经历了一起奋斗的酸甜苦辣。
也一起分享了成功的喜悦。
这次的课程设计对我们每个人来说都是一个挑战。
在这两周的学习中,我学到了很多,也找到了自己身上的不足。
感受良多,获益匪浅。
我们小组分工合作、齐心协力,一起完成了课程设计前的准备工作(阅读课程设计相关文档)、小组讨论分工、完成系统开发的各个文档、课程设计总结报告、在课程设计的第一天我们便对这次任务进行了规划和分工。
在以后的几天中,我们组的成员一起努力,查阅资料、小组讨论、对资料进行分析,课程设计这样集体的任务光靠团队里的一个人或几个人是不可能完成好的,合作的原则就是要利益均沾,责任公担。
如果让任务交给一个人,那样既增加了他的压力,也增大了完成任务的风险,降低了工作的效率。
所以在集体工作中,团结是必备因素,一开始我们对CCS不熟悉,后来在同学的帮助下让我顺利的完成课程设计,最后感谢老师的耐心辅导,在老师的辅导下我学会了简单的编程。
在我们大家的共
同努力下,我们顺利地完成了此次课程设计。
参考文献
[1]黄席椿高顺良.滤波器综合法设计原理[M].北京:人民邮电出版社,1978.309-316,261-270.
[2]沈永欢梁在中等.实用数学手册[M].北京:科学出版社,2001.726-732.
[3]程佩青.数字滤波与快速傅里叶变换[M].北京:清华大学出版社,1990.
[4]彭启琮. DSP集成开发环境——CCS及DSP/BIOS的原理与应用[M]. 电子工业出版社,2004.
.
致谢
在这次课程设计的撰写过程中,我得到了许多人的帮助。
本课题在选题及进行过程中得到胡湘娟老师的悉心指导。
论文行文过程中,胡老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。
胡老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。
再多华丽的言语也显苍白。
在此,谨向胡老师致以诚挚的谢意和崇高的敬意。
同时感谢实验室的等老师,他们给我们提供了必要的实验器材,提供了很大的方便。
我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。
同时也感谢学院为我提供良好的做毕业设计的环境。
再一次感谢所有在设计中曾经帮助过我的良师益友和同学。
附录
源程序代码如下:
/*******************filtter.c **********************************/
#include "DSP28_Device.h"
#include "filter.h"
#include "ext_inf.h"
#pragma DATA_SECTION(iir, "iirfilt");
IIR5BIQ16 iir=IIR5BIQ16_DEFAULTS; /* Instance the Filter Object and Initialize */
#pragma DATA_SECTION(iir_dbuffer,"iirfilt");
int iir_dbuffer[2*IIR16_LPF_NBIQ]; /* Create Delay Buffer */
const int iir_coeff[5*IIR16_LPF_NBIQ]=IIR16_LPF_COEFF;
unsigned int DataLong=1024; //采样点数1024
unsigned int adconvover = 0;
unsigned int convcount = 0;
unsigned int Ad_data[2048]={0};
int filter_result[1024];
unsigned int i,j;
unsigned int k= 0;
interrupt void ISRTimer2(void);
interrupt void ad(void);
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中断*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
//初始化cputimer
InitCpuTimers();
/*设置中断服务程序入口地址*/
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT2 = &ISRTimer2;
PieVectTable.ADCINT = &ad;
EDIS; // This is needed to disable write to EALLOW protected registers /*开中断*/
IER |= M_INT1;//ADC中断
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
/*iir init*/
iir.dbuffer_ptr=iir_dbuffer; /* Object Initialization */
iir.coeff_ptr=(int *)iir_coeff;
iir.qfmat=IIR16_LPF_QFMAT;
iir.nbiq=IIR16_LPF_NBIQ;
iir.isf=IIR16_LPF_ISF;
iir.init(&iir);
/*设置CPU*/
DINT;
ConfigCpuTimer(&CpuTimer2, 150, 22);
StartCpuTimer2();
/*开中断*/
IER |= M_INT14;
EINT;
InitAdc();
for(;;)
{
if (adconvover==1){
/*AD采样结束*/
for(i=0;i<DataLong;i++){
Ad_data[i]=Ad_data[i]-0x5555;
}
/*iir滤波处理*/
//iir注意input是q15,output是q14
for(i=0;i<DataLong;i++) {
iir.input=Ad_data[i];
iir.calc(&iir);
filter_result[i]=iir.output>>1;
}
adconvover=0;
}
}
}
interrupt void ad(void)
{
IFR=0x0000;
PieCtrl.PIEACK.all=0xffff;
if(adconvover==0){
Ad_data[convcount] = AdcRegs.RESULT0;
convcount++;
}
if (convcount==DataLong){
convcount=0;
adconvover=1;//接满标志
}
}
interrupt void ISRTimer2(void)
{
// AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
}。