DSPFIR线性相位滤波器的设计.docx

上传人:b****8 文档编号:28188438 上传时间:2023-07-09 格式:DOCX 页数:19 大小:750.92KB
下载 相关 举报
DSPFIR线性相位滤波器的设计.docx_第1页
第1页 / 共19页
DSPFIR线性相位滤波器的设计.docx_第2页
第2页 / 共19页
DSPFIR线性相位滤波器的设计.docx_第3页
第3页 / 共19页
DSPFIR线性相位滤波器的设计.docx_第4页
第4页 / 共19页
DSPFIR线性相位滤波器的设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

DSPFIR线性相位滤波器的设计.docx

《DSPFIR线性相位滤波器的设计.docx》由会员分享,可在线阅读,更多相关《DSPFIR线性相位滤波器的设计.docx(19页珍藏版)》请在冰豆网上搜索。

DSPFIR线性相位滤波器的设计.docx

DSPFIR线性相位滤波器的设计

 

DSP原理及应用

——FIR线性相位滤波器设计

 

学院

光电信息与计算机工程学院

专业

通信工程

姓名

王桐张莹戴梦渝丁洁华张嫕

日期

2011年12月

 

1.引言

2.原理简介

2.1滤波器的分类

2.2FIR滤波器的设计

2.3窗函数设计法

3.实验所用软件

4.滤波器类型设定

5.实验步骤

5.1参数设定

5.2滤波器的脉冲响应

5.3MATLAB获取H参数

5.4DSP实现程序

5.5在CCS下的程序调试和结果显示

6.心得体会

7.小组成员具体分工

 

一.引言

随着信息时代和数字世界的到来,数字信号处理已成为当今一门极其重要的学科和技术领域。

数字信号处理在通信、语音、图像,自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。

在数字信号处理中,滤波占有极其重要的地位。

数字滤波器是谱分析、雷达信号处理、通信信号处理应用中的基本处理算法,在系统设计中,滤波器的好坏将直接影响系统的性能。

现代数字滤波器可以用软件或设计专用的数字处理硬件两种方式来实现,用软件来实现数字滤波器优点是随着滤波器参数的改变,很容易改变滤波器的性能。

二.原理简介

2.1滤波器的分类

数字滤波器从功能上看,可分为低通、高通、带通、带阻滤波器。

数字滤波器根据其单位脉冲响应可分为IIR(InfiniteImpulseResponse)无限长冲激响应滤波器和FIR(FiniteImpulseResponse)有限长冲激响应滤波器两类。

IIR滤波器可以用较少的阶数获得很高的选择特性,但在有限精度的运算中可能出现不稳定现象,而且相位特性不好控制。

在许多实际应用中为了保证滤波后的信号不产生相位失真。

一般均采用FIR滤波器。

2.2FIR滤波器的设计

FIR滤波器能够在保证幅度特性满足技术要求的同时,易做成严格的线性相位特性,且FIR滤波器的单位抽样响应是有限长的,因而滤波器一定是稳定的,而且可以用快速傅里叶变换算法实现,大大提高了运算速率。

同时只要经过一定的延时,任何非因果有限长序列都能变成因果的有限长序列,所以系统总能用因果系统来实现。

但FIR必须用很长的冲激响应滤波器才能很好地逼近锐截止的滤波器,需要很大的运算量,要取得很好的衰减特性,需要较高的阶次。

有限长单位冲激响应(FIR)滤波器有以下特点:

(1)系统的单位冲激响应h(n)在有限个n值处不为零;

(2)系统函数H(z)在|z|>0处收敛,极点全部在z=0处(因果系统);

(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。

长度为N的FIR滤波器的单位冲激响应h(n)的系统函数为:

H(z)=n=0N-1h(n)z-n

其差分方程为:

yn=m=0N-1hnxn-m

FIR滤波器直接型结构如图1所示:

图1FIR滤波器直接型结构

FIR滤波器的设计任务是选择有限长的单位冲激响应,使传输函数满足技术要求。

主要设计方法有窗函数法、频率取样法和等波纹逼近法等3种。

2.3窗函数设计法

基于窗函数的FIR数字滤波器的设计方法通常也称之为傅里叶级数法,是用一定宽度窗函数截取无限脉冲响应序列,获得有限长的脉冲响应序列,从而得到FIR滤波器。

它是在时域进行的,由理想滤波器的频率响应Hd(ejw)推导出其单位冲激响应hd(n),再设计一个FIR数字滤波器的单位冲激响应h(n)去逼近hd(n),表示为:

hdn=12π-ππHd(ejω)ejωndω

由此得到的离散滤波器的系统传递函数Hd(z)为:

Hdz=n=-∞∞hd(n)z-n

该hd(n)为无限长序列,因此Hd(z)是物理不可实现的。

为了是系统变为物理可实现的,且使实际的FIR滤波器尽可能逼近理想滤波器的频率响应,用一个有限长度的窗函数将无限脉冲响应hd(n)截取一段h(n)来近似表示hd(n),可得:

h(n)=hd(n)w(n),从而有:

Hz=n=0N-1h(n)z-n

式中N表示窗口长度,这样H(z)就是物理可实现的系统。

并且从FIR滤波器的充要条件可知,为了获得线性相位FIR数字滤波器的冲激响应h(n),那么序列h(n)应该有τ=(N-1)/2的延迟。

窗函数序列的形状及长度的选择是设计关键。

加窗处理对理想矩形频率响应产生了以下几点影响:

(1)加窗处理使理想频率特性在不连续点外边沿加宽,形成一个过渡带,过渡带的宽度等于窗的频率响应WR(ω)的主瓣宽度Δω=4π/N。

注意,这里所指的过渡带是两个肩峰之间的宽度,与滤波器真正的过渡带不同。

(2)在截止频率ωC两边ω=ωC±2π/N的地方(即过渡带两边),H(ω)出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,取决于旁瓣的多少。

(3)增加截取长度N,则在主瓣附近的窗的频率响应为:

WRω=sin⁡(Nω2)sin⁡(ω2)≈sin⁡(Nω2)ω/2=Nsinxx

其中,x=Nω/2。

所以,改变N,这能窗函数频谱的主瓣宽度、ω坐标的比例以及WR(ω)的绝对值大小,但不能改变主瓣与旁瓣的相对比例。

由于窗函数的选择对结果起着重要的作用,针对不同的信号和不同的处理目的来确定窗函数的选择才能收到良好的效果。

一般情况下,窗函数选择的原则是:

具有较低的旁瓣幅度,尤其是第一旁瓣的幅度;旁瓣的幅度下降的速率要快,以利于增减阻带的衰减;主瓣的宽度要窄,这样可以得到比较窄的过渡带。

在本次实验中我们采用blackman窗函数法。

布莱克曼窗函数

布莱克曼窗函数的时域形式可以表示为

它的频域特性为:

其中,

为矩形窗函数的幅度频率特性函数。

布莱克曼窗函数的最大旁瓣值比主瓣值低57dB,但是主瓣宽度是矩形窗函数的主瓣宽度的3倍,为12π/N。

窗函数法设计FIR滤波器的主要步骤:

(1)给出希望设计的滤波器的频率响应函数Hd(ejw);

(2)根据允许的过渡带宽度及带阻衰减,初步选定窗函数及其长度N;

(3)根据技术要求确定待求滤波器的单位取样响应hd(n),

hdn=12π-ππHdejωejωndω或hdn=12π02πHd(ejω)ejωndω

(4)将hd(n)与窗函数相乘得到FIR数字滤波器的单位取样响应h(n),h(n)=hd(n)w(n);

(5)按如下方法计算FIR数字滤波器的频率响应,并验证是否达到所要求的技术指标

Hejω=12πHdejω*Wejω或Hejω=n=0N-1hnejωn

由H(ejw)计算幅度响应H(ω)和相位响应φ(ω)。

如果不满足要求,可根据具体情况重复

(2)~(5)的步骤,直到满足技术要求。

三.实验所用软件

(1)Matlab7.1

(2)CCS3.3

四.滤波器类型设定

设计低通FIR滤波器:

通带边缘频率10KHz,阻带边缘频率22KHz,阻带衰减75dB,采样频率50KHz。

五、实验步骤

5.1 参数计算

窗函数选定:

阻带衰减75dB,选择blackman窗

截止频率:

2pi*(10+(22-10)/2)/50=0.64pi

窗函数长度:

blackman窗的过渡带宽为5.98,单位为2pi/N,而要设计的低通滤波器的过渡带宽为2pi*12/50=0.48pi,二者相等,得N=24.9,取25。

5.2 滤波器的脉冲响应

理想低通滤波器脉冲响应:

h1[n]=sin(nΩ1)/n/pi=sin(0.64pi*n)/n/pi

窗函数为:

w[n]=0.42-0.5cos(2pi*n/24)+0.8cos(4pi*n/24)

则滤波器脉冲响应为:

h[n]=h1*w[n]   |n|<=12

h[n]=0             |n|>12

5.3MATLAB获取H参数

根据滤波器的脉冲响应计算出h[n],然后将脉冲响应值移位为因果序列

这里计算h[n]的值,采用Matlab计算。

代码如下:

Window=blackman(25);

h=fir1(24,0.64,Window);

freqz(h,1)

系数如下:

h1 =

 

  Columns 1 through 8 

 

    0.0000    -0.0000   0.0008   -0.0019   -0.0016   0.0100    -0.0087   -0.0180

 

  Columns 9 through 16 

 

   0.0492    -0.0204   -0.1095    0.2800    0.6400   0.2800   -0.1095    -0.0204   

 

  Columns 17 through 24 

 

   0.0492    -0.0180    -0.0087   0.0100    -0.0019   -0.0016   0.0008   -0.0000

 

 Columns 25

   0.0000

5.4DSP实现程序

程序设计框图:

输入信号的获取:

floatInputWave()//信号输入函数

{

for(i=FIRNUMBER-1;i>0;i--)

fXn[i]=fXn[i-1];

fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;

fSignal1+=fStepSignal1;

if(fSignal1>=f2PI)fSignal1-=f2PI;

fSignal2+=fStepSignal2;

if(fSignal2>=f2PI)fSignal2-=f2PI;

return(fXn[0]);

}

滤波器的实现:

floatFIR()//滤波实现函数

{

floatfSum;

fSum=0;

for(i=0;i

{

fSum+=(fXn[i]*fHn[i]);

}

return(fSum);

}

5.5在CCS下的程序调试和结果显示

(1)启动CCS

(2)硬件选择

 

(3)创建fir.pjt工程

(4)加载fir.out文件

(5)显示输入信号的时域波形

(6)显示输入信号的频域波形

(7)显示输出信号的时域波形

(8)显示输出信号的频域波形

 

六.实验结果分析

f2PI=2*PI;

fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;

fSignal1=0.0;

fSignal1+=fStepSignal1;

fSignal2=PI*0.1;

fXn[i]=fXn[i-1];

fStepSignal1=2*PI/30;

fStepSignal2=2*PI*1.4;

由上面两段程序可以看出:

输入信号x(0)是由sin(0)+cos(0.1π)/6叠加,再与sin(2π/30)与cos(2.9π)混叠,是一个混叠有高频噪声的输入波形。

最大周期为32us,最小频率为3.125KHz。

而频谱图横轴为采样点,纵轴为频率分量的振幅。

频谱C(jnω0)=1T0-T02T02s(t)e-jnω0tdt

经过滤波器将高于3.125KHz的频率滤除。

七.心得体会

FIR滤波器的设计是数字信号处理技术的基础,也是DSP芯片的重要组成部分。

FIR滤波器性能的好坏直接影响着DSP的运行速度和精度,对现代电子技术的发展起决定性作用,FIR滤波器的设计在以后的一段相当长的时间里将持续主导DSP,而DSP随着电子技术的不断发展,应用领域愈来愈广泛。

通过这个学期的DSP原理课程的学习,以及上机实验,我们对DSP原理有了系统的了解。

熟悉了一些基本的编程语句。

本次报告,我们选择了FIR线性相位滤波器设计这个题目,通过大家的通力合作,掌握了数字滤波器的设计和信号滤波的方法,加深了对书本知识的认识,并熟悉了MATLAB软件的使用及编程方法。

同时通过此次课题我们重新认识了窗函数的知识,了解了各种窗函数设计滤波器的特点及优缺点,基本掌握了FIR滤波器的设计方法,把课本知识变换成了实践知识。

在研究课题的过程中,我们分工合作,在网上查找资料,阅读参考书,我们还学会了团队合作,实在是受益匪浅。

八.小组分工

王桐负责DSP程序的编写以及实现,以及实验结果的仿真及PPT、报告的后期整理及制作。

张莹负责滤波参数的计算及MATLAB对H参数的获取及PPT、报告的后期整理及制作。

戴梦渝负责编写报告,负责对资料的筛选,程序的选择与修改

丁洁华负责PPT的制作,前期资料收集,对参数,函数的选择

张嫕总协调,协助PPT制作,前期资料收集整理,选择确定题目及内容

 

附录:

C程序:

//#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile

//#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile

#include"f2812a.h"

#include"math.h"

#defineFIRNUMBER25//宏定义各个变量

#defineSIGNAL1F1000

#defineSIGNAL2F4500

#defineSAMPLEF10000

#definePI3.1415926

floatInputWave();

floatFIR();

floatfHn[FIRNUMBER]={0.0,-0.0,0.0008,-0.0016,-0.0019,0.01,-0.0087,

-0.018,0.0492,-0.0204,0.1095,0.28,0.64,0.28,

-0.1095,-0.0204,0.0492,-0.018,-0.0087,0.01,

-0.0019,-0.0016,0.0008,-0.0,0.0

};

floatfXn[FIRNUMBER]={0.0};

floatfInput,fOutput;

floatfSignal1,fSignal2;

floatfStepSignal1,fStepSignal2;

floatf2PI;

inti;

floatfIn[256],fOut[256];

intnIn,nOut;

main(void)

{

nIn=0;nOut=0;

f2PI=2*PI;

fSignal1=0.0;

fSignal2=PI*0.1;

fStepSignal1=2*PI/30;

fStepSignal2=2*PI*1.4;

while

(1)

{

fInput=InputWave();//调用信号输入函数

fIn[nIn]=fInput;

nIn++;nIn%=256;

fOutput=FIR();

fOut[nOut]=fOutput;

nOut++;

if(nOut>=256)

{

nOut=0;

}

}

}

floatInputWave()//信号输入函数

{

for(i=FIRNUMBER-1;i>0;i--)

fXn[i]=fXn[i-1];

fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;

fSignal1+=fStepSignal1;

if(fSignal1>=f2PI)fSignal1-=f2PI;

fSignal2+=fStepSignal2;

if(fSignal2>=f2PI)fSignal2-=f2PI;

return(fXn[0]);

}

floatFIR()//滤波实现函数

{

floatfSum;

fSum=0;

for(i=0;i

{

fSum+=(fXn[i]*fHn[i]);

}

return(fSum);

}

f2812a.h头文件:

#defineLED*(int*)0xc0000

#defineSW*(int*)0xc1000

#defineSPI_OE*(int*)0xc2000

#defineDA_CTL*(int*)0xc0003

#defineDA_DATA_L*(int*)0xc0006

#defineDA_DATA_H*(int*)0xc0007

#defineDA_LATCH*(int*)0xc6000

#defineDA_CHN10x0

#defineDA_CHN20x40

#defineDA_CHN30x80

#defineDA_CHN40xc0

//E2ROMInstruction

#defineWREN6

#defineWRDI4

#defineRDSR5

#defineWRSR1

#defineREAD3

#defineWRITE2

#defineWPEN0x80

#defineBL10x8

#defineBL00x4

#defineWEL0x2

#defineWIP0x1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1