首 页 行业热点 新车 试驾评测 养车用车 车型库
当前位置:首页基于DSP的IIR数字滤波器的设计

基于DSP的IIR数字滤波器的设计

2024-09-14 来源:好土汽车网
导读 基于DSP的IIR数字滤波器的设计
一、总框图设计

1、总体框图的设计

前端处理 AD50 McBSP DSP 音频输入 音频输出 功率放大 图1 语音滤波处理单元框图

本次DSP实现的语音输入模块采用偏置和差动放大技术,并经过滤波处理后输入到语音编解码芯片TLV320AD50,前端输入的电压范围为-2.5V---+2.5V。经过变换后输入到AD50的芯片的差动信号范围为0---5V。TLC320AD50C作为主方式,通过DSP的MCBSP0口进行通信。音频信号通过D/A转换后输出,由于TLC320AD50输出的是差动信号,因此首先经过差动放大,然后可以推动功率为0.4W的板载扬声器输出。总体来讲,本次设计就是要把输入的模拟音频信号进行数字化采集、A/D,IIR滤波、D/A转换,最后回放出模拟音频信号。因此,总的设计框图如上图1所示。

二、IIR数字滤波器的设计

2.1 IIR数字滤波器的设计框图

要设计IIR数字滤波器,应该首先设计一个模拟原型滤波器(截止频率为1rad/s的低通滤波器),无限冲激响应(IIR)滤波器的冲

1

激响应序列具有无限延伸的长度,它与模拟滤波器相匹配。进行IIR滤波器设计,就是利用幅值映射关系,将熟知的模拟滤波器转换为数字滤波器。

因此,设计IIR滤波器的框图如下:

数模指标参数变换 数字滤波器技术指标 数字滤波器 模拟 滤波器技术指标 相应的模拟滤波器设计 模拟滤波器离散化 图1 IIR数字滤波器的设计框图

2.2 基本原理

首先设计满足性能的模拟滤波器原型,再利用线性变换离散化为数字滤波器。也就是在模拟滤波器基础上在模拟域(S平面)进行频率变换,将模拟原形滤波器转换成所需类型(指定截止频率的低通、高通、带通、带阻)的模拟滤波器,再将其数字离散化,从S平面映射至Z平面,得到所需技术指标的数字滤波器。 2.2.1 巴特沃斯滤波器原理

由于已知指标,故可求出滤波器的阶数N,因而求出归一化极点 和归一化传输函数 。也可以根据N查表得到归一化传输函数。然后再去归一化,得到实际的滤波器传输函数Ha(S)。这样即可设计出低通巴特沃斯滤波器。巴特沃斯滤波器的幅度响应在通带内具有最平坦的特性,且在通带和阻带内幅度的特性,是单调变化的。模拟巴

2

特沃斯滤波器的幅度平方函数为2N,式中N称为滤波器的阶数,c 为角频率,所需系统的系统函数为Ha(s)=Han(s/c)。

2.2.2 双线性变换法工作原理

使数字滤波器的频率响应与模拟滤波器的频率响应相似。冲激响应不变不得法、阶跃响应不变法:时域模仿逼近缺点是产生频率响应的混叠失真双线性变换法也是一种由S平面到z平面的映射过程,双线性变换法与脉冲响应不变法不同,它是一种从S平面到z平面简单映射。双线性变换中数字域与频率 和模拟频率 之间的非线性关系限制了它的应用范围,只有当非线性失真是允许的或能被裣时,才能采用双线性变换法,通常低通、高通、带通和带阻等滤波器等具有分段恒定的频率特性,可以采用预畸变的方法来补偿频率畸变,因此可以采用双线性变换设计方法。另外,一个线性相位的模拟滤波器经双线性变换后就得到非线性相位数字滤波器,不再保持原有的线性相位了;并且,这种非线性关系就要求模拟滤波器的频响具有片断常数特性,即其一频率段的幅频响应近似某一常数。因此双线性变换法得到了广泛的运用。我们本次设计就是采用双线性变换法实现A/D的转换。 2.3 设计方法

首先应根据指标参数及对滤波器特性的要求,选择合适的滤波器类型及设计方法进行设计。

根据本次设计的要求:

采用Butterworth型IIR低通滤波:

采样频率:16KHZ,通带内最大允许衰减3dB,阻带内最小衰减

3

大于30dB,

过度带宽度为3.2KHz;

通带上限频率:1.76KHz或0.176KHz,间隔一定时间变化; 阻带下限截止频率:4.96KHz或3.36KHz,间隔一定时间变化 我们这次采用的是先设计Butterworth型IIR低通滤波,再经双线性变换,转化成IIR数字低通滤波器。

在进行双线性变换时,将整个频率轴上的频率范围压缩到

/T/T之间,在用zesT转换到z平面上。为了实现S平面上

整个虚轴安全压缩到S1轴之间的转换,利用正切变换实现频率压缩:

21tan(1T)式中,T是采样间隔,当Ω1从/T经过0变化到T2/T时,Ω则由-∞经过0变化到+∞,映射了整个虚轴。此时

2121es1TsTstan(1T)在通过转换到z平面上,得到 zes1TT2T1eZ=(2/T+s)/(2/T-s)。从s1平面转换到z平面仍然采用标准转换关系zesT,s1平面的TT之间水平带的左半部分映射z平面单位圆内部,虚轴映射单位圆,这样Ha(s)因果稳定,转换成的H(z)也因果稳定。

然而对于某些滤波器(比如具有片断常数特性的滤波器)来说,双线性变换后,各个片段边缘的临界频率点产生了畸变,这种频率的畸变可以利用21tan()将临界频率事先加以畸变,然后经变T2换后正好映射到所需要的频率。

4

三、IIR数字滤波器的MATLAB实现

3.1 程序:

Rp=3;As=35;wp=0.11*pi;ws=0.31*pi; T=1;Fs=1;

Omegap=(2/T)*tan(wp/2); Omegas=(2/T)*tan(ws/2);

ksp=((10^(0.1*Rp)-1)/(10^(0.1*As)-1))^0.5 Asp=Omegas/Omegap N=-(log(ksp)/log(Asp))

N=ceil(N)%不小于自变量的最小整数 wc=Omegas/((10^(As/10)-1)^(1/(2*N))) [z,p,k]=buttap(N) [b,a]=zp2tf(z,p,k) [bt,at]=lp2lp(b,a,wp) [bb,ab]=bilinear(bt,at,Fs) [h,w]=freqz(bb,ab,100); mag=abs(h);

db=20*log10((mag+eps)/max(mag)); plot(w/pi,db); axis([0,0.5,-50,10]);

title('图A 滤波器的幅频响应'); 3.2 结果: >>

ksp =0.0177

5

Asp =3.0337 N =3.6329 N =4 wc =0.3867 z =[]

p =-0.3827 + 0.9239i -0.3827 - 0.9239i -0.9239 + 0.3827i -0.9239 - 0.3827i k =1

b =0 0 0 0 1

a =1.0000 2.6131 3.4142 2.6131 1.0000 bt =0.0143

at =1.0000 0.9030 0.4077 0.1078 0.0143 bb =0.0006 0.0023 0.0034 0.0023 0.0006 ab =1.0000 -3.1078 3.7003 -1.9903 0.4068 >>

3.3 实验波形:

6

3.4 实验中调用的MATLAB函数说明:

Ⅰ 利用Buttord进行巴特沃斯滤波器阶数的选择,Buttord函数可在给定的滤波器性能情况下,选择Buttord滤波器最小的阶。

其格式为[n,Wn]=buttord(Wp,Ws,Rp,As,‘S’) ,其中,Wp,Ws分别是通带和阻带的截止频率,其值为≤Wp(Ws)≤1,Rp,As分别是低通和阻带区的波纹系数;‘S’为生成模拟滤波器;n为满足指定性能的Buttord滤波器的阶数;Wn为滤波器的截止频率。

Ⅱ 采用自编函数u_buttap构造出模拟滤波器的传输函数。 其格式为[b,a]=u_buttap(N,Omegac) 其中,b为模拟滤波器传输函数的分子多项式系数;a为模拟滤波器传输函数的分母多项式系数;N为Butterworth滤波器的阶数;Omegac为截止频率。

Ⅲ 双线形变换法实现模拟到数字的滤波器转换 其格式为[numd,dend]=bilinear(num,den,Fs)

其中,num为s域传递函数的分子;den为s域传递函数的分母;Fs为取样频率;numd为双线形变换后z域传递函数的分子;dend为双线形变换后z域传递函数的分母。

四、滤波对语音信号的处理

4.1程序流程图

7

初始化 打开串行输入输出口 设置滤波器参数fs, nlpass,nlstop 对滤波器a和b进行参数设计 调用模数转换子程序,读入音频信号 对输入信号进行滤波 调用写AD转换子程序,输出滤波后的音频信号 结束

4.2 DSP源程序

extern void InitC5402(void); extern void OpenMcBSP(void); extern void CloseMcBSP(void); extern void READAD50(void); extern void WRITEAD50(void);

8

/********************************************************* ** Main Function Program

*********************************************************/ #include \"stdio.h\" #include \"math.h\" #define pi 3.1415926

double fs,nlpass,nlstop,nhpass,nhstop,a[3],b[3],x,y; void biir2lpdes(double fs, double nlpass, double nlstop, double a[], double b[]);

void biir2lpdes(double fs, double nlpass, double nlstop, double a[], double b[]) {

int i,u,v;

double wp,omp,gsa,t;

wp=nlpass*2*pi;

omp=tan(wp/2.0); gsa=omp*omp; for (i=0; i<=2; i++) {

u=i%2;

v=i-1;

a[i]=gsa*pow(2,u)-sqrt(2)*omp*v+pow(-2,u);

}

for (i=0; i<=2; i++)

9

{ u=i%2;

b[i]=gsa*pow(2,u);

} t=a[0];

for (i=0; i<=2; i++) { a[i]=a[i]/t;

b[i]=b[i]/t;

}

}

void main(void) { int i,j; int x_ad,y_da;

int *px = (int*)0x3000; int *py = (int*)0x3100; double w2,w1,w0; w2=w1=w0=0.0;

InitC5402(); /* initialize C5402 DSP */ OpenMcBSP();

fs=16000;

for ( ; ; ) {

/* IIR LP filter */

for (i=0; i<=1; i++)

10

{ nlpass = 0.11-(i/10.0); nlstop = 0.31-(i/10.0);

biir2lpdes(fs,nlpass,nlstop,a,b);

for (j=-32000; j<=32000; j++)

{

READAD50();

px = (int*)(0x3000); x_ad = *px; x = x_ad/32768.0;

w2=x-a[1]*w1-a[2]*w0; y=b[0]*w2+b[1]*w1+b[2]*w0; w0=w1; w1=w2;

y_da=(int)(y*32768.0); py = (int*)(0x3100);

*py = y_da;

WRITEAD50();

} }

} /*void PROCESSING(void) {

do the necessery operations here!*/

11

}

链接程序: MEMORY {

PAGE 0: /* program space */

VECS: origin = 0x0080, length = 0x007f /* 128bytes vector table space */

PROG: origin = 0x0100, length = 0x24ff /* 8K program memory space */

PAGE 1: /* data space */

SCRA: origin = 0x0060, length = 0x001f /* scratch pad mem space */

STCK: origin = 0x2600, length = 0x04ff /* 1K words for stack */

DAT1: origin = 0x2b00, length = 0x04ff /* 256 words for sys data */

DAT2: origin = 0x3200, length = 0x0e00 /* 12K words for appl data */ }

SECTIONS {

.vectors : {} > VECS PAGE 0 /* interrupt vector table */ .text : {} > PROG PAGE 0 /* program code */ .data : {} > PROG PAGE 0 /* initialized data */

12

.coeffs : {} > PROG PAGE 0 /* initialized parameters */ .stack : {} > STCK PAGE 1 /* software stack section */ .variable : {} > DAT1 PAGE 1 /* uninitialized vars for DSP&AIC10 */

.bss : {} > DAT2 PAGE 1 /* uninitialized vars for applications */ }

4.3 实验结果与现象

本次DSP实现输入的是语音信号。

⑴ 在没有加IIR滤波器进行滤波,只进行语音的回放时,输入与输出语音没有明显的区别。

⑵ 在加入了IIR滤波后,原语音信号的低音部分没什么变化,原语音信号的高音部分没有出现高音,而变为低音。

五、总结

为期两周的课程设计结束了,刚开始由于对DSP不熟悉,拿到这个课题时毫无头绪,根本不知道从何处入手,并且在设计过程中遇到了很多的问题,但在陈老师的指导和自己的努力下,终于逐个解决了每一个难题。

在这两周中的学习使我对数字信号处理、DSP和MATLAB这几门课程有了进一步的了解,使我加强了动手、思考和解决实际问题的能力。并让我深刻的体会到,数字滤波器的应用十分广泛,运行MATLAB语言,能很容易地设计出具有严格要求(如线性相位等)的滤波器。

13

如果DSP采用更高的时钟,它的处理速度将更快,将能够满足更高采样率的数字信号的实时滤波处理。

在设计过程中,同时也暴露出了自身的许多不足,如自己自主解决问题的能力有所欠缺,这在以后需要更好的加强。同时在此设计过程中还用到了MATLAB等软件,我更熟悉了此软件的使用,这对以后的工作和解决实际问题都有了很好的帮助。 我感觉本次课程设计我的收获还是颇多的!

六、参考文献

1、《DSP原理及应用》邹彦主编,电子工业出版社 2、《C语言程序设计》谭浩强编,清华大学出版社

3、TMS320C54x DSP Reference Set, Volume 1: CPU TI Coperation

4、www.ti.com

5、TMS320C54x Code Composer Studio Tutorial

6、TMS320C54x DSP Reference Set, Volume 3: Algebraic Instruction Set

7、TMS320C54x Optimizing C Compiler User’s Guide

14

电气与信息工程系课程设计评分表

项 目 设计方案的合理性与创造性 硬件制作或软件编程完成情况* 硬件制作测试或软件调试结果* 设计说明书质量 设计图纸质量 答辩汇报的条理性和独特见解 答辩中对所提问题的回答情况 完成任务情况 独立工作能力 组织纪律性(出勤率) 综合评分 指导教师签名:________________

评 价 日 期:________________

注:①表中标*号项目是硬件制作或软件编程类课题必填内容;

②此表装订在课程设计说明书的最后一页。课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。

15

因篇幅问题不能全部显示,请点此查看更多更全内容