DSP数字滤波器课程设计任务书要点.docx
《DSP数字滤波器课程设计任务书要点.docx》由会员分享,可在线阅读,更多相关《DSP数字滤波器课程设计任务书要点.docx(21页珍藏版)》请在冰豆网上搜索。
DSP数字滤波器课程设计任务书要点
摘要2
第一章.绪论3
摘要
数字滤波,是数字信号处理的基本核心内容之一,占有极重要的地位。
它通过对采样数据信号进行数学运算处理来达到频域滤波目的,是图像处理、语音处理、模式识别、通信、软件无线电、谱分析等应用中的一个基本处理算法。
与模拟滤波器相比,数字滤波器不用考虑器件的噪声、电压漂移、温度漂移等问题,可以容易的实现不同幅度和相位频率等特性指标,能够处理低频信号,频率响应特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等,这些优势决定了数字滤波器的应用很受欢迎。
现在通过DSP编程并结合TI公司的数字信号处理器TMs320VC5402设计了一款稳定度高,低功耗的IIR数字滤波器系统,并完成了软硬调试工作。
关键字:
数字滤波器DSPIIR滤波
第1章绪论
1.1数字滤波器的背景及意义
随着集成电路技术的发展,各种新型的大规模和超大规模集成电路不断涌现集成电路技术与计算机技术结合在一起,使得对数字信号处理系统功能的要求越来越强。
DSP技术已在通信、控制、信号处理、仪器仪表、医疗、家电等很多领域得到了越来越广泛的应用.在数字信号处理中数字滤波占有极其重要的地位。
数字滤波在语音信号、图象处理模式识别和谱分析等领域中的一个基本的处理技术。
数字滤波与模拟滤波相比数字滤波具有很多突出的优点,主要是因为数字滤波器是过滤时间离散信号的数字系统,它可以用软件或用硬件来实现,而且在两种情况下都可以用来过滤实时信号或非实时信号。
尽管数字滤波器这个名称一直到六十年代中期才出现,但是随着科学技术的发展及计算机的更新普及,数字滤波器有着很好的发展前景。
几乎在所有的工程技术领域中都会涉及到信号的处理问题,其信号表现形式有电、磁、机械以及热、光、声等。
信号处理的目的一般是对信号进行分析、变换、综合、估值与识别等。
如何在较强的噪声背景下提取出真正的信号或信号的特征,并将其应用于工程实际是信号处理的首要任务。
根据处理对象的不同,信号处理技术分为模拟信号处理系统和数字信号处理系统。
数字信号处理(Digital signal Processing,DSP)与模拟信号处理相比有许多优点,如相对于温度和工艺的变化数字信号要比模拟信号更稳健,在数字表示中,精度可以通过改变信号的字长来更好地控制,所以DSP技术可以在放大信号的同时去除噪声和干扰,而在模拟信号中信号和噪声同时被放大,数字信号还可以不带误差地被存储和恢复、发送和接收、处理和操纵。
许多复杂的系统可以用高精度、大信噪比和可重构的数字技术来实现。
数字信号处理中一个非常重要且应用普遍的技术就是数字滤波。
所谓数字滤波,是指其输入、输出均为数字信号,通过一定的运算关系改变输入信号所含的频率成分的相对比例或滤除某些频率成分,达到提取和加强信号中的有用成份,消弱无用的干扰成份的目的。
数字滤波与模拟滤波相比,有精度高、可靠性高、灵活性好等突出优点,可以满足对幅度和相位的严格要求,还能降低开发费用,缩短研制到应用的时间,在很多领域逐步代替了传统的模拟信号系统。
数字滤波器,在数字信号处理中有着广泛的应用,因此,无论是在理论研究上还是在如通讯、HDTV(高清晰度电视)、雷达、图象处理、数字音频等实际应用上都有着美好的技术前景和巨大的实用价值。
基于matlab实现数字滤波设计,可通过修改滤波器的参数十分方便地改变滤波器的特性,因此我们有必要对滤波器的设计方法进行研究,理解其工作原理优化设计方法,设计开发稳定性好的滤波器系统。
掌握滤波器的设计技术和原理能为在通信领域、信号处理领域等诸多领域中对数字滤波器的设计提供技术和准备,这不仅具有重要的理论意义同时还具有重要的现实意义。
1.2数字滤波器原理
数字滤波器是对数字信号进行滤波处理以得到期望的响应特性的离散时间系统。
作为一种电子滤波器,数字滤波器与完全工作在模拟信号域的模拟滤波器不同。
数字滤波器工作在数字信号域,它处理的对象是经由采样器件将模拟信号转换而得到的数位信号。
数字滤波器的工作方式与模拟滤波器也完全不同:
后者完全依靠电阻器、电容器、晶体管等电子元件组成的物理网络实现滤波功能;而前者是通过数字运算器件对输入的数字信号进行运算和处理,从而实现设计要求的特性。
图1数字滤波器原理图
数字滤波器对信号滤波的方法是:
用数字计算机对数字信号进行处理,处理就是按照预先编制的程序进行计算。
数字滤波器的原理如图1所示,它的核心是数字信号处理器。
数字滤波器是按照程序计算信号,达到滤波的目的。
通过对数字滤波器的存储器编写程序,就可以实现各种滤波功能。
对数字滤波器来说,增加功能就是增加程序,不用增加元件,不受元件误差的影响,对低频信号的处理也不用增加芯片的体积。
用数字滤波方法可以摆脱模拟滤波器被元件限制的困扰
数字滤波器是一个离散时间系统(按预定的算法,将输入离散时间信号(对应数字频率)转换为所要求的输出离散时间信号的特定功能装置)。
应用数字滤波器处理模拟信号(对应模拟频率)时,首先须对输入模拟信号进行限带、抽样和模数转换。
数字滤波器输入信号的数字频率(2π*f/fs,f为模拟信号的频率,fs为采样频率,注意区别于模拟频率),按照奈奎斯特抽样定理,要使抽样信号的频谱不产生重叠,应小于折叠频率(ws/2=π),其频率响应具有以2π为间隔的周期重复特性,且以折叠频率即ω=π点对称。
为得到模拟信号,数字滤波器处理的输出数字信号须经数模转换、平滑。
数字滤波器有低通、高通、带通、带阻和全通等类型。
它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。
应用最广的是线性、时不变数字滤波器,以及f.i.r滤波器。
第2章基于matlab的语音加噪信号数字滤波处理
2.1IIR数字滤波器的设计原理
数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR滤波器的特征是,具有无限持续时间冲激响应。
这种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器。
FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现,也可以采用非递归的方式实现。
数字滤波器的设计方法有多种,
如双线性变换法、窗函数设计法、插值逼近法和Chebyshev逼近法等等。
随着
MATLAB软件尤其是MATLAB的信号处理工作箱的不断完善,不仅数字滤波器
的计算机辅助设计有了可能,而且还可以使设计达到最优化。
数字滤波器设计的基本步骤如下:
(1)确定指标
在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指
标。
在很多实际应用中,数字滤波器常常被用来实现选频操作。
因此,指标的形
式一般在频域中给出幅度和相位响应。
幅度指标主要以两种方式给出。
第一种是
绝对指标。
它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。
第二种指标是相对指标。
它以分贝值的形式给出要求。
在工程实际中,这种指标最受欢迎。
对于相位响应指标形式,通常希望系统在通频带中具有线性相位。
运用线性相位响应指标进行滤波器设计具有如下优点:
①只包含实数算法,不涉及复数运算;②不存在延迟失真,只有固定数量的延迟;③长度为N的滤波器(阶数为N-1),计算量为N/2数量级。
因此,本文中滤波器的设计就以线性相位IIR滤波器的设计为例。
(2)逼近
确定了技术指标后,就可以建立一个目标的数字滤波器模型。
通常采用理想
的数字滤波器模型。
之后,利用数字滤波器的设计方法,设计出一个实际滤波器
模型来逼近给定的目标。
(3)性能分析和计算机仿真
上两步的结果是得到以差分或系统函数或冲激响应描述的滤波器。
根据这个
描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或
者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。
2.2IIR滤波器的仿真结果
图2原始语音信号
图3添加的噪声信号
由图2可以看出声波的频率主要集中在0--1500之间,故我选择将噪声分两种情况添加:
将噪声添加在2000HZ之后,采用低通滤波器滤除噪声还原原始声音;将噪声添加在2000HZ之后,采用带通滤波器滤除噪声还原原始声音。
图4加噪之后的语音信号
图5滤除噪声后的语音信号
经过在Matlab中的仿真不断改进过程中,我发现滤波器的设计若采用巴特沃斯滤波,产生的系数太小,有得甚至超出精度,若在将其转到CCS设计滤波器的话肯定会超出精度,所以我采用的是椭圆滤波器。
在CCS仿真时我采用的是直接二型结构的椭圆滤波器。
直接二型结构如图6所示:
图6直接二型结构示意图
滤波器设计流程如下
开始开始
根据音频特性和噪声添加滤波器分子分母系数
设计滤波器系数
产生波形(用两个正弦波代替语音和噪声)
调用Matlab函数实现滤波用C语言设计IIR典范型滤波器
观察滤波后的效果调整滤波器系数观察滤波后的效果若效果不佳则调整滤波器的阶数
噪声完全滤除且原音恢复无较大失真结束
结束
其中流程图是在Matlab中仿真流程,是在CCS中仿真流程,注意根据课设要求,两个仿真中滤波器应是一致的。
若CCS仿真中出现效果不佳或者无法完全滤除噪声时,若修改滤波器,则Matlab中也应相应修改。
第三章数字滤波器的DSP实现
3.1DSP系统的设计与开发
DSP系统的开发是一个复杂的过程,在系统的设计和调试中不但需要数字信号处理方面的理论知识,而且还要熟悉掌握各种DSP芯片、外围硬件电路以及DSP开发工具等。
3.2DSP系统的特点
DSP系统是以数字信号处理为基础的,因此不但具有数字处理的全部优点而且还具有以下特点:
(1)接口方便:
DSP应用系统与其他以现代数字技术为基础的系统或设备都是相互兼容的,这样的系统接口以实现某种功能要比模拟系统与这些系统接口要容易得多;
(2)编程方便:
DSP应用系统中的可编程DSP芯片,能灵活方便地进行修改升级;
(3)稳定性好:
DSP应用系统以数字处理为基础,受环境温度及噪声的影响较小、可靠性高,无器件老化现象;
(4)精度高:
16位数字系统可以达到10-5级的精度;
(5)可重复性好:
模拟系统的性能受元器件参数性能变化的影响比较大,而数字系统基本不受影响,因此数字系统便于测试、调试和大规模生产;
(6)集成方便:
DSP应用系统中的数字部件有高度的规范性,便于大规模集成。
3.3IIR数字滤波器在DSP上的实现步骤和条件
IIR数字滤波器在DSP上的设计过程如下:
(1)根据指标确定滤波器的类型,设计出滤波器的参数;
(2)根据DSP的特点(字长、精度等)对参数进行取舍、量化,然后进行仿真;
(3)根据仿真结果对滤波器的结构、参数再次进行调整,直到满足要求为止;
(4)在DSP上用语言实现滤波器功能。
DSP芯片,既可以做定点运算,也可以做浮点运算。
一个算法,既可以用汇编语言编程实现,也可以用高级语言(C,C++)实现。
而一个IIR数字滤波器是否可以在DSP上实现,最终要看此算法是否满足两个条件:
执行时间和精度。
一个算法的精度再高,如果做不到实时,也没有实用价值;相反,如果执行时间很快,但精度满足不了要求,也就无从实现滤波功能。
IIR数字滤波器在DSP上的实现思路,应该是在满足上面两个条件的前提下,找到尽可能简易的实现方法。
3.4DSP系统的开发工具
CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、和分析等工具。
CCS有两种工作模式:
软件仿真器模式:
可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试;硬件在线编程模式:
可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。
CCS的功能十分强大,它集成了代码的编辑、编译、链接和调试等诸多功能,而且支持C/C++和汇编的混合编程,其主要功能如下:
(1)具有集成可视化代码编辑界面,用户可通过其界面直接编写C、汇编、.cmd文件等;
(2)含有集成代码生成工具,包括汇编器、优化C编译器、链接器等,将代码的编辑、编译、链接和调试等诸多功能集成到一个软件环境中;
(3)高性能编辑器支持汇编文件的动态语法加亮显示,使用户很容易阅读代码,发现语法错误;
(4)工程项目管理工具可对用户程序实行项目管理。
在生成目标程序和程序库的过程中,建立不同程序的跟踪信息,通过跟踪信息对不同的程序进行分类管理;(5)基本调试工具具有装入执行代码、查看寄存器、存储器、反汇编、变量窗口等功能,并支持C源代码级调试;
(6)断点工具,能在调试程序的过程中,完成硬件断点、软件断点和条件断点的设置;
(7)探测点工具,可用于算法的仿真,数据的实时监视等;
(8)分析工具,包括模拟器和仿真器分析,可用于模拟和监视硬件的功能、评价代码执行的时钟;
(9)数据的图形显示工具,可以将运算结果用图形显示,包括显示时域/频域波形、眼图、星座图、图像等,并能进行自动刷新;
(10)提供GEL工具。
利用GEL扩展语言,用户可以编写自己的控制面板/菜单,设置GEL菜单选项,方便直观地修改变量,配置参数等;
(11)支持多DSP的调试;
(12)支持RTDX技术,可在不中断目标系统运行的情况下,实现DSP与其他应用程序的数据交换;
(13)提供DSP/BIOS工具,增强对代码的实时分析能力。
3.5IIR数字滤波器设计程序流程图
否
是
第四章IIR滤波器的仿真代码
4.1课程设计核心代码:
Matlab代码:
[y,fs]=audioread('C:
\Users\Administrator\Desktop\huangdi.wav');
%sound(y,fs)
audiowrite('1-1.wav',y,fs);
n=length(y)
y_p=fft(y,n);
f=fs*(0:
n/2-1)/n;
figure
(1)
subplot(2,1,1);
plot(y);
title('原始语音信号采样后的时域波形');
xlabel('点数')
ylabel('幅值A')
subplot(2,1,2);
plot(f,abs(y_p(1:
n/2)));
title('原始语音信号采样后的频谱图');
xlabel('点数');
ylabel('频率幅值');
L=length(y)
noise=0.1*randn(L,2);
audiowrite('noise.wav',noise,fs);
z=fft(noise);
%sound(noise,fs)
y_z=y+noise;
%sound(y_z,fs)
audiowrite('1+noise.wav',y_z,fs);
n=length(y);
y_zp=fft(y_z,n);
f=fs*(0:
n/2-1)/n;
figure
(2)
subplot(2,1,1);
plot(y_z);
title('加噪语音信号时域波形');
xlabel('点数')
ylabel('幅值A')
subplot(2,1,2);
plot(f,abs(y_zp(1:
n/2)));
title('加噪语音信号频谱图');
xlabel('点数');
ylabel('频率幅值');
fp=600;fs=800;Fs=44100;
rp=1;rs=10;
wp=2*pi*fp/Fs;
ws=2*pi*fs/Fs;
Fs1=1;
wap=2*tan(wp/2);
was=2*tan(ws/2);
[N,wc]=buttord(wap,was,rp,rs,'s');
[B,A]=butter(N,wc,'s');
[Bz,Az]=bilinear(B,A,Fs1);
figure(3);
[h,w]=freqz(Bz,Az,512,Fs1*44100);
plot(w,abs(h));
title('巴特沃斯低通滤波器');
xlabel('频率(HZ)');ylabel('耗损(dB)');
gridon;
yd=filter(Bz,Az,y_z);
ydd=fft(yd,n);
f=fs*(0:
n/2-1)/n;
figure(4);
subplot(2,1,1);plot(yd);
title('滤波后信号时域波形');
xlabel('点数')
ylabel('幅值A')
subplot(2,1,2);
plot(f,abs(ydd(1:
n/2)));
title('滤波后信号频谱');
xlabel('点数');
ylabel('频率幅值');
%sound(yd,Fs);
audiowrite('filter.wav',yd,Fs);
C语言代码:
IIR直接II型低通数字滤波器
#include"math.h"
#include"stdio.h"
#defineIIRNUMBER8//滤波系数个数,阶数为7阶
#defineSIGNAL1F2000//模拟频率
#defineSIGNAL2F7000//模拟频率
#defineSAMPLEF48000//采样频率
#definePI3.1415926
floatInputWave();
floatIIR(float);
floatfBn[IIRNUMBER]={
0.0001,0.0006,0.0019,0.0031,0.0031,0.0019,0.0006,0.0001};//分子系数
floatfAn[IIRNUMBER]={1.0000,-4.1865,7.8860,-8.5523,5.7276,-2.3578,0.5505,-0.0561
};//分母系数
floatdd[IIRNUMBER]={0.0};//中间变量
floatfInput,fOutput;
floatfSignal1,fSignal2;
floatfStepSignal1,fStepSignal2;
floatf2PI;
intj;
floatfIn[256],fOut[256];
intnIn,nOut;
main()
{
nIn=0;nOut=0;
f2PI=2*PI;
fSignal1=0.0;//初始相位
fSignal2=PI*0.1;//初始相位
fStepSignal1=2*PI*SIGNAL1F/SAMPLEF;//波形1数字频率
fStepSignal2=2*PI*SIGNAL2F/SAMPLEF;//波形2数字频率
while
(1)
{
fInput=InputWave();//输入Xn
fIn[nIn]=fInput;
nIn++;nIn%=256;//防止溢出
fOutput=IIR(fInput);//输出Yn
fOut[nOut]=fOutput;
nOut++;//请在此句上设置软件断点
if(nOut>=256)//防止溢出
{
nOut=0;
}
}
}
floatInputWave()//产生波形
{
floatXn;
Xn=sin(fSignal1)+0.5*sin(fSignal2);
fSignal1+=fStepSignal1;
if(fSignal1>=f2PI)fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if(fSignal2>=f2PI)fSignal2-=f2PI;
return(Xn);
}
floatIIR(floatXn)//直接II型IIR滤波
{
floatYn=0.0;
floatya=0.0;
for(j=IIRNUMBER-1;j>0;j--)//中间变量dd[i]向后移一位
{
dd[j]=dd[j-1];
}
for(j=1;j{
ya+=fAn[j]*dd[j];
}
ya=Xn-ya;//输入Xn
dd[0]=ya;//更新中间变量dd
for(j=0;j{
Yn+=fBn[j]*dd[j];
}
returnYn;//输出Yn
4.2仿真结果
图7滤波前的波形图和滤波后的波形图
图8滤波前的频谱图
图9滤波后的频谱图
第五章结果分析与总结
5.1结果分析与心得体会
在效果图中,上面波形为DSP实验箱产生的滤波前的效果图,下面波形为进行IIR滤波后的效果图。
从两图的比较可以看出,所设计的IIR滤波器收到了较好的效果,完成了设计要求。
在编写及调试的过程中主要遇到以下问题:
①在Matlab仿真中的声音信号应该是.wav的,否则Matlab无法读取其中信息,且声音信号最好以人类清唱或者朗读最好,背景乐器或其他声音与人的声音频带不在同一个范围,被视为噪声;
②在CCS编程时需注意,滤波器的分子分母的系数一定要对应上,否则滤波结果不对;
③在观察波形时需加入断点,否则不能观察到动态波形,且在配置观察窗口参数时需注意修改采样频率、字符类型,在观察波形变换时应在波形数组前加取地址符号’&’。
若滤波后的结果与理论结果不一致,则可以通过观察频谱图,和输入输出波形来查找错误的原因,若滤波效果一直不理想可以考虑将滤波器阶数改小(虽然滤波器阶数越大滤波效果越好,但CCS精度有限,滤波器越大系数越小)。
5.2总结
通过本次设计使我了解到了数字滤波器在信号处理技术中的重要地位,学习了数字滤波器的基本理论知识以及实现方法,学习了IIR滤波器的结构、设计理论,掌握了IIR滤波器的原理和特性,复习MATLAB的相关知识,对DSP有进一步的学习和认识,学习了CCS的有关编程和仿真的知识。
掌握了参考文献的查阅方法和科技论文的写作方法,进一步巩固了Microsoft Office Word的操作方法提高了独立分析、动手和理论联系实际的能力,为今后的学习和工作打下了良好的基础。
最后感谢学校及老师给我们这次课程设计的机会,最为感谢我们的辅导老师胡辉老师,在课程设计的过程中,胡辉老师和研究生学长们精心的辅导和不厌其烦地的态度才使得我们以顺利的完成这次设计,他那无私的奉献的精神照耀着我们对学习的热爱,同时也增加我们对知识的追求和欲望度。
参考文献
[1]高海林,钱满义.DSP技术及其应用[M].北京交通大学出版社.2009.
[2]谭浩强.C程序设计(第二版)[M].清华大学出版社.2003.
[3]PauloS.R.Diniz著,刘郁林等译.自适应滤波算法与实现(第二版)[M].电子工业出版社.2004.
[4]陈兴文,李敏,刘燕.基于DSP的自适应滤波器设计[J].大连民族学院学报.2005,5(3).
[5]邹彦.DSP原理及应用(修订版).[M]电子工业出版社.2005.